Cafés and restaurants · Saudi Arabia

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.

Open the dashboardWhat is built today

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.

Running

The back office

Menus, inventory, staff and permissions, customers, loyalty and reports. Built, deployed, and usable by an owner today.

In build

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.

Not built

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.

One cappuccino
Net13.91 SAR
VAT (15%)2.09 SAR
Total16.00 SAR
ZATCA Phase 1 QR
Rounding happens once, at order level, and VAT is the remainder — so the parts sum to the total exactly, every time.

What comes next

Not built

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.

In build

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.