Internal███████ ███████·NDA
2024 – present · Frontend lead + IC
admin portal.
Dense enough for power users. Usable enough for the store owner checking their phone between customers.
Dashboard
What changed today, at a glance.
$1,247
Sales today
+12% vs yesterday
This week
$8,432
+8% vs prev
Avg order
$42
+2% vs prev
Top seller
Sourdough
142 sold
Alerts
2
1 low stock
the dashboard — what changed today.
01 — Premise
the admin that wasn't there.
The platform shipped a working register and a mature backend, but merchants had no unified place to see their business or control their catalog safely. No dashboard. No reports. No mobile. No review step before price changes hit registers and the webstore.
Built for the desk, lived on the phone.
— The thesis
02 — Build
every surface they actually open.
Dashboard with KPIs and channel breakdowns. Reports with date filtering and comparison overlays. Alerts. Inventory views. A login that loads on an iPhone SE. Tables that stay readable while staying customizable. A price-batch queue that stages changes before they go live. Each surface earned its scope — built in tandem with the design system it sat on.
03 — Constraint
the same admin on every screen.
The hardest thing wasn't any single feature — it was holding mobile parity across all of them. The queue is tabular. The dashboard is chart-first. The settings flow is form-heavy. Each demanded a different physical model on a phone — cards instead of rows, stacked sparklines, full-screen sheets — while preserving every action a desktop user could take. Same data, same flow, different physics.
Inventory
Same data · two physics
Desktop · sortable
Item↑
Category
Price
Stock
⋯Apples
Produce
$1.49
450
⋯Bananas
Produce
$0.79
200
⋯Bread
Bakery
$4.50
50
⋯Coffee
Pantry
$12.99
25
⋯Mobile · cards
Apples
$1.49
Bananas
$0.79
Bread
$4.50
the table — same data, two physics.
04 — Stack
the kit.
- FrontendReact 19 · Next.js (app router) · TypeScript
- StylingTailwind CSS · Radix UI primitives
- DataSchema-first GraphQL · code-generated client
- BackendNestJS · PostgreSQL · Redis · queue workers
- SurfacesDashboard · reports · login · price-batch queue
- PatternsPlatformTabs · ReviewPanel · ConfirmDialog
Gated · NDA
More on the admin portal.
Next — 03
storefront.
Deli-counter complexity, made to feel like one tap.
Read the case study