A polished invoice manager for freelancers and studios — CRUD, multi-select status filter, Zod validation, theme toggle with no flash on first paint. Everything persists to IndexedDB through idb, so a hard refresh never loses an edit and the app keeps working with the network cut.
IndexedDB through idb
Every invoice lives in IndexedDB, accessed through the idb wrapper. A hard refresh, a closed tab, an offline session — none of it loses a draft. Theme preference rides in localStorage and is applied pre-paint so the first frame is always the right colour scheme.
Validation with Zod
The invoice schema is a single Zod object: required fields, valid email, at least one line item, non-negative quantity and price. Field-level errors surface inline; the same schema runs on create and on edit so the two flows can never drift.
A landing page that earns the dashboard
The marketing surface is its own route — typography-first, with three pieces of supporting copy and a single CTA into the dashboard. Loading and error states are explicit (skeleton invoice rows, centred error with retry), and the whole thing was tested down to 320 px in real browsers, not just devtools.