Sistema UP
Three products, one database: public site, customer menu/ordering and the staff POS — offline-first.
- Role
- Design & Development
- Duration
- 3 meses
- Tech stack
- Next.js · Supabase · TypeScript

Goals
Move orders from paper and WhatsApp into a single flow
Give customers real-time ordering and tracking on their phone
Make sure the register sells even without internet
The challenge
Offline-first architecture: local sales queue with later sync
Real time between the customer menu and the staff register
Three products with different permissions over one database (RLS)
The solution
UP, an ice-cream shop in Inconfidentes/MG, took orders on paper and WhatsApp. The goal was to unify everything: customers order from their phone, the order lands at the register, staff follow production and the owner sees sales and stock.
I built three products on a single database (Supabase/PostgreSQL): the public SEO landing page, a mobile-first digital menu with per-product pages and real-time order tracking via link, and Sistema UP — the staff POS with counter sales, customers, history, stock and cash closing.
The hardest requirement was rural internet: the register can't stop when the provider goes down. A Service Worker pre-caches the POS screens, sales go to a local queue and sync automatically when the connection returns, and order numbers come from a block reserved while online.
There is also a database-free demo mode (the whole app runs in memory), push notifications, a Leaflet delivery map and Excel export. It's in production, with 450+ commits.
Key takeaways
Offline isn't a detail: it changes the data model (ids, numbering, conflicts) from day one.
An in-memory demo mode speeds up development and client presentations.
Designing screens from the real operation (counter, one hand, queue) beats any template.
Inside the project




- Next.js
- React
- TypeScript
- Supabase
- PostgreSQL
- Zustand
- Zod
- Tailwind CSS
- PWA
- Service Worker
- Web Push
- Leaflet
- TanStack Table
Like what you see?
Silver Ocean
