The problem
The client resells Apple Watches on Amazon at scale. Before a unit goes live, it has to be graded (cosmetic + functional), labeled (SKU, model, size, case material, GPS / Cellular), and routed to a packing station.
They'd been running this through an old PHP dashboard (freephonecheck.com/dashboard.php). It worked, technically. But: adding a new model required a developer. Labels printed one at a time. The grading form lived in a different tab from the catalog. The whole flow was a sequence of waits — between the watch on the bench and the label coming out of the printer.
What we built
A new internal tool — built around how the grading station actually operates, not how the old database happened to be shaped.
- Full Apple Watch catalog as a first-class data model: model × size × case material × GPS/Cellular. Adding a new release is a row in a config file, not a dev ticket.
- Single-screen grading + labeling. Scan or pick the model, set the grade, hit print. The label, the inventory row, and the Amazon-listing fields all derive from the same record.
- Bulk print mode. Working through a batch of 50 units? Queue them up, print one ribbon, walk it to the bench. The slow part is the watches, not the software.
- Recents. If the team labels 200 Series 8s in a day, the form starts with Series 8 selected the 201st time too.
- Modern stack.Next.js / TypeScript / Tailwind. Same stack as the rest of our work, deployable to their Vercel project, maintainable by anyone who's touched a modern web app.
What we deliberately did not build
- No mobile app. Grading happens at a desk with a barcode scanner. A web app on a Chromebook beats a native app for this workflow.
- No AI-driven grading.Human eyes still grade cosmetic condition better than any model we'd ship in v1. The tool makes the human faster — it doesn't try to replace the judgment call.
- No Amazon API integration yet.Phase 1 stops at "labels printed, inventory row created." Amazon-listing automation is Phase 2 — separate scoping, separate risk.
Where it stands
Spec is approved. Phase 1 build is in progress — catalog seeded, grading screen scaffolded, label printer wiring in test. The old PHP dashboard keeps running until Phase 1 ships clean.
Why this matters beyond one client
The pattern — replacing a brittle legacy operational tool with a modern one built around the team's real flow — fits any business with a physical operation: warehouses, recruitment, repair shops, inventory resellers, lab work. If you have a legacy app that everyone tolerates and nobody loves, the discovery call is 15 minutes.