← All work
NP
Vertical SaaS · UAE · food & retail

NovexPOS

● Live

A multi-tenant SaaS point-of-sale for UAE food and retail businesses: offline-first tills that keep selling when the network drops, a business back office, and a platform operator console.

Category
Vertical SaaS
Market
UAE · food & retail
Surfaces
Android · Web · Operator console · Admin
Status
Live in production

Foreign POS software with a VAT checkbox bolted on.

Most point-of-sale products sold into the UAE were designed for somewhere else. They treat tax as a configuration afterthought, they issue invoice numbers with gaps in them, and they stop taking orders the moment the café's internet wobbles.

NovexPOS was built the other way around: the compliance rules and the offline path are the architecture, not features added later.

Every surface, by us.

POS client
Flutter, shipping to Android as an APK and to the web from the same codebase.
Business admin
Where an owner manages catalogue, staff, pricing and invoice settings.
Operator console
The platform-side admin — tenants, plans, per-plan platform fees, and payment credentials held encrypted in the database rather than in the repository.
API
Laravel 12 on PHP 8.4 with MySQL and Redis, with a committed OpenAPI client so the Flutter side never guesses at a contract.

The invoice number is a compliance artefact.

Retail software is judged on two things nobody demos: whether the numbers add up, and whether it works when the internet does not.

// 01

Gapless, sequential invoice numbers

A number is assigned only when a sale completes — never when a ticket is parked or opened — because UAE tax rules require sequential numbering with no gaps. The format is configurable per business and then locks permanently once the first invoice is issued, enforced server-side rather than by greying out a field.

// 02

Offline-first, with a sync outbox

The till holds its own local database — SQLite natively, a WASM database on the web — and queues writes in an outbox. Losing connectivity stops synchronisation, not trading.

// 03

Tenant isolation is a security property

Every tenant-owned model is business-scoped at the global scope level. Cross-business leakage is treated as a vulnerability rather than a bug, which changes how it is reviewed and how it is tested.

// 04

Money math is the moat, so it is tested

Shift reports, platform fees, refunds and returns carry their own test coverage. Refunds are handled ex-tax so that gross minus discounts minus refunds genuinely equals net — an identity that is easy to state and easy to break.

// 05

Deployment is a gate, not a button

Releases go through CI only, with the full test suite as a blocking gate before an SSH deploy of a timestamped release. Running a command on the server by hand does not ship code, by design.

What it runs on.

Laravel 12 PHP 8.4 MySQL 8 (RDS) Redis Flutter drift Filament Stripe Connect GitHub Actions AWS eu-central-1

We build these for ourselves. We build them for clients too.

Everything on this page was designed, built, deployed and is operated by the same small senior team. If you have a product that needs the same treatment, start with a conversation.