Point of sale for cafés and restaurants in Saudi Arabia.
Dots is two halves of one product: a back office the owner opens in the morning, and a tablet till the staff work on all day. The back office runs today. The till is still being built — and until it exists, Dots rings up nothing.
The dashboard lives at app.dotspos.com. There is no signup on this page yet.
Where Dots is today
Stated plainly, because a product page that overstates is worth less than no page at all.
The back office
Menus, inventory, staff and permissions, customers, loyalty and reports. Built, deployed, and usable by an owner today.
The QR ordering menu
A guest scans the code on their table and orders from a menu rendered on the server. Designed and specified; being built now.
The tablet till
The surface a cashier actually sells on. It does not exist yet — so no café is trading on Dots, no stock is depleted, and no loyalty stamp is awarded.
What the back office does today
Every card below is a screen that exists, in Arabic and English, scoped per branch.
Menu
Menus, categories, items and modifier groups. Availability and price can be overridden per branch, so one branch charges differently without a second menu.
Inventory and recipes
Ingredients, stock levels and low-stock warnings. Recipes with a computed cost, supplier purchases, and transfers between branches.
Staff and permissions
Staff, roles, and the branches each of them can see. Till PINs are stored hashed, never as readable text.
Customers and loyalty
Customer records, loyalty stamp schemes, coupons and reviews — the back-office half of features whose other half lives in the till.
Reports
Sales, product mix and inventory, filtered by branch and date range, and exportable as CSV.
ZATCA Phase 1
The Base64 TLV QR and the SHA-256 invoice hash chain, implemented and covered by tests. They are built to run on the device, offline, at the moment of sale — which waits on the till, like everything that needs a sale to exist.
One caveat worth stating: these screens record and read their data, but the till does not feed them yet. Stock does not drop when something sells, and no stamp is awarded, because no sale is rung.
The parts you only notice when they are wrong
Decisions taken once, in the database, rather than re-argued screen by screen.
Money that reconciles
Every amount is an integer number of halalas. VAT is carved out of the inclusive price and derived as the remainder, so net plus VAT equals the total by construction — never three halalas short of itself.
Sales that cannot be rewritten
A completed order is append-only, enforced in Postgres rather than in application code. A correction is a new reversing record — which is what an audit and ZATCA both require.
One merchant cannot read another
Tenant isolation lives in Postgres row-level security, never in the frontend. A suite of cross-tenant attack queries is written against it and run directly on the database.
Arabic and English as data
Translations are rows, not columns. A third language is an insert, not a schema migration, and writing direction is a property of the locale rather than a check for Arabic.
What comes next
The tablet till
Counter service and table service on one device: ring a flat white in seconds, or hold a tab across a two-hour meal, split the bill, and route each item to its prep station. It is designed to keep selling with the network down and sync when it returns — a design, not yet a shipped fact.
The QR ordering menu
A guest scans the code on their table, browses the menu on their own phone, and orders — dine-in, pickup or delivery — paying at the counter or by card online.
See the dashboard for yourself
The back office is live at app.dotspos.com. Dots is early, and this page says exactly how early.