Café POS
An offline-first point of sale for a specialty café: tablet app, sync server, receipt and label printing.
- Proof
- ✓ 34/34 server database tests (Postgres 16)
- Proof
- ✓ 47/47 tablet-app tests, incl. simulated printers
- Proof
- ✓ Reproducible deploy stack
My role
Architecture, data and sync contract, integration and deployment. Tablet app and server implemented by AI coding agents under my contract and review.
The problem
A small café needs to keep taking orders when the internet drops, print to cheap thermal and label printers, and see stock and sales somewhere central.
What I built
- A Flutter tablet app: menu, modifiers, cash tender and change, order slips, and cup stickers on a Bluetooth label printer.
- A Next.js + PostgreSQL 16 server with a written sync contract. Orders, lines, payments and stock movements sync up, and price changes sync down on a 60-second cycle.
- A Docker Compose deploy that builds from scratch: migrations, seed, health check, non-root server, no public database port, and nightly backups.
Hard parts
Offline-first sync
The tablet is the source of truth for orders while offline. The server is the source of truth for the menu. A server-side price edit reached the tablet on its next sync with zero unsynced orders left behind.
Printing to real hardware
ESC/POS receipts are rendered as a 576-dot raster with a cut. Label printing speaks the printer's Bluetooth protocol directly. Both are covered by tests against simulated printers before field testing on the café's own device.
Stack
- Flutter
- Dart
- Next.js
- PostgreSQL
- Docker Compose
- ESC/POS
- Bluetooth LE
Skills shown: Flutter / Dart, Next.js, PostgreSQL, Docker, Linux servers, Automated testing, Specs & SDLC, AI-assisted development