QuestOS
A bilingual, Arabic-first ERP + CRM for MENA SMEs — finance, people, sales and service in one tenant, with a game layer that keeps teams moving.
![questos-cover-dark[1].png](https://cdn.tfmhq.io/projects/questos/questos-cover-dark-1-75f1df83.png)
Small businesses in Saudi Arabia and Egypt run on a patchwork: invoices in one tool, leads in a spreadsheet, HR on paper, and an accountant who reconciles it all at month-end. The products built for them are English-first with Arabic bolted on, so the layout mirrors badly, names truncate on the wrong end, and the numbers arrive in the wrong calendar. Regulation adds a floor nothing can fall through — ZATCA e-invoicing sequences, period locks, VAT returns — and multi-tenancy adds a wall: one tenant must never see another's row, not through a bug, not through a URL. The hardest constraint was human: a system this broad only works if every automated action stays visible, reversible and overridable by the person running the business.
One Next.js codebase, one Postgres, one rule: the database enforces the tenant. Every table carries a tenant id and Postgres Row-Level Security refuses cross-tenant reads before application code runs; 109 automated gates check the codebase on every commit — token bindings, bidi isolation, Arabic coverage, page reachability, role floors. Arabic is the first language, not a translation layer: 7,700 message keys, logical CSS properties throughout, and names that keep their own direction inside a mirrored layout. Finance posts to a real general ledger with period locks, ZATCA-compliant numbering, accounting-style statements and a tenant-visible audit trail that records who, what, when and from where. A recycle bin with 30-day retention makes removal reversible, and asks before cascading. A quest-and-XP layer turns the daily grind — follow up the lead, clear the worklist — into visible progress, without ever deciding on a person's behalf.
Manual friction, automated away.
Each row contrasts the manual bottleneck against the optimized pipeline — the real efficiency gain, not a generic claim.
Reconciled by an accountant from 4 tools
Live cash flow, P&L and balance sheet from one ledger
Nobody could say
Name, time and IP on the record itself
Permanent
30-day recycle bin; restored with its contacts and deals
Mirrored layout breaks names and numbers
Bidi-isolated names, tenant-day dates, one gate per rule
Core capabilities.
The specific features that make the difference — built in, not bolted on.
Arabic-first, truly bilingual
Mirrored layout with names and numbers that keep their own direction.
Database-enforced tenancy
Row-Level Security refuses cross-tenant reads before any code runs.
Real general ledger
Period locks, ZATCA-compliant numbering, accounting-style statements, print.
Tenant audit trail
Who did what, when and from which IP — append-only, visible on every record.
Reversible by design
A recycle bin that asks before cascading and restores groups together.
Quests and XP
Daily work becomes visible progress; the system never decides for a person.
Shown uncropped · click any frame to view it full size
Admin pages, all bilingual
Automated quality gates per commit
Tests in the suite
Message keys, Arabic-first
Tenant isolation