The audit trail writes itself
Eighty database triggers, so a change that goes around the application is still recorded. Editing the audit is revoked from every account, your administrator’s and ours alike.
An enquiry arrives, is priced from your own contracts, quoted, awarded, executed, documented and invoiced, and none of it is typed into a second system. Built in Arabic and English at the same time, on a database that belongs to you.
Your rates are in spreadsheets, so a quotation takes a day and a half. Your enquiries are in four mailboxes, so nobody owns them and nobody is timed. Customers find their container by ringing someone who has to go and find out. And the margin on a job is a number you reconstruct at month-end instead of one you knew when you quoted.
Each of those is a system-of-record problem. Training does not fix them and a better spreadsheet does not either. They persist because the job lives in an inbox, a folder, a WhatsApp thread and somebody’s memory, and no two of those agree. It costs you the jobs priced too slowly, and the ones priced too cheaply.
Each state hands the next everything it needs, so nothing is retyped differently. Accepting a quotation opens the job with buy and sell rates attached, so margin is a live figure, and a revision supersedes the quotation before it instead of overwriting what the customer accepted.
One queue across every branch, one owner, one response clock.
Priced from your own card where one covers the lane; sent to agents where it does not.
Acceptance converts the quote. Buy, sell and margin lock to the record.
Milestones, customs stage, containers, free-time clocks, exceptions.
Typed, versioned and attached; released to the customer where permitted.
Raised from the job’s own cost ledger, in the right entity, currency and language.
Sea FCL · import: Booking confirmed, Cargo received, Vessel departed, Vessel arrived, Discharged, Customs cleared, Gate out, Delivered, Empty returned
Sea FCL · export: Booking confirmed, Empty container collected, Container stuffed, Gate in, Customs cleared, Loaded, Vessel departed, Vessel arrived, Delivered
Sea LCL · import: Booking confirmed, Cargo received, Vessel departed, Vessel arrived, Discharged, Devanned, Customs cleared, Delivered
Air · import: Booking confirmed, Cargo received, Flight departed, Flight arrived, Customs cleared, Delivered
Air · export: Booking confirmed, Cargo received, Customs cleared, Flight departed, Flight arrived, Delivered
Land · import: Booking confirmed, Loaded, Border crossed, Customs cleared, Delivered
Freight is billed on the greater of weight and volume, converted by a divisor that differs per mode, rounded up to that mode’s increment and floored at its minimum. Using one mode’s arithmetic for another is where a rate stops matching the invoice.
Divisors in cm³/kg
Commercial, operations and finance. The screens are captures of the running build, the same ones you can open yourself in the demo.

Every enquiry, wherever it came from, with an owner and a clock, and a price from your own contracts.

Live shipments ordered by exception, oldest first, because the one nobody has looked at is the one the process missed.

Job costing, invoicing and receivables across entities and currencies, and every document the job issues, versioned.
Everything in this category quotes, books and invoices. These two are what fail between a demo and a Kuwaiti operation: the free-time clock needs a scheduled job rather than a screen to look at, and the dinar needs a product designed around three decimal places.
What this system stores
KWD12.345
All three decimals, from the database to the invoice.
What a system built for dollars stores
KWD12.35–
The third decimal is rounded away.
The demo’s own figures

2,727 interface strings in both languages, kept in sync, with right-to-left in the layout from the start. Most products in this market were built in English with Arabic added later. You can tell within about four seconds, and so can your customer.


One deployment per customer: your own database in your own instance, with no shared table and no customer column. Inside it the database separates branches, so another branch’s shipment comes back not found, because the row is never in the answer.
Eighty database triggers, so a change that goes around the application is still recorded. Editing the audit is revoked from every account, your administrator’s and ours alike.
Records are superseded, closed or deactivated. The permission to delete does not exist on the account the application runs as.
Kuwait, the UAE, Saudi Arabia or the EU, chosen by you and written into the contract.
No colour, logo or company name is written into the product. The operator is a setting, so your customer never sees a supplier badge.
Your administrator grants access to named branches against a ticket reference, and it expires on its own. A banner shows while it is open; one click revokes it.
88 tables, 197 policies and 80 audit triggers, counted against a running PostgreSQL 18.6 rather than estimated from a design document.
The cards are about what we cannot do to your data. This is what your own people cannot do to each other’s work, the half an auditor asks about, transcribed from the file the database is seeded from.
How each of these is implemented, and what is still open, is in the privacy policy and the data-processing addendum. Both are drafts pending review by counsel, and both say where the code and a standard clause disagree.
| Role | Issue an invoice | Credit one | Approve a supplier bill | Split a master cost | Book a job | Close one |
|---|---|---|---|---|---|---|
| Administrator | granted | granted | granted | granted | granted | granted |
| Finance | granted | granted | granted | granted | not granted | not granted |
| Operations Manager | not granted | not granted | not granted | granted | granted | granted |
| Coordinator | not granted | not granted | not granted | not granted | granted | not granted |
| Sales | not granted | not granted | not granted | not granted | not granted | not granted |
| Customs Broker | not granted | not granted | not granted | not granted | not granted | not granted |
| Read Only | not granted | not granted | not granted | not granted | not granted | not granted |
The section that makes the rest believable. Five things are outside the product by decision, and none of them is coming.
How that scope compares with other systems is on the comparison pages.
The demo is the real software on a seeded dataset, open with no sign-up, with three sign-ins so you see what your customer and your agent see as well. Nothing you do in it touches anything.