01Problem
Small shops need a cashier and a daily cash book that runs on an ordinary Android phone and keeps working when the signal drops.
02What I built
A web app and an Android app on Google Play. The phone app is offline-first: sales and cash entries are stored on the device and synced when a connection is available. Version 1.1 adds guided onboarding with sample products and empty states, receipts shared to WhatsApp as an image or PDF straight from the phone, and over-the-air updates.
03How it works
- Layered phone app. Expo / React Native, layered as screens → services → repositories → SQLite, with pull/push sync to the API.
- Receipts on the device. API in Express 5 with Prisma; web app in Next.js. Receipts are rendered on the phone as PNG or PDF with the shop's name, address, header and footer (cached for offline use) and can be resent from the history screen.
- Two release lanes. JavaScript fixes ship over the air; native changes go through store builds.
04Results and scale
- Live on the web and Google Play with real users.
- Version 1.1 is ready for the next Play Store release.
- More than 140 commits since February 2026 across three repositories: API (Express 5, Prisma 6), web app (Next.js 16) and Android app (Expo SDK 54).
05Stack
- TypeScript
- Expo / React Native
- SQLite
- Express 5
- Prisma
- PostgreSQL
- Next.js
- Railway
- Vercel
- Cloudflare
06Gallery
In-app screens are not shown yet: they need a shop with fictional data so that no real customer records appear.

