UX CASE STUDY · DESIGN TOOLS · v1.0, Shipped 2026
From a folder of 800 references to a shipped palette in under three minutes without sending a single pixel to the cloud.
Point Nitpic at a folder of references and a one-sentence brief. Get back a curated palette, a WCAG audit, and an exportable design system, in one window, in under three minutes. Everything runs locally.
Solo project, so I owned every layer. Research, persona, IA, visual system, the build. The audience I designed for is the audience I am: working designers, dev leads, and the creative directors who manage them.
The Problem vs. The Solution
Every color tool I owned wanted me to do three jobs on three surfaces. Pick favorites in a viewer, build a palette in a swatch app, check contrast in a third tool. The transitions between those surfaces were where the work happened, and where the work fell apart.
Three tools, three tabs, nothing talks
Pulling a usable palette out of references is one of the slowest steps in early visual design. The tools have not kept up with how the work actually moves.
One window, folder to palette
A three-pane workspace. Ingest references, write a brief, watch the AI curate. The output lands as a role-assigned palette with a live WCAG audit and six UI previews, then exports as a complete token set, and nothing leaves your machine.
The Impact
Nitpic is a personal product, so these come from benchmarking v1.0 against my own workflow. Three numbers I'd put on a slide if a hiring manager asked what shipped.
Brief curation token payload
Key Design Decisions
Three calls that defined what Nitpic is, and what it deliberately isn't.
v0 was a single 680px column. On a 27-inch monitor, half the screen was wallpaper. I evaluated a Figma-style floating canvas and a Lightroom-style three-pane grid. The grid won.
Picking colors needs three surfaces visible at once: the reference grid, the image you're inspecting, and the palette you're building. The moment any of those overlaps another, you're working blind on the one underneath.
Instead of sending pixels to a vision model, the app sends a one-letter-keyed JSON catalog per image: id, hex, tone bucket, lightness, hue, top three tags. The model reasons about color in HSL space.
Vision calls cost tokens by the thousand and most useful local models don't have vision. The catalog fits 150 images in 7,500 tokens, down from 22,828 in the first cut, inside Ollama's default 4,096-token constraint budget.
Industrial-camera concept. Signal-red accents, amber lens motifs, Barlow Condensed displays, Share Tech Mono for data labels, void-black surfaces.
A color tool has to demonstrate a visual point of view or the pitch collapses. A generic Tailwind shell would have undercut the whole product. Designers trust tools that look like they were made by someone who uses them.
Try the Tokens engine
The palette-to-design-system stage, running as a single page: pick a sample palette or build your own, watch the role-assignment heuristic map it onto semantic tokens with a WCAG AA guard, flip light and dark, and export CSS or JSON. The same engine that runs inside the app.
Inside the App
Live screens from v1.0. Every image opens full size.
Design Process
Standard Double Diamond, run end-to-end by one person. Owning every layer makes it tempting to skip the parts you find boring, so I had to stay honest about where I was and not let "I can just build it" short-circuit the thinking.
- ▸Workflow audit of my own moodboard-to-palette process
- ▸Competitive teardown: Coolors, Adobe Color, Khroma
- ▸Pain-point synthesis from designer forums
- ▸Primary persona: lead UX / creative director
- ▸6-stage journey map from Discover to Output
- ▸Happy-path flow with explicit fallback states
- ▸Dark-mode wireframes: dashboard, DNA, scatter map
- ▸Bespoke C-FRG industrial design system
- ▸Component-level tokens with CSS Module scoping
- ▸Electron shell wrapping Vite, React, and CSS Modules
- ▸FastAPI backend with Ollama for local AI by default
- ▸One-command launcher, v1.0 shipped end-to-end
The hardest part of senior design is shipping less
Four features got cut from v1 after they were built and working. An image-region highlighter, a dedup button, a pop-out preview, a floating tone strip. Each one took longer to justify cutting than it took to remove. The rule I landed on: if I couldn't state the cut reason in a sentence, the feature stayed. The product is better for it. Cutting working code is the move that's hardest to defend in writing and easiest to defend in user testing.
Let's build something impactful.
I'm currently open to new opportunities in UX/UI Design, Product Design, and GovTech transformation roles.