All case studies

Our product · Retail, hospitality & services software

Ten apps, one source of truth.

For years we connected other people’s POS, stock and accounting systems for clients, and spent much of that time reconciling them. EXO NODES is what we built so the work is recorded once — and it is the hardest engineering we have done.

EXO NODES — our own productUAE & GCC
A restaurant owner and a developer talking at the counter after hours
10+
Apps from one codebase: back office, POS (with waiter mode), kitchen, rider, kiosk, websites…
1,500+
API routes in an authorisation manifest checked on every build
0 gaps
Tax document numbers issued sequentially, even offline
2
Languages throughout, right-to-left Arabic included

01

The brief we set ourselves

Restaurants, shops, salons and laundries in the UAE need a till, a kitchen screen, stock, purchasing, accounting, VAT, payroll and reports. Bought separately, those tools disagree with each other, and someone reconciles them by hand every month.

We wanted one platform where every module reads and writes the same data, that many companies can use securely side by side, that works in Arabic and English, and that treats UAE VAT and e-invoicing readiness as part of the core rather than an add-on.

02

What made it hard

A till cannot stop selling when the internet drops, but tax invoice numbers must stay sequential with no gaps — and two tills selling offline at the same time must never issue the same number.

Financial records have to be provable: once an invoice or payment is issued, nobody, including us, should be able to quietly change it. And with many companies on one system, no request may ever see another company’s data.

03

How we approached it

Each till reserves a block of document numbers in advance and sells against it offline; when it reconnects, every queued sale carries a unique key, so a retry can never create a duplicate. Stock, loyalty, time-clock and audit records are append-only journals — the database account the application runs under is not allowed to update or delete them, so the rule holds even if a bug tries.

Regulated events such as invoices, payments and credit notes are written to a hash-chained log that is verified every night. Every route declares who may call it, and a CI check fails the build if an unprotected route appears. AI agents work through the same services as staff, with a person approving their actions and a monthly spending cap that stops at its limit.

04

What is live today

  • POS with waiter mode and kiosk, kitchen display and QR ordering
  • Stock, recipes and purchasing per branch and warehouse
  • Accounting with automatic posting and the UAE VAT return
  • Tax invoices generated in the UAE e-invoicing (PINT AE) format, ready for submission through an accredited provider as UAE e-invoicing goes live
  • Numbered daily close with blind cash counts
  • Rider app, customer app and business websites on the same catalogue
  • AI Accountant drafting bills and invoices, with approval
  • Arabic and English across the apps

What went into it

TypeScript monorepo (pnpm + Turborepo)NestJS APINext.js appsPostgreSQL + PrismaRedis + BullMQ jobspgvectorClaude API with metered usage

What we would tell the next team

  • — Decide the rules that must never break — numbering, audit, tenant isolation — before writing features, and enforce them in the database.
  • — Offline support is a data-model decision, not a networking feature.
  • — Security checks belong in CI. A review catches today’s mistake; a failing build catches next month’s.
Visit exonodes.com

Building something similar?

Tell us what it has to do. We reply within one business day with questions and a way to scope it.