Every phone keeps its own records
Products, stock and sales are saved in a small database on the phone itself. There's no server to pay for or to go down, and the shop's figures never leave the shop.
Tylliq is our own point-of-sale app for small shops in Zimbabwe. This page shows how we took it from a one-line brief to a signed Android release: the decisions we made, a prototype you can tap through, and how we keep it updated.
01 — The problem
Most point-of-sale systems keep the shop's data on a server somewhere. That means a monthly subscription, and a till that stalls when the data bundle runs out or the network drops, which in many shops is every day.
The owners we had in mind already have Android phones, sometimes a cheap Bluetooth receipt printer, and often more than one person selling at once. They needed:
02 — How we built it
Tylliq is our own product, so we were the client too. Here's what each step looked like on this project.
We wrote down who it's for and what it must never need: no account, no cloud database, no internet for daily selling. Everything else was measured against that.
Before any screens, we decided how the data works: each phone keeps its own database, stock is a list of movements, and phones sync with each other over Wi-Fi. These choices are explained below.
We mapped the screens a cashier actually touches (sell, stock, history, sync, settings) as a clickable prototype, so the flow could be checked before it was built. Try it below.
Each feature shipped on its own: checkout with barcode scanning, Bluetooth receipts on 58 mm and 80 mm paper, restocking and low-stock lists, cash and change, a profit summary, CSV export and encrypted backups.
Automated tests cover the database, the backup file format and the update check. We added crash reporting, and closed a loophole where winding the phone's clock back could stretch a licence.
A release workflow builds a signed Android app and publishes it. The app checks for new versions itself, and shop owners get a plain-English licence handbook.
03 — Try it
This is the clickable prototype, running live on the page. It uses sample products and prices, and it may be a step behind the real app.
04 — Key decisions
In plain English, without the jargon.
Products, stock and sales are saved in a small database on the phone itself. There's no server to pay for or to go down, and the shop's figures never leave the shop.
Instead of storing "12 left", Tylliq records every change: +24 restocked, −1 sold, −2 sold. Current stock is the total. Two phones can sell the same item at once and nothing gets overwritten when they sync.
One phone starts hosting and shows a QR code; the other scans it and they swap changes over the shop's Wi-Fi or a phone hotspot. Shop name, logo and receipt footer travel the same way.
Activation happens online once, with a signed licence the phone can check by itself. After that a till can run up to 7 days offline before it needs to check in again.
Smaller touches came from the same thinking. Every receipt carries a barcode, so staff can scan it later and confirm it's a real sale from this shop. Backups are encrypted files the owner can keep, because a single-phone shop has no other copy if that phone is lost.
05 — Tech stack
Flutter (one codebase for Android and Windows), Provider for state
SQLite on the device through Drift, with event-sourced stock
A small HTTP server on the hosting phone (Shelf), QR pairing
Camera barcode scanning, ESC/POS Bluetooth thermal printers
Ed25519-signed licences issued by our own licensing control centre
Signed builds from a release workflow, in-app updates, Sentry crash reports
06 — What's next
Tylliq is in active development. These are on the roadmap but not built yet:
Running Tylliq already? The licence handbook covers setup, plans and troubleshooting.
Your project
We follow the same steps for every client, and you see a clickable prototype before you pay for the build.