AS
Aziz SaifI ship AI for Gulf SMEs · Dubai, UAE
Proposal · Enterprise Resource Planning

A custom ERP,
built for how you
actually work.

91 screens across 11 modules. One database. Your data, your code, a flat monthly cost that does not grow with your headcount.

Prepared for[ Client name ]
Prepared byAziz Saif
Date2026-08-20
Revision1.0
aziz@azizsaif.com+971 55 649 2370azizsaif.com

Contents

1
Executive summaryWhat you get, what it costs, and why build rather than buy
2
Scope of the systemAll 91 screens at a glance, grouped by module and delivery phase
3
ArchitectureHow the pieces fit together, and the full technology stack
4
The system, screen by screen29 screenshots of the working demo, each with what you are looking at
5
The screen catalogueEvery one of the 91 screens: who uses it, what is on it, and why it matters
6
Data modelThe six tables everything else hangs off, field by field
7
Getting data in and outCSV, Excel and PDF import; CSV, Excel, PDF and JSON export
8
Security & complianceFourteen controls, by priority, plus the UAE data-protection position
9
Hosting & databaseWhy PostgreSQL, and three hosting options compared
10
InvestmentMonthly running cost, build cost, and the comparison against packaged ERP
11
Delivery planSixteen weeks, week by week, with a definition of done for each
12
Assumptions, exclusions & risksWhat is in, what is not, and what could go wrong
13
Next stepsHow we start

A note on the live demo

This proposal is accompanied by a working demonstration, not a slide deck of mock-ups. 43 of the 91 screens described here are clickable today: you can filter a table, open a record, switch between six user roles and watch the permissions change, upload a spreadsheet, and download a PDF. Everything in section 7 of this document can be verified by using it.

1 · Executive summary

You are being asked to choose between renting an ERP for ever and owning one outright. This proposal covers the second option: a system built to your process, on standard technology, that costs the same whether five people use it or fifty.

91Screens specified

Across 11 modules, each with its purpose, data and users documented in section 4.

43In the phase-1 MVP

Weeks 1–8. The smallest system that can run the business end to end.

~$134Monthly infrastructure

At 10–30 users. Flat — the 31st user costs nothing extra.

16Weeks to full delivery

Including migration, a parallel run and a security review.

The commercial argument in one paragraph

Packaged ERP is priced per seat; a system you own is priced per server. At five users, buying Odoo or Zoho is genuinely cheaper and you should do it. At twenty-five users you would pay roughly $9,300 a year to Odoo, $11,100 to Zoho One or $27,300 to SAP Business One — for software you cannot change and do not own. The same twenty-five users on your own system cost about $1,600 a year in infrastructure. The build pays for itself somewhere between year one and year three, and after that the gap compounds.

What you actually get

What we recommend you do not do

Do not build all 91 screens before going live. Phase 1 is deliberately the smallest thing that can run the business: take an order, hold stock, buy more, invoice it, get paid, see the number. Everything else waits until people are using the first version and telling you what is actually missing — which is never quite what the requirements document said.

2 · Scope of the system

91 screens, 11 modules, three delivery phases. This table is the contractual scope; section 4 documents each screen individually.

ModuleScreensPhase 1Phase 2Phase 3What it covers
Core & access8 6 2 0 Sign-in, security challenge, company setup, dashboards, search and notifications
Clients & CRM8 3 4 1 The customer master, contacts, opportunity pipeline, statements and credit control
Sales10 8 2 0 Quotation through order, delivery, tax invoice, credit note, receipt and receivables ageing
Inventory11 6 4 1 Item master, stock by location, the movement ledger, transfers, counts and reorder alerts
Purchasing8 5 3 0 Suppliers, requests, purchase orders, goods receipt, bills, three-way match and payables
Finance10 3 5 2 Chart of accounts, journals, banking, expenses, VAT, and the three statutory statements
People8 0 5 3 Employee records and documents, attendance, leave, payroll, WPS and expiry alerts
Vessels & Jobs11 3 7 1
Data in / out5 4 1 0 The import wizard, field mapping, error queue, export centre and scheduled reports
Admin & security8 4 3 1 Users, the permission matrix, audit trail, approvals, documents, backup and settings
Reporting4 1 1 2 The standing report library, dashboards, a report builder and the alert engine
Total9143 3711 Phase 1 = weeks 1–8 · Phase 2 = weeks 9–16 · Phase 3 = after go-live

Screen count is not the same as effort

Around forty of these are the same screen with different columns — a list, a filter bar, a detail panel, a form. That pattern is built once and the rest are generated from the database schema, which collapses 91 screens into roughly fifteen genuinely distinct pieces of work. The ones that actually consume time are the invoice builder, the goods-receipt posting, the payroll run, the import wizard and the VAT schedule. The estimate in section 9 is built on that basis, not on multiplying 91 by a day rate.

3 · Architecture

Nothing exotic. Every choice below is deliberately boring, widely hired for, and something you can walk away from — which matters more over ten years than any benchmark.

ClientsBrowser on desktop, tablet and phoneWarehouse barcode scannerEmail and WhatsApp out
→
EdgeCloudflare DNSWeb application firewallRate limiting · DDoSTLS 1.3
→
ApplicationNext.js + typed APIPermission middlewareOne shared validation layerWorkers: import · PDF · email · reports
→
DataPostgreSQL — 45 tables, row-level security, audit triggers, point-in-time recoveryRedis — queue and cacheObject storage — documents

The one architectural rule that matters

Validation lives in exactly one place, next to the schema. A value typed into a form, pasted in from Excel or pushed through the API passes through the same rules. The moment there are two definitions of what a valid invoice looks like, the data starts to drift — and every ERP that has gone bad, went bad precisely there.

The full technology stack

LayerChoiceWhy this one
Front endNext.js 15 · React 19 · TypeScriptServer components keep large tables fast; one language front to back; the largest hiring pool of any framework.
UI kitTailwind CSS · shadcn/ui · TanStack TableYou own the component code rather than renting a design system. Handles 50,000-row grids with sorting and filtering.
APItRPC (typed) with a REST surface for integrationsRenaming a field becomes a compile error instead of a runtime failure discovered by a user.
Schema & migrationsPrisma or Drizzle with versioned SQLThe schema is the contract. Migrations are reviewed like code, run in CI, never applied by hand to production.
DatabasePostgreSQL 16Real transactions — mandatory for double entry. Row-level security, JSONB for custom fields, full-text search included.
Cache & queueRedis with BullMQImports, PDF generation, email and scheduled reports run off the request cycle, so a 12,000-row file never times out a browser.
File storageS3-compatible object storageInvoices, receipts and staff documents behind signed URLs that expire in minutes. Never in the database, never public.
AuthenticationManaged auth with TOTP MFA, SSO-readySession handling is never worth building yourself. Google Workspace SSO the day you exceed ten staff.
File parsingPapaParse · SheetJS/ExcelJS · pdf-parseServer-side and streamed, so memory use stays flat regardless of file size.
Document AIClaude API or AWS TextractOnly for scans with no text layer. Returns a confidence score per field; anything below the gate stops for a human.
PDF outputPuppeteer, server-sideAn invoice looks identical whether emailed by a scheduled job or printed from a phone.
Email & messagingResend or SES · WhatsApp Business APIInvoice delivery, statement runs, approval requests and expiry alerts.
ObservabilitySentry · structured logging · uptime checksYou want to hear about a failed goods-receipt posting from an alert, not from your storekeeper three days later.
CI/CDGitHub ActionsTypecheck, lint, tests and a migration dry-run against a copy of production before anything deploys.
TestingVitest (unit) · Playwright (end to end)Accounting logic gets known-answer fixtures. The critical click-paths get browser tests.
Edge & WAFCloudflareDNS, web application firewall, rate limiting and DDoS protection in front of everything.

4 · The system, screen by screen

Captured from the working demonstration, not drawn as mock-ups. Every screen below is clickable today at the demo address on the cover — you can filter these tables, open these records, switch roles and watch the columns change, upload a spreadsheet and download the result.

01

Dashboard

Home
Dashboard screen

Everything the business did yesterday on one screen. The tiles are role-aware: a storekeeper opens on stock levels and pending receipts rather than cash-flow figures they will learn to ignore.

02

Clients

Clients & Sales
Clients screen

The master customer record every other screen points back to — vessel operators, shipyards and offshore contractors, each with credit limit, terms, balance and revenue to date.

03

Sales pipeline

Clients & Sales
Sales pipeline screen

Enquiries from lead to won, weighted by stage. The forecast is calculated from the stage rather than typed in by whoever is most optimistic that week.

04

Quotations

Clients & Sales
Quotations screen

Quotes built from the item master, so the price quoted is the price in the system. A won quote converts into a job and an order without anyone retyping the lines.

05

Invoices

Clients & Sales
Invoices screen

VAT is calculated per line and then summed, which is the order the Federal Tax Authority expects. An issued invoice cannot be edited, only credited, and the number sequence has no gaps.

06

AR ageing

Clients & Sales
AR ageing screen

Who owes you, how much and how late, in the order you should be chasing them.

07

Item master

Inventory
Item master screen

The full catalogue: the TRICON dynamic-positioning line, IMAC machinery alarm systems, propulsion control, LV switchgear and the OEM spares behind them. One SKU, one row.

08

Stock ledger

Inventory
Stock ledger screen

Every movement in and out with a running balance. Stock is an append-only ledger rather than an editable quantity column, so any figure traces back to the document that caused it.

09

Warehouses

Inventory
Warehouses screen

Dubai Maritime City, the JAFZA bonded store, the panel workshop, Mussafah and van stock. Bonded and duty-paid stock are held apart, because customs treats them differently.

10

Reorder alerts

Inventory
Reorder alerts screen

What has fallen below minimum and what is already on order against it. Serialised equipment and consumable spares reorder on different policies.

11

Suppliers

Purchasing
Suppliers screen

OEM principals with their lead times, currencies and terms. Lead time on the supplier record is what makes a reorder suggestion honest rather than a guess.

12

Purchase orders

Purchasing
Purchase orders screen

Raised against a supplier and a vessel job, so committed cost lands on the job when you commit it — not weeks later when the invoice arrives.

13

Goods receipts

Purchasing
Goods receipts screen

The three-way match: what was ordered, what arrived, what you were billed. Anything that disagrees is held rather than posted quietly.

14

Expenses

Finance
Expenses screen

Engineer expenses, travel and offshore allowances coded to a job and a GL account at entry. A costing screen fed by only some of your costs is confidently wrong.

15

Chart of accounts

Finance
Chart of accounts screen

The account structure everything posts into, with branch and job as separate dimensions, so one chart serves every reporting cut you will be asked for.

16

Journal

Finance
Journal screen

Double entry in the open. Every document releases into balanced journal lines and nothing reaches the ledger by another path.

17

VAT return

Finance
VAT return screen

The VAT working box by box, each figure drilling back to the invoices behind it — which is what you need if the return is ever questioned.

18

Profit & loss

Finance
Profit & loss screen

Generated from the ledger rather than assembled in a spreadsheet, comparative against the prior period, every line drilling to source.

19

Employees

People
Employees screen

Staff with trade certifications and document expiry dates. For offshore work this is commercial: an engineer without a current certificate is turned away at the gangway.

20

Payroll run

People
Payroll run screen

Payslips and a WPS-compliant SIF file for the bank, generated from the same records that feed the ledger, so payroll cost and GL never diverge.

21

Vessel jobs

Vessels & Jobs
Vessel jobs screen

Every job against a named hull with its IMO number, hull type and class society. Budget, committed, actual and invoiced, so you can see which work is quietly losing money.

22

Import wizard

Data In & Out
Import wizard screen

One import engine for the whole system. Drop a CSV, Excel file or PDF; it sniffs the delimiter, maps columns and validates every row before anything is written. The commit is all-or-nothing and any batch can be rolled back.

23

Export centre

Data In & Out
Export centre screen

Every screen exports to CSV, Excel, PDF or JSON. Exports respect permissions, not just the screen: a user who cannot see cost gets no cost column in their spreadsheet.

24

Report library

Data In & Out
Report library screen

Saved views with your own columns, filters and totals, which can then be scheduled by email without anyone remembering to run them.

25

Users

Admin & Security
Users screen

Users, roles and default branch. Sign-in through Google Workspace, so disabling one account removes ERP access at the same moment.

26

Roles & permissions

Admin & Security
Roles & permissions screen

Six roles that genuinely change what you can see. Permissions are enforced on the data, so a hidden column is absent from the query rather than merely invisible.

27

Audit trail

Admin & Security
Audit trail screen

Who changed what, when, and the value before. Append-only and not purgeable — the first thing an auditor asks for and the last thing most home-grown systems can produce.

28

Settings

Admin & Security
Settings screen

Company details, tax registration, financial year, branches, numbering formats and document templates. Set once, inherited by every document.

29

The full catalogue

Admin & Security
The full catalogue screen

All 91 screens tagged by build phase, generated from the same catalogue file that drives this document and the demo.

5 · The screen catalogue

Every screen in the system, in build order within its module. For each one: who uses it, what data is on it, what they can do there, and the operational reason it exists. The last line is the one worth reading — it is where the design decisions are, and where a generic ERP would get it wrong.

Phase 1 — weeks 1–8, 43 screens Phase 2 — weeks 9–16, 37 screens Phase 3 — after go-live, 11 screens Clickable in the demo today — 43 screens

Core & access 8 screens

01

Login / SSO

Phase 1 Live in demo
Who uses it
Everyone
On the screen
Email, password, SSO button, tenant selector, language toggle
Actions
Sign in · SSO · reset password
Why it matters
The only screen every employee touches daily. Wire up Google Workspace SSO early: when someone leaves, you disable one account and they lose the ERP too, instead of hoping a leaver checklist gets followed.
02

MFA challenge

Phase 1
Who uses it
Every role with write access
On the screen
Six-digit code, trusted-device option, recovery codes
Actions
Verify · use recovery code · manage devices
Why it matters
Enforce it per role rather than per user. Allow individual exemptions and within a year the exemption list is longer than the enforced list.
03

Forgot / reset password

Phase 1
Who uses it
Everyone
On the screen
Email field, one-time token, new password with breach-list check
Actions
Request link · set new password
Why it matters
Rate-limit this and never reveal whether an address exists. Account enumeration on the reset screen is how most targeted attacks begin.
04

Company setup wizard

Phase 1
Who uses it
Owner, at go-live only
On the screen
Legal name, trade licence, TRN, base currency, financial year start, branches, logo, document number formats
Actions
Complete setup · edit later in Settings
Why it matters
Runs once but writes the settings that are most painful to change afterwards — the financial-year start and the invoice number format above all. Get an accountant to confirm both before you click finish.
05

Role-aware dashboard

Phase 1 Live in demo
Who uses it
Everyone, differently
On the screen
KPI tiles, revenue vs cost chart, overdue chase list, activity feed, alert summary
Actions
Drill into any tile · jump to source record
Why it matters
Each role gets its own tiles. A storekeeper who opens on cash-flow figures learns to ignore the dashboard within a week; give them stock levels and pending receipts and they will actually use it.
06

Global search

Phase 1 Live in demo
Who uses it
Everyone
On the screen
Cross-entity results by code, name or reference, grouped by type
Actions
Search · open record · jump to screen
Why it matters
Results are filtered by permission, so a rep searching a client they do not own finds nothing. Search is the single most common place where home-grown systems leak data they thought was hidden.
07

Notification centre

Phase 2
Who uses it
Everyone
On the screen
Rule-generated alerts grouped by module, read state, snooze
Actions
Open source record · mark read · mute rule
Why it matters
These are saved conditions with a schedule and a recipient, not reports someone has to remember to run. The difference is whether problems find you or you have to go looking.
08

My profile & preferences

Phase 2
Who uses it
Everyone
On the screen
Name, contact, language, date and number format, MFA devices, active sessions
Actions
Update details · enrol MFA · revoke a session
Why it matters
The active-session list lets someone kill a lost phone themselves at 11pm instead of calling you.

Clients & CRM 8 screens

09

Client list

Phase 1 Live in demo
Who uses it
Sales, Finance, Owner
On the screen
Code, name, segment, emirate, payment terms, credit limit, open balance, revenue YTD, status
Actions
Search · filter · sort · export · create · open
Why it matters
The open balance is derived from the ledger, never typed. The moment someone can edit a balance directly, every reconciliation becomes a matter of opinion.
10

Client 360 detail

Phase 1 Live in demo
Who uses it
Sales, Finance, Owner
On the screen
Master record plus invoices, quotations, contacts, activity log, documents, statement
Actions
Edit · raise quote · raise invoice · email statement · export
Why it matters
The screen that stops three people phoning the same customer about three different things on the same morning.
11

Create / edit client

Phase 1 Live in demo
Who uses it
Sales, Finance
On the screen
Validated form: name, TRN, contact, terms, credit limit, owner
Actions
Save · duplicate check · assign owner
Why it matters
Duplicate detection on name and TRN at the point of entry. Two records for one customer silently splits their credit limit and hides your real exposure.
12

Contacts at client

Phase 2
Who uses it
Sales
On the screen
Name, role, email, phone, decision-maker flag, portal access
Actions
Add · edit · set primary · invite to portal
Why it matters
Model people separately from companies. People move between employers; if the contact is a column on the client record, you lose the relationship when they do.
13

Lead & opportunity pipeline

Phase 2 Live in demo
Who uses it
Sales, Owner
On the screen
Kanban by stage, deal value, probability, owner, next action date, age in stage
Actions
Drag between stages · open · convert to quote
Why it matters
Weighted forecast is value multiplied by probability. Without a probability field a pipeline is a wish list, and every forecast built on it is fiction.
14

Activity & follow-up log

Phase 2
Who uses it
Sales
On the screen
Calls, meetings, emails, notes, next action date and owner
Actions
Log activity · set follow-up · complete
Why it matters
The next-action date is the only field that earns its keep. Everything else on this screen is a diary; that one field is a system.
15

Client statement of account

Phase 2
Who uses it
Finance
On the screen
Opening balance, invoices, receipts, credit notes, closing balance, ageing summary
Actions
Generate PDF · email · export
Why it matters
Emailing this automatically on the first of every month collects more cash than any chase call, because it arrives before the customer has decided who to pay.
16

Credit-limit review

Phase 3
Who uses it
Finance, Owner
On the screen
Current limit, live exposure, payment history, average days to pay, suggested limit
Actions
Approve · adjust · place on hold
Why it matters
Set limits from actual payment behaviour, not from how much the customer says they intend to buy.

Sales 10 screens

17

Quotation list

Phase 1 Live in demo
Who uses it
Sales, Owner
On the screen
Quote number, client, scope, stage, value, probability, validity date, owner
Actions
Filter · sort · export · create · open
Why it matters
Track the validity date and expire quotes automatically. Live quotes at last year's prices are a slow leak in your margin.
18

Quotation builder

Phase 1
Who uses it
Sales
On the screen
Client, line items pulled from the item master, quantity, rate, discount, VAT, terms, validity, notes
Actions
Add lines · apply discount · preview PDF · send · convert to order
Why it matters
Build lines from the item master rather than free text. Free-typed lines are how you end up quoting a product you no longer stock at a price you no longer honour.
19

Sales order list

Phase 1
Who uses it
Sales, Warehouse
On the screen
Order number, client, order date, promised date, value, fulfilment status
Actions
Filter · export · open · release to warehouse
Why it matters
The order is the commitment; the invoice is the consequence. Keeping them as separate records is what lets you promise stock without pretending you have billed it.
20

Sales order detail

Phase 1
Who uses it
Sales, Warehouse
On the screen
Header, lines, quantity ordered vs reserved vs delivered, back-order position
Actions
Reserve stock · part-deliver · amend · cancel
Why it matters
Reserving stock at order confirmation is what stops two salespeople selling the same last unit on the same afternoon.
21

Delivery note / dispatch

Phase 2
Who uses it
Warehouse, Driver
On the screen
Order reference, items, quantities picked, vehicle, driver, customer signature
Actions
Pick · print · capture signature · post
Why it matters
Posting the delivery note is what moves stock out, not the invoice. Tie stock movement to the invoice and your inventory is wrong for every unbilled delivery.
22

Invoice list

Phase 1 Live in demo
Who uses it
Finance, Sales, Owner
On the screen
Invoice number, client, date, due date, net, VAT, gross, amount paid, balance, status
Actions
Filter · sort · export CSV/Excel/PDF · create · open · send
Why it matters
Status is derived from receipts, not chosen from a dropdown. A human-set "Paid" flag and a bank statement will disagree eventually, and the flag always loses.
23

Invoice builder (VAT)

Phase 1
Who uses it
Finance, Sales
On the screen
Client and TRN, line items, quantity, rate, discount, per-line VAT, totals, PO reference, payment terms
Actions
Add lines · calculate VAT · preview · post · email · void
Why it matters
VAT is computed per line and then summed, never applied to the invoice total. The two methods differ by fils on every invoice, and those fils are exactly what a tax audit reconciles.
24

Credit note

Phase 2
Who uses it
Finance
On the screen
Original invoice reference, reason code, lines credited, VAT reversal
Actions
Raise · link to invoice · post · email
Why it matters
The only legitimate way to correct a posted invoice. If your system lets anyone edit a posted invoice instead, you do not have an audit trail, you have a rumour.
25

Receipts & payment collection

Phase 1
Who uses it
Finance
On the screen
Client, amount, date, method, bank reference, invoices allocated against
Actions
Record receipt · allocate across invoices · part-allocate · export
Why it matters
One receipt frequently settles several invoices, and one invoice is often settled by several receipts. Model that as an allocation table on day one; retrofitting it later is a migration nobody enjoys.
26

AR ageing

Phase 1 Live in demo
Who uses it
Finance, Owner
On the screen
Client, balance bucketed current / 1–30 / 31–60 / 61–90 / 90+, total due
Actions
Filter · drill to invoice · export PDF · email chase list
Why it matters
Anything sitting in the 90+ column is, statistically, a write-off waiting to be admitted. Read this weekly and you find out months earlier than your bank does.

Inventory 11 screens

27

Item master list

Phase 1 Live in demo
Who uses it
Warehouse, Purchasing, Sales, Finance
On the screen
SKU, description, category, unit of measure, cost, retail price, quantity on hand, reorder level, status
Actions
Search · filter · sort · export · create · open
Why it matters
One SKU, one row, one truth. Cost price is hidden from Sales and retail price from the warehouse — enforced in the query, so the masking survives an export.
28

Item detail — stock by location

Phase 1 Live in demo
Who uses it
Warehouse, Purchasing
On the screen
Full item record, quantity per warehouse and bin, reserved quantity, recent movements, default supplier, batch and expiry
Actions
Edit · transfer · adjust · view ledger
Why it matters
Quantity belongs to a location, never to the item. The item's "on hand" figure is a sum of its locations, which is why a transfer can never accidentally create or destroy stock.
29

Create / edit item

Phase 1 Live in demo
Who uses it
Purchasing, Warehouse
On the screen
Description, barcode, category, unit of measure, cost, price, reorder level, supplier, tracking options
Actions
Save · duplicate · deactivate
Why it matters
Changing the unit of measure on an item that already has movements is forbidden; you clone the item instead. Allowing it silently rewrites the history of every past transaction.
30

Categories, UoM & attributes

Phase 2
Who uses it
Purchasing, Admin
On the screen
Category tree, units of measure and conversions, custom attributes such as size, colour, season
Actions
Add · rename · merge · reorder
Why it matters
Lookups rather than free text. Free-typed categories give you "Raw Material", "raw materials" and "RAW MAT" inside a month, and every report built on them is wrong.
31

Warehouses & bins

Phase 1 Live in demo
Who uses it
Warehouse, Owner
On the screen
Location code, name, emirate, SKUs held, total units, value at cost, bin structure
Actions
Add location · define bins · view holdings
Why it matters
Bin-level detail is optional at first but almost impossible to add later, because it requires a full physical count to establish opening positions.
32

Stock ledger

Phase 1 Live in demo
Who uses it
Warehouse, Finance, Auditor
On the screen
Movement reference, date, SKU, movement type, signed quantity, warehouse, source document, user
Actions
Filter by SKU, type, date or location · export
Why it matters
Append-only: no updates, no deletions. This is the table an auditor reads, and it is the reason a stock count becomes an argument you can win rather than a guess.
33

Stock transfer

Phase 2
Who uses it
Warehouse
On the screen
From location, to location, items, quantities, in-transit status, receiving confirmation
Actions
Raise · dispatch · receive · cancel
Why it matters
Model transfers with an in-transit state. Without one, stock vanishes from the books for however long the van is on the road, and someone will reorder it.
34

Stock adjustment / write-off

Phase 2
Who uses it
Warehouse supervisor, Finance
On the screen
Item, quantity, reason code, value impact, approver
Actions
Raise · approve · post
Why it matters
Every adjustment needs a mandatory reason code and a second approver. Unapproved adjustments are the single easiest way to hide theft in any inventory system.
35

Physical stock count

Phase 2
Who uses it
Warehouse, Auditor
On the screen
Count sheet by bin, system quantity, counted quantity, variance, value of variance
Actions
Freeze · count · recount variances · post adjustment
Why it matters
Freeze movements for the counted locations while counting. Counting a live warehouse produces a variance report that measures nothing but the traffic through the door.
36

Reorder alerts

Phase 1 Live in demo
Who uses it
Purchasing, Owner
On the screen
SKU, on hand, reorder level, suggested quantity, estimated spend, supplier, lead time
Actions
Filter · raise POs in bulk · export
Why it matters
Sort by lead time, not by shortfall. The item that takes 45 days to arrive needs ordering before the one you can collect from Al Quoz this afternoon.
37

Batch / serial & expiry

Phase 3
Who uses it
Warehouse, Quality
On the screen
Batch or serial number, quantity, manufacture and expiry dates, supplier, linked movements
Actions
Assign · trace forward and back · quarantine
Why it matters
Only build this if you genuinely need a recall trace or you handle perishables. It roughly doubles the complexity of every stock screen, so make it a deliberate decision.

Purchasing 8 screens

38

Supplier list

Phase 1 Live in demo
Who uses it
Purchasing, Finance
On the screen
Code, name, category, emirate, payment terms, lead days, open payable, rating, approval status
Actions
Search · filter · export · create · open
Why it matters
Approval status is a control, not a label. A purchase order should be impossible to raise against a supplier who has not been approved.
39

Supplier detail

Phase 1 Live in demo
Who uses it
Purchasing, Finance
On the screen
Master record, bank details, trade licence and documents, purchase history, price history, open POs
Actions
Edit · view POs · view price trend · block
Why it matters
The price-history view is the one that pays for itself, because it shows you the supplier who has raised prices 6% a year while nobody was looking.
40

Purchase request

Phase 2
Who uses it
Any department, Purchasing
On the screen
Requester, department, items, quantity, justification, budget line, approval chain
Actions
Raise · approve · reject · convert to PO
Why it matters
Separating the request from the order is what puts a budget check between "we want it" and "we have committed to buy it".
41

Purchase order

Phase 1 Live in demo
Who uses it
Purchasing
On the screen
PO number, supplier, dates, delivery location, lines, quantity, rate, VAT, totals, approval status
Actions
Raise · approve · send to supplier · amend · close
Why it matters
A purchase order is a promise, not a transaction. It moves no stock and books no cost — which is exactly why an unapproved PO is harmless and an unapproved GRN is not.
42

Goods receipt note

Phase 1 Live in demo
Who uses it
Warehouse
On the screen
PO reference, supplier, receipt date, location, lines, quantity received vs ordered, condition, receiver
Actions
Receive in full · part-receive · reject lines · post
Why it matters
The moment stock legally becomes yours. Posting writes the stock movement and the accrual in one transaction — both, or neither, never one of the two.
43

Purchase invoice / bill

Phase 1
Who uses it
Finance
On the screen
Supplier, invoice number, date, lines, VAT, total, linked PO and GRN, match status
Actions
Enter or import from PDF · match · approve · post
Why it matters
This is where PDF extraction earns its place: the supplier already sent you the data, just not in a format you can use.
44

Three-way match exceptions

Phase 2
Who uses it
Finance
On the screen
PO price vs GRN quantity vs bill amount, variance value and percentage, tolerance breach reason
Actions
Investigate · accept within tolerance · reject · escalate
Why it matters
This screen is most of your fraud control in one table. A payment that cannot be raised against an unmatched bill closes off the commonest route to paying for goods nobody received.
45

Supplier payments & AP ageing

Phase 2
Who uses it
Finance, Owner
On the screen
Supplier, bills due, ageing buckets, payment run selection, bank account, remittance advice
Actions
Select for payment · approve · generate transfer file · email remittance
Why it matters
AP ageing is the mirror of AR ageing and it tells you the other half of your cash position: what you can safely delay, and what will cost you a supplier if you do.

Finance 10 screens

46

Chart of accounts

Phase 1 Live in demo
Who uses it
Finance, Auditor
On the screen
Account code, name, type, parent, current balance, active flag
Actions
Add · edit · deactivate · export
Why it matters
Have your accountant sign this off before a single transaction is posted. Restructuring a chart of accounts after twelve months of postings is the most expensive avoidable job in the whole project.
47

Journal entries

Phase 2 Live in demo
Who uses it
Finance
On the screen
Voucher number, date, narration, debit and credit lines, amount, supporting document, status
Actions
Raise · post · reverse · export
Why it matters
Posted journals are immutable. Corrections are reversing entries, never edits — that single rule is the difference between a ledger and a spreadsheet.
48

Bank accounts

Phase 2
Who uses it
Finance
On the screen
Account name, bank, IBAN, currency, book balance, statement balance, last reconciled date
Actions
Add · import statement · open reconciliation
Why it matters
Showing book balance and statement balance side by side makes an unreconciled account impossible to ignore.
49

Bank reconciliation

Phase 3
Who uses it
Finance
On the screen
Statement lines, suggested matches, unmatched items both ways, reconciled difference
Actions
Auto-match · match manually · create missing entry · finalise
Why it matters
Automate the matching but never the finalisation. The unmatched items are the point of the exercise; a reconciliation that closes itself tells you nothing.
50

Expenses & petty cash

Phase 1 Live in demo
Who uses it
Everyone claims, Finance approves
On the screen
Date, category, vendor, amount, VAT, receipt image, project, claimant, approval status
Actions
Claim · attach receipt via photo or PDF · approve · reject · reimburse
Why it matters
Photograph the receipt, let the extractor read the amount and VAT, and let a human approve. Nothing posts unapproved, and no claim is accepted without an attachment.
51

VAT return schedule

Phase 2 Live in demo
Who uses it
Finance, Accountant
On the screen
Output tax by rate, input tax, blocked items, adjustments, net payable, FTA box layout
Actions
Generate for period · drill to transactions · export schedule
Why it matters
This produces the schedule your accountant keys into the FTA portal, plus the transaction-level backup behind every box. Direct e-filing needs an accredited integration and belongs in a later phase.
52

Trial balance

Phase 2
Who uses it
Finance, Auditor
On the screen
Every account with debit and credit totals and closing balance, for any cut-off date
Actions
Run for date · drill to account · export
Why it matters
If it does not net to zero, stop everything else. A trial balance that does not balance means a transaction was written outside the double-entry path, and it will never fix itself.
53

Profit & loss

Phase 1 Live in demo
Who uses it
Owner, Finance
On the screen
Revenue, cost of sales, gross profit, payroll, overheads, net profit, each as a percentage of revenue, month by month
Actions
Change period · compare to budget · drill down · export PDF
Why it matters
The percentage-of-revenue column matters more than the absolute figures. Growing revenue with a falling gross margin is the failure mode that looks like success on a bank statement.
54

Balance sheet

Phase 2
Who uses it
Owner, Finance, Auditor
On the screen
Assets, liabilities and equity at any cut-off date, with prior-period comparison
Actions
Run for date · compare periods · export
Why it matters
The screen your bank and your auditor ask for first. Being able to produce it in ten seconds changes the tone of both conversations.
55

Cash flow

Phase 3
Who uses it
Owner, Finance
On the screen
Operating, investing and financing movements; opening and closing cash; forward projection from AR and AP
Actions
Run for period · project forward · export
Why it matters
Profit is an opinion, cash is a fact. The forward projection built from your own AR and AP ageing is worth more than the historical statement above it.

People 8 screens

56

Employee list

Phase 2 Live in demo
Who uses it
HR, Owner, Finance
On the screen
Employee number, name, department, designation, nationality, join date, salary, visa expiry, status
Actions
Search · filter · export · create · open
Why it matters
Salary and bank columns are visible to Owner, Finance and HR only, and are stripped at the query. Everyone else can use this screen without ever seeing pay data.
57

Employee detail & documents

Phase 2 Live in demo
Who uses it
HR, Owner
On the screen
Full record, passport, visa, Emirates ID, labour card, contract, certificates, expiry dates, reporting line
Actions
Edit · upload document · view expiry timeline · end service
Why it matters
Emirates ID, passport and IBAN are encrypted at column level with a key held outside the database, so a stolen backup is useless to whoever takes it.
58

Attendance

Phase 3
Who uses it
HR, Line managers
On the screen
Daily in and out times, hours worked, late marks, absence, source device
Actions
Import from biometric · adjust with reason · approve
Why it matters
Only build this if it feeds payroll. Attendance data that nobody uses is a surveillance system with no business case attached.
59

Leave requests

Phase 3
Who uses it
Everyone requests, HR approves
On the screen
Leave type, dates, days, balance before and after, approver, handover notes
Actions
Request · approve · reject · cancel
Why it matters
Accrued but untaken leave is a real liability on your balance sheet. Tracking it here is what lets Finance put a number on it.
60

Payroll run & payslips

Phase 2 Live in demo
Who uses it
HR, Finance
On the screen
Per employee: basic, allowances, overtime, deductions, gross, net; run totals; payslip PDF
Actions
Build run · review · approve · post to ledger · email payslips
Why it matters
The run posts once to the ledger and locks. A payroll that can be re-run after posting is a payroll that will eventually pay someone twice.
61

WPS SIF export

Phase 2 Live in demo
Who uses it
HR, Finance
On the screen
Employer ID, per-employee person ID, IBAN, fixed and variable pay, days in period, batch totals
Actions
Validate · generate SIF · download for the bank
Why it matters
UAE salaries must go through the Wage Protection System, and the bank rejects the entire batch if one field is malformed. Validate on data entry, not on payday.
62

Document expiry alerts

Phase 2
Who uses it
HR, Owner
On the screen
Employee, document type, expiry date, days remaining, renewal status, owner
Actions
Filter by horizon · mark renewal in progress · export
Why it matters
Alerts at 90, 60, 30 and 0 days. A single missed visa renewal costs more in fines and disruption than a year of running this entire system.
63

Recruitment pipeline

Phase 3
Who uses it
HR, Hiring managers
On the screen
Vacancy, candidates by stage, source, interview notes, offer status
Actions
Add candidate · move stage · record decision · convert to employee
Why it matters
Worth building only once hiring is continuous. Below roughly one hire a month, a shared folder genuinely does the job.

Vessels & Jobs 11 screens

64

Vessel register

Phase 1 Live in demo
Who uses it
Service, Projects, Sales
On the screen
Vessel name, IMO number, hull type, owner/operator, flag, class society, DP class, year built, installed Tritek systems
Actions
Filter · open · add vessel · view job history
Why it matters
The hull is the real customer. One operator may run thirty vessels with different equipment on each, so a fault reported by phone is only answerable if the register tells you what is actually installed on that hull.
65

Installed base per vessel

Phase 1 Live in demo
Who uses it
Service, Engineering
On the screen
Every system fitted to the hull with serial number, firmware revision, commissioning date, warranty expiry and last service date
Actions
Open equipment · log service · check warranty · raise job
Why it matters
This is the single most valuable screen a marine integrator can own. It turns "something is alarming on the bridge" into a serial number, a wiring revision and the right spare on the van before anyone travels.
66

Job list — new-build, retrofit, service

Phase 2 Live in demo
Who uses it
Project managers, Owner
On the screen
Job number, type, vessel, client, manager, start and end dates, budget, spent, invoiced, progress, status
Actions
Filter · export · create · open
Why it matters
Sort by spent-against-budget rather than by value. The biggest job is rarely the one quietly losing you money.
67

Job detail & scope

Phase 2
Who uses it
Project managers
On the screen
Scope items, milestones, assigned engineers, costs booked, purchase orders, invoices raised, drawings and test records
Actions
Add scope · book cost · raise invoice · close job
Why it matters
Every cost must be bookable to a job — equipment, freight, engineer hours and offshore allowances alike. A job-costing screen fed by only some of your costs is worse than none, because it is confidently wrong.
68

Service call / work order

Phase 1 Live in demo
Who uses it
Service coordinator, Engineers
On the screen
Call reference, vessel, reported fault, priority, port or offshore location, engineer assigned, parts issued, hours, sign-off
Actions
Dispatch · issue parts · record findings · capture signature · close
Why it matters
A breakdown call on a vessel sailing in six hours is a different animal from a scheduled retrofit. Give it its own fast screen or your engineers will keep running it through WhatsApp and you will never recover the parts or the hours.
69

Engineer dispatch board

Phase 2
Who uses it
Service coordinator
On the screen
Engineer, certification currency, current location, assigned calls, availability, travel status
Actions
Assign · reschedule · view certifications
Why it matters
Offshore work has a hard gate: an engineer without a current BOSIET or a valid vessel-specific induction cannot board. Showing certification currency on the dispatch board stops you sending someone who will be turned away at the gangway.
70

Commissioning & sea-trial checklist

Phase 2
Who uses it
Commissioning engineers
On the screen
Test points, expected vs measured values, pass/fail, witness (class surveyor / owner rep), signature, punch-list items
Actions
Complete test · flag punch item · export signed record
Why it matters
The commissioning record is what class and the owner accept against, and what you produce when a warranty claim arrives eighteen months later. Capture it in the system, not on a clipboard that is scanned once and lost.
71

Class certification & survey tracker

Phase 2
Who uses it
QHSE, Service, Owner
On the screen
Vessel, class society (BV / DNV / ABS / LR), certificate type, issue and expiry dates, next survey window, status
Actions
Filter by expiry · attach certificate · schedule survey
Why it matters
Certificates expire on a date fixed by class, not by convenience. A tracker that surfaces the 90-day window turns a scramble into a planned job you can quote for.
72

Warranty & service contract register

Phase 2
Who uses it
Service, Finance
On the screen
Vessel, system, contract type (warranty / AMC / on-call), cover start and end, response SLA, visits used vs entitled
Actions
Open contract · log visit · renew · invoice
Why it matters
Warranty work is unpaid and contract work is prepaid, and both look identical on a job sheet. If the system cannot tell them apart, you will bill a client for work you already owed them and lose the account over the invoice, not the fault.
73

Timesheets & offshore allowances

Phase 3
Who uses it
Engineers enter, managers approve
On the screen
Date, job, vessel, hours, offshore/onshore flag, travel time, allowance rate, billable flag, approval status
Actions
Enter · submit · approve · lock period
Why it matters
Engineer time is the largest recoverable cost in this business and the easiest to lose. Offshore day rates and travel time need to be separable, because they bill differently and are the first things a client queries.
74

Job costing — budget vs actual

Phase 2 Live in demo
Who uses it
Owner, Finance, PMs
On the screen
Budget, committed, actual, invoiced, variance and margin per job, with drill-down to source
Actions
Compare · drill to transaction · export
Why it matters
The screen that answers the question every owner actually has: which of this work made money? Committed cost — ordered but not yet received — is the column people forget, and it is the one that turns a healthy job red.

Data in / out 5 screens

75

Import wizard

Phase 1 Live in demo
Who uses it
Finance, Purchasing, HR, Admin
On the screen
Target selection, duplicate-handling rule, drop zone, format guidance
Actions
Upload CSV, Excel or PDF · download a template · run a sample
Why it matters
If your team cannot get their existing spreadsheets in on day one, they keep the spreadsheets — and then you are running two systems instead of one. Adoption is decided on this screen.
76

Field mapping

Phase 1 Live in demo
Who uses it
Whoever is importing
On the screen
Source column, target field, match confidence, sample rows as read
Actions
Auto-map · correct a mapping · ignore a column · save as template
Why it matters
Fuzzy matching resolves "TRN Number", "Tax Reg No" and "VAT NUMBER" to the same field and shows its confidence. You only correct what it got wrong.
77

Validation & error queue

Phase 1 Live in demo
Who uses it
Whoever is importing
On the screen
Rows passed, rows rejected, file line number, plain-English reason per failure
Actions
Review · download error report · fix and re-upload · commit good rows
Why it matters
Errors name the file line and the reason, so the report can be handed straight back to whoever produced the file. Nothing enters the ledger unvalidated.
78

Export centre

Phase 1 Live in demo
Who uses it
Everyone, within their permissions
On the screen
Every dataset with its row and column count, format buttons, scheduled export list
Actions
Export CSV, Excel, PDF or JSON · schedule a recurring export
Why it matters
Masked columns are removed before the file is generated, not hidden afterwards. Verify it by exporting the item list as a Sales user and reading the header row.
79

Scheduled reports

Phase 2
Who uses it
Owner, Finance
On the screen
Report, schedule, format, recipients, last run, next run
Actions
Create schedule · test send · pause · view history
Why it matters
AR ageing every Monday at 07:00, stock valuation on the 1st, VAT schedule each quarter. The reports that get read are the ones that arrive without being asked for.

Admin & security 8 screens

80

Users

Phase 1 Live in demo
Who uses it
Owner, IT admin
On the screen
Name, email, role, MFA status, last sign-in, account status
Actions
Invite · change role · reset MFA · suspend · remove
Why it matters
Review this screen quarterly. Dormant accounts belonging to people who left are the most common way an ex-employee still has your data.
81

Roles & permission matrix

Phase 1 Live in demo
Who uses it
Owner
On the screen
Role by module grid showing full, partial or no access, plus the field-level masking rules
Actions
Adjust · clone a role · preview as role
Why it matters
The preview-as-role function is the only honest way to test permissions. Reading a matrix tells you what you intended; previewing tells you what you built.
82

Audit trail

Phase 1 Live in demo
Who uses it
Owner, Auditor
On the screen
Timestamp, user, role at the time, action, record, source IP, before and after values
Actions
Filter by user, action, record or date · export
Why it matters
Append-only, written by database trigger inside the same transaction as the change, insert-only grant for every application role including the owner's. Doctoring it requires database superuser access, which is a different and much louder kind of event.
83

Approval workflows

Phase 2
Who uses it
Owner, Finance
On the screen
Document type, threshold, approver chain, escalation after N days, delegation during leave
Actions
Define rule · set thresholds · assign approvers · test
Why it matters
Set thresholds by value, and always configure a delegate. An approval chain with no delegation stops the company every time someone takes a holiday.
84

Document vault

Phase 2
Who uses it
Everyone, within permissions
On the screen
Trade licences, contracts, certificates, staff documents, expiry dates, linked record
Actions
Upload · link to a record · set expiry · share by signed link
Why it matters
Files live in object storage behind signed URLs that expire in minutes, never in a public bucket and never in the database.
85

Integrations & API keys

Phase 3
Who uses it
Owner, IT admin
On the screen
Connected services, API keys with scope and last use, webhook endpoints, delivery logs
Actions
Create key · scope it · rotate · revoke · replay a webhook
Why it matters
Scope every key to the minimum it needs and show last-used dates, so keys that nothing depends on can be revoked with confidence.
86

Backup & restore

Phase 2
Who uses it
Owner, IT admin
On the screen
Backup schedule, last successful run, retention, restore points, last restore test result
Actions
Run backup now · restore to a point in time · run a restore test
Why it matters
Surface the last successful restore test on this screen. An untested backup is a rumour, and you find out which it was on the worst possible day.
87

System settings

Phase 1 Live in demo
Who uses it
Owner
On the screen
Company, tax rates and filing period, document numbering, currencies, branches, security policy, retention
Actions
Edit · view change history
Why it matters
Gapless invoice numbering, a correctly printing TRN, seven-year audit retention and a tested restore. Those four settings are the difference between an audit that takes a morning and one that takes a month.

Reporting 4 screens

88

Report library

Phase 1 Live in demo
Who uses it
Everyone, within permissions
On the screen
Standing reports grouped by module with a one-line description of each
Actions
Filter by group · run · schedule · export
Why it matters
Twenty well-chosen standing reports get used. A report builder given to everyone produces two hundred reports, of which four are ever opened.
89

Report builder

Phase 3
Who uses it
Finance, Owner
On the screen
Field picker, filters, grouping, totals, chart type, save and share
Actions
Build · preview · save · share · schedule
Why it matters
A phase-three item on purpose. Build it once you know which reports people keep asking you to write for them — that list is the specification.
90

KPI dashboards

Phase 2
Who uses it
Owner, department heads
On the screen
Configurable tiles and charts per role, target vs actual, trend arrows
Actions
Choose tiles · set targets · share with a role
Why it matters
Set a target on every KPI. A number without a target is trivia; a number against a target is management.
91

Alert & rule engine

Phase 3
Who uses it
Owner, Finance
On the screen
Condition, threshold, schedule, recipients, channel, firing history
Actions
Create rule · test · mute · view history
Why it matters
This is what turns the ERP from something you check into something that tells you. It is also the easiest feature to over-configure into noise, so start with five rules, not fifty.

6 · Data model

Roughly 45 tables in total. These six are the ones everything else hangs off; the rest follow the same shape — an identifier, the business fields, and the four audit columns every row carries.

client The customer master

code / name / trnUnique per company. The TRN prints on every tax invoice — a wrong one costs your customer their input claim.
payment_termsDrives the due date on every invoice automatically, so nobody types one.
credit_limitEnforced at order entry, not discovered at month end. Zero means cash only.
balanceDerived from the ledger, never typed. The moment a balance can be edited, reconciliation becomes an opinion.
statusOn Hold blocks new orders at the API, not with a warning dialog someone can click past.

item · stock_level · stock_move Inventory, held as a ledger

item.skuThe natural key. Imports match on it, which is what makes re-importing the same file safe.
item.costFour decimal places — rounding at two drifts on high-volume, low-value stock. Hidden from Sales.
stock_levelQuantity belongs to a location and bin, never to the item. The item total is a sum.
stock_moveAppend-only, no updates and no deletions. This is the table an auditor reads.
stock_move.qty_deltaSigned. A transfer is two rows netting to zero, written in one transaction.

invoice · invoice_line The tax document

numberGapless, allocated by a database sequence inside the transaction. Cancelled invoices are voided, never reused.
currency / fx_rateThe rate is frozen on the document. Re-deriving it later silently rewrites history.
line.tax_amountVAT computed per line and then summed. Computing on the total gives rounding differences a tax audit will find.
grand_totalStored for speed, with a constraint asserting it still equals the sum of its lines.
statusDerived from receipts. A posted invoice is immutable; corrections are credit notes.

purchase_order → goods_receipt → bill The buying chain

purchase_orderA promise, not a transaction. Moves no stock and books no cost.
goods_receiptThe moment stock becomes yours. Writes the movement and the accrual together, or neither.
billThree-way match — PO price, GRN quantity, bill total. Any variance above tolerance stops for a human.
supplier_paymentCannot be raised against an unmatched bill. That single constraint is most of your fraud control.

employee The table with the sharp edges

emirates_id / passport_noEncrypted at column level with a key held outside the database, so a stolen backup is useless.
ibanEncrypted and masked everywhere except the payroll run itself.
basic_salaryRow-level security — Owner, Finance and HR only. The API never sends it to anyone else.
visa_expiryIndexed and alerted at 90, 60, 30 and 0 days. This one field pays for the system on its own.
person_id / employer_idRequired for WPS. A malformed value rejects the entire salary batch, so it is validated on entry.

audit_log The table nobody can write to

occurred_atDatabase clock, not the browser clock.
actor_user_id / actor_roleThe role in force at the time, not the role the person holds today.
before / afterChanged fields only, as JSON. Enough to reconstruct, small enough to keep for seven years.
grantsInsert-only for every application role including the owner. Altering it needs database superuser access.

The mistake almost everyone makes

Storing quantity-on-hand as an editable column on the item and updating it from five different places. Six months later the number is wrong and nobody can prove when it went wrong. Stock is a ledger: you append movements and derive the balance. It is marginally more work on day one and it saves the whole system on day four hundred.

7 · Getting data in and out

This is the feature that decides whether the system gets adopted or quietly abandoned. If the team cannot get their existing spreadsheets in on day one, they keep the spreadsheets — and then there are two systems.

1
Drop the file

CSV with any delimiter — comma, semicolon, tab or pipe, detected automatically — plus .xlsx, .xls and PDF. Quoted fields, embedded line breaks, Excel's byte-order mark and Arabic text all handled.

2
Map the columns, mostly automatically

"TRN Number", "Tax Reg No" and "VAT NUMBER" resolve to the same field, each with a confidence score. In the demo, a seven-column spreadsheet with headers like PURCHASE_PRICE maps seven out of seven with no help.

3
Validate before anything is written

Required fields, number formats, date parsing, permitted values, duplicates inside the file and duplicates against existing records. Failures go to an error queue naming the file line and the reason, downloadable as a CSV to hand back to whoever produced it.

4
Commit in one transaction

Good rows are written together or not at all. Each row stores a hash of its source line, so re-running the same file is a no-op instead of a duplicate — the commonest way an import destroys an inventory.

PDF is a different path, and it should be

Kind of PDFHow it is readWhat you get
Has a text layer
Exported from any accounting system
Text extracted directly, fields matched by pattern Supplier, document number, date, TRN, currency, VAT and total, plus line items, each with a confidence score. The demo does this in the browser, live.
A scan or a photograph
Someone photographed a paper receipt
Optical character recognition, server-side The same result and the same confidence scores, at roughly one to four US cents per page.

Never auto-post a PDF

Extraction is probabilistic; a ledger is not. Fields above the confidence gate are pre-filled and everything else stops for a human. The record is created as a draft and still has to pass the three-way match against the purchase order and the goods receipt before it can be paid. Skip that gate to save thirty seconds and you will eventually pay a supplier twice.

Getting data out

FormatProduced byUsed for
CSVStreamed, UTF-8 with byte-order markAnything that will be re-imported elsewhere. Opens correctly in Excel, including Arabic.
ExcelServer-side, with real typed cellsHanding a workbook to your accountant where the numbers are numbers, not text.
PDFServer-side renderingInvoices, statements, the ageing report the bank asks for. Identical on every device.
JSONREST endpointFeeding a dashboard, a business-intelligence tool or another system.
ScheduledBackground queue and emailReceivables ageing every Monday at 07:00; stock valuation on the 1st. Nobody has to remember.

Masking happens before the file exists

When a sales user exports the item list, the cost column is not hidden inside the spreadsheet — it was never selected from the database. The same applies to salaries, bank details and identity documents. It can be verified in the demo: switch the role to Sales Executive, open the item master, export the CSV and read the header row.

8 · Security & compliance

Fourteen controls, in the order they should be implemented. The seven marked "day one" are not optional extras — they are cheap to build in at the start and expensive to retrofit once there is live data.

#ControlWhenWhat it means in practice
1Multi-factor authentication on every write role Day oneApp-generated codes. A stolen password alone gets nobody in. Read-only roles may be exempt; anyone who can post a payment may not.
2Role-based access enforced in the database Day oneRow-level security policies. A query for records outside a user's scope returns nothing — there is no endpoint left to forget to protect.
3Field-level masking Day oneCost prices, salaries, bank details and identity documents, removed at the query so the interface, the API and every export agree.
4Immutable audit trail Day oneWritten by database trigger, insert-only grant, seven-year retention. Who, what, when, from where, and the before and after values.
5Encryption in transit and at rest Day oneTLS 1.3 everywhere, AES-256 volume encryption, strict transport security and secure cookies.
6Column encryption for identity data Day oneEmirates ID, passport and IBAN encrypted with a key held in a managed key service outside the database. A leaked backup is then noise.
7Tested backups Day oneDaily snapshot plus point-in-time recovery in a separate region, and an automated monthly restore that raises an alert when it fails. An untested backup is a rumour.
8Maker-checker approvals Week 6Supplier payments, price changes, credit notes, stock write-offs and role changes each need a second person. This is where internal fraud actually happens.
9Session policy Week 4Thirty-minute idle timeout, a visible device list, and forced re-authentication before payment actions.
10Rate limiting and account lockout Week 4Five failed sign-ins locks the account for fifteen minutes and alerts the owner. Per-address limits on the API.
11Signed, expiring document links Week 4A link to a passport scan works for five minutes, for one authenticated user. Object storage is never public.
12Export logging and thresholds Week 8Every export records the user, dataset, row count and columns. Bulk exports above a threshold can require a second approver.
13Dependency and secret scanning Day oneAutomated dependency alerts, secret scanning in the build pipeline, and a vault for credentials. No secrets in the repository, ever.
14Independent penetration test Before go-liveOne external review, typically $3,000–8,000 in the UAE. Cheaper than the first breach by several orders of magnitude.

On UAE data protection

The federal Personal Data Protection Law (Decree-Law 45 of 2021) governs personal data — which in practice means your employees' documents far more than your stock records. There is no blanket data-residency mandate for a private trading company, but regulated sectors such as healthcare and finance, entities in the DIFC or ADGM, and some government contracts carry their own requirements. Where there is doubt, or where public-sector work is expected, hosting in the AWS UAE region or Azure UAE North removes the question entirely.

This is a summary of the general landscape for planning purposes and is not legal advice. Specific obligations should be confirmed with a UAE-qualified lawyer before go-live.

9 · Hosting & database

Why PostgreSQL

OptionVerdictReasoning
PostgreSQLRecommended Real transactions, which become mandatory the moment there is double-entry accounting. Row-level security gives the cleanest permission model available. JSONB absorbs the custom fields every business turns out to need. Full-text search is included. It runs anywhere and every developer knows it.
MySQL / MariaDBWorkable Perfectly capable, but weaker JSON handling and no row-level security, so permissions move back into application code where they are easier to get wrong.
MongoDBWrong tool An ERP is relentlessly relational — an invoice line references an item which references a supplier. Enforcing that by hand in application code is a decade of avoidable bugs.
Airtable / SheetsNot a system of record No transactions, no real permissions, no audit trail, and it degrades badly past a few tens of thousands of rows. Excellent for validating an idea; fatal as the place the numbers live.

Three hosting options

A · Single server

~$25 / month

Application, database, queue and backups on one machine you control completely. Cheapest by a wide margin and genuinely adequate for one company under about twenty users.

Trade-off: you are the system administrator. Patching, monitoring and the restore drill are yours — roughly two hours a month, and a bad night is a long night.

B · Managed platform

~$134 / month · recommended

Database, authentication, storage, row-level security and point-in-time recovery all arrive configured. Effort goes into features rather than infrastructure.

Trade-off: costs more, and you inherit someone else's outage. It is still standard PostgreSQL underneath, so leaving is a database dump, not a rewrite.

C · UAE cloud region

~$640 / month

AWS UAE or Azure UAE North with a multi-availability-zone database. The answer when data residency is contractual or you are selling to government.

Trade-off: four to five times option B, and it needs someone who genuinely knows the platform. Choose it because a contract requires it, not for comfort.

Recommendation

Start on option B. It reaches a working system fastest and every component is standard, so nothing gets stranded. Move to option C the day a customer contract or a regulator asks for UAE residency — that migration is a dump, a restore and a DNS change, roughly a weekend of work. Choose option A only if the monthly cost genuinely matters more than the maintenance burden.

10 · Investment

All figures are US dollars, excluding VAT, and reflect published list prices at the time of writing. Providers change them; treat these as accurate to about fifteen per cent and confirm at the point of purchase.

9.1 · Monthly running cost

Tier A — up to 5 users

Single serverUS$ / month
Virtual server, 4 vCPU / 8 GB — application, database and queue18
Off-site encrypted backup storage4
Object storage, ~100 GB of documents2
Domain, DNS and web application firewall1
Transactional email (free tier)0
Error monitoring and uptime checks (free tiers)0
Total25

Approximately AED 92 per month.

Tier B — 10 to 30 users recommended

Managed platformUS$ / month
Application hosting20
Managed PostgreSQL — 8 GB, 100 GB storage25
Database compute upgrade5
Object storage, ~500 GB8
Managed Redis — queues and cache10
Transactional email, 50,000 messages20
Error monitoring and performance tracing26
Background job platform20
Total134

Approximately AED 492 per month. Optional additions: seven-day point-in-time recovery at $100, and document extraction for scanned PDFs at $30–80 for around 2,000 pages.

Tier C — 50 to 150 users, UAE residency

UAE cloud regionUS$ / month
Application hosting, seats and usage80
Managed PostgreSQL, multi-zone with read replica250
Managed Redis40
Object storage, ~2 TB including egress35
Email, SMS and WhatsApp60
Observability — errors, logs and traces90
Disaster recovery — second region60
Web application firewall and bot management25
Total640

Approximately AED 2350 per month.

9.2 · Against buying a packaged ERP, at 25 users

OptionUS$ / monthUS$ / yearWhat that buys, and what it does not
This system, tier B1341,608 Flat. The twenty-sixth user costs nothing. The code and the data are yours outright.
Odoo Standard7789,330 $31.10 per user in year one, then $38.90 — so year two is $11,670. Mature and very broad; rented indefinitely, and customisation means engaging a partner.
Odoo Custom1,52518,300 $61 per user in year one, then $76.20. Adds the visual customisation studio, multi-company and API access.
Zoho One92511,100 $37 per employee per month on the all-employee plan — note that is every employee, not every user of the system.
SAP Business One2,27527,300 $91 per professional user, plus an implementation that typically runs $20,000–80,000. Genuine enterprise depth, most of which will go unused.
Oracle NetSuite3,47441,690 Around $999 base plus roughly $99 per user, plus a six-figure implementation. The wrong shape at this size.

9.3 · Build investment

Delivery approachPhase 1 (43 screens)ElapsedAssessment
One developer, AI-assisted$10,000–25,0008–12 weeks Roughly 250–450 hours of human time, most of it review, integration and migration rather than typing. This is where the economics work, and it is the approach proposed here.
In-house, AI-assistedSubscription plus your own time10–16 weeks Viable, but someone internal must own the accounting logic and carry the delivery risk.
Offshore development shop$27,000–84,0004–7 months 900–1,400 hours at $30–60. Quality varies enormously and the specification burden falls on you.
Local agency$60,000–150,0005–9 months You are buying accountability and a phone number in the same time zone.

Add to any of the above: an independent penetration test at $3,000–8,000; an accountant to sign off the chart of accounts and VAT treatment at $1,000–3,000; and — the item most often forgotten — migration from the system you run today, for which two to four weeks should be budgeted, followed by a full month of parallel running before anything is switched off.

The commercial argument, in one sentence

Packaged ERP is priced per seat and a system you own is priced per server. At five users, buy the package. At twenty-five you are paying around $9,300 a year to rent software you cannot change. At a hundred users it is $37,000 a year — and by then the build has repaid itself several times over and the asset is on your books.

11 · Delivery plan

Sixteen weeks, in dependency order. Each week has a definition of done that can be demonstrated, not a percentage complete. Phase 1 finishes at week 8 and could go live there if you chose to.

WeekBuildDone means
1Schema, authentication, roles and application shellYou can sign in as three different roles and see three different navigations.
2–3Clients, items and suppliers, plus the import wizardYour real master data is loaded, imported from your existing spreadsheets.
4–5Purchase order → goods receipt → stock ledgerA real shipment is received and the resulting stock figure is correct and provable.
6–7Quotation → invoice → receipt → receivables ageingYou raise a real VAT invoice and record a real payment against it.
8Reports, export centre and the PDF pipelinePhase 1 complete. The business could be run on it from this point.
9Expenses, chart of accounts and journalsEvery module posts to the ledger and the trial balance nets to zero.
10VAT schedule and accountant reviewYour accountant confirms the quarter against their own working papers.
11Employees, payroll and the WPS fileThe bank accepts a test salary file.
12Projects and job costingYou can see which jobs made money and which did not.
13Approvals, audit hardening and a backup drillThe database is restored from a backup and works.
14Independent penetration test and remediationFindings closed and retested.
15Data migration and start of parallel runningBoth systems produce the same closing balances.
16Training and cutoverThe old system goes read-only. It is not deleted — keep it for a year.

The failure mode to plan against

It is never the code — it is week 15. Every ERP project that goes wrong goes wrong at migration: legacy stock quantities do not reconcile, three years of half-finished purchase orders have no clean equivalent, and somebody wants to go live anyway because a date was promised. Run both systems in parallel for a full month, comparing the closing trial balance. If they disagree, do not cut over, whatever the date says.

12 · Assumptions, exclusions & risks

11.1 · Assumptions

11.2 · Excluded from this scope

11.3 · Risks and mitigations

RiskLikelihoodMitigation
Legacy data does not reconcile at migrationHigh The most likely thing to go wrong on this project. Mitigated by a full month of parallel running and a trial-balance comparison as the cutover gate, not a date.
Scope grows during the buildHigh Phase 1 is fixed at 43 named screens listed in section 4. Additions go to phase 2 by default, not into the current sprint.
Accounting logic is wrong in a way nobody noticesMedium Known-answer test fixtures for every posting rule, plus an accountant sign-off gate at week 10 before real transactions accumulate.
Staff resist and keep using spreadsheetsMedium Why the import wizard is a phase-1 item rather than a nice-to-have. If their spreadsheet loads in ninety seconds, the objection disappears.
Key-person dependency on the developerMedium Standard, widely known technology; the repository, documentation and infrastructure accounts are in your name from week one, not handed over at the end.
Provider price rises or an outageLow Every component is portable. The database is standard PostgreSQL, so moving providers is a dump and a restore rather than a rebuild.

13 · Next steps

1
Use the demo

Spend twenty minutes in the live demonstration. Switch roles, filter a table, open a record, upload a spreadsheet, export a PDF. It is the fastest way to decide whether this is the right shape.

2
Mark up section 4

Go through the 91 screens and strike out what you do not need, flag what is missing, and move anything urgent from phase 2 into phase 1. The catalogue is designed to be edited.

3
A two-hour working session

Walk your actual process — how an order really arrives, who really approves what — and reconcile it against the screen list. This session is where most of the value in the specification gets created.

4
Fix phase 1 and start

A confirmed screen list, a start date and access to a sample of your live data. Week 1 delivers a working sign-in with roles.

Prepared byAziz Saif

aziz@azizsaif.com · +971 55 649 2370
azizsaif.com · Dubai, United Arab Emirates

Prepared for[ Client name ]

Revision 1.0 · 2026-08-20
Valid for 30 days from the date above.

Pricing in section 9 reflects third-party list prices published at the time of writing and is indicative rather than a quotation from those providers. The build ranges in section 9.3 are estimates based on the scope defined in section 4; a fixed price can be given once phase 1 is confirmed. Nothing in this document constitutes legal, tax or accounting advice.