_blogs
// blogs / 20260821.md
// blogs / 20260821.md
Dev Log: August 21 Wrap-up
Overview
Today was mostly about refinement and catching those small edge cases that make the difference between a tool that works and a tool that feels solid. I spent a good chunk of time in the onboarding module, fixing some UI friction and ensuring our data decorators don't leave stale state lying around.
What I Worked On
Making Onboarding a bit friendlier
We’ve had some feedback that users were getting stuck during the data upload process, so I added support for contextual help videos. Instead of a one-size-fits-all guide, I wired up a video_link attribute in our master definitions.
I also had to touch the frontend to make sure this looked right. If there’s no video, I’m now hiding the play icon entirely rather than leaving a dead link. It's a small thing, but it keeps the UI clean. On the logic side, I noticed our status checks were relying on display names like 'Executed', which is a recipe for disaster if someone changes a label. I swapped that over to check the underlying status code instead.
Squashing button-click confusion
One thing that was bugging me was the upload button logic. Previously, you could still click 'Upload' even if the process was already finished. Since we haven't wired up a full 're-upload' flow yet, I decided to just disable the button once the status hits 'executed'. It prevents users from falling into a loop that doesn't actually do anything.
Cleaning up stale data in decorators
I found a bug in how we handle our onboarding checklists. When a user changed a category, some of the specific flags from the previous selection were sticking around in the background. I was originally using an unSet method, but it wasn't behaving quite as expected with our persistence layer. I switched to being explicit about it:
/* If the category changes, clear out the old specific metadata */
if (!is_valid_category) {
data_item.set_flag(false);
data_item.set_package_type(null);
data_item.set_category_id(null);
}
It’s more verbose, but explicit is almost always better than implicit when you’re dealing with data integrity.
UI Polish & Config
Lastly, I did some housekeeping in our JSON configs.
- Fixed a display value for the 'Operation Center' role which was showing up as a snake_case string in the UI (gross).
- Updated the print template configuration to make the version field mandatory and added it to the main grid view. It was way too easy to save a template without a version, which causes headaches for the rendering engine later.
Wrapping Up
Most of today was reactive work based on how people are actually using the onboarding tools. It feels good to tighten those bolts. Tomorrow, I'm hoping to dive deeper into some performance issues we're seeing on the larger data imports. See ya then.