The Final Polish - UX Refinements and Front-First Workflow
The Date: January 4, 2026 The Goal: Moving from "functional" to "frictionless." The Result: A production-ready generation pipeline that enforces consistency.
Every project hits a point where the core features are "done," but the experience feels... crunchy. In the last 48 hours, we went through a final technical debt purge and a significant workflow refactor to make Asset Hatch feel like a professional tool.
The Consistency Enforcement: Front-First Workflow
One of the biggest challenges in AI asset generation is visual consistency across different directions. Even with style anchors, Flux.2 can sometimes drift.
We realized that for a "moveable" asset (like a hero or an NPC), the Front View is the source of truth. If the front view isn't right, there's no point in generating the left, right, or back views.
The Refactor: DirectionGrid v3.1
We rebuilt the DirectionGrid to enforce a strict Front-First logic:
-
All other direction cells are disabled until a Front view is generated and approved.
-
Once the Front view is approved, its image blob is used as a
referenceImagefor all subsequent directional generations. -
This ensures that the character's colors, silhouette, and style are locked in before the AI tries to guess what their back looks like.
We also cleaned up the grid UI. The "Approve/Reject" buttons were cluttering the 3x3 grid, making it hard to see the tiny details. We moved all controls to a persistent Active Direction Info panel below the grid. The grid cells now only show a subtle hover state and a "Maximize" icon.
The Unified Action Bar
As the generation page grew, we had buttons everywhere: "Regenerate Batch," "Accept All," "Export ZIP," "Back to Planning." It was cognitive overload.
We implemented a Unified Action Bar at the bottom of the screen. It's a context-aware command center that changes based on your current state:
-
Planning Mode: Shows "Finalize Plan."
-
Generation Mode: Shows "Generate Remaining" and "Accept All."
-
Selection Mode: Shows "Compare" and "Batch Approve."
By centralizing the primary actions, we cleared up the header and gave the app a much more "pro" feel.
Mobile Excellence: Beyond the Layout
In Part 15, we built the slide-out overlays. In this phase, we optimized the content inside those overlays for touch.
1. The Flat Asset List
On mobile, the hierarchical "Category > Asset" view was too many taps. We replaced it with a FlatAssetList—a high-density, searchable scroll view that lets you jump between assets instantly.
2. Modal Model Selection
Instead of a dropdown or an inline panel (which ate up screen real estate), we moved the model selector (Flux.2 vs Gemini 3 Pro) to a beautiful, touch-friendly Bottom Modal. Big tap targets, clear descriptions.
The Final Technical Debt Purge
The last step before "Series Complete" was a comprehensive TypeScript audit.
-
Zero
anypolicy: AI hates typescript. I mean, it thinks it loves it, becauuse any time there is a type, all it has to do is say "any" and it can do any-thing... right? sigh another round of unsafe, pointless typing from AI. Today, we hunted down the last remaining 26 (mind you, 26 in one session, smh)anytypes in our generation hooks and replaced them with strict discriminating unions. -
Aurora Design System: We standardized all colors, shadows, and blurs into a cohesive Aurora theme system, ensuring perfect accessibility (ARIA labels everywhere) and a premium "glassmorphism" look.
Lessons from the Polish Phase
-
Workflow is a feature. Enforcing "Front-First" wasn't just a UI change; it was an architectural decision that improved the quality of the AI output.
-
Standardize the "Boring" Stuff. Getting your enums and design tokens right early saves you from a world of hurt during a UI overhaul.
-
The last 10% takes 50% of the time. But it's that last 10% that makes a user trust your software.
Next:
Reflections. What did I actualyl learn?
Jordan Hindo
Full-stack Developer & AI Engineer building in public. Exploring the future of agentic coding and AI-generated assets.
Get in touch