Products

Seven products.
One data model.

Four of them are the same APK, and it becomes whoever signs in. One is the office everything reports into. One is the analytics surface your own team drives. And the newest one isn't for your staff at all — it's the app you hand to your customers.

Nothing on this page is an integration between two systems. It is one database, one pricing engine, one promotion engine and one ledger, seen through seven different doors. If you want what sits underneath, the platform tour goes module by module.

The shared day

The spine three of the
field apps run on.

VanSales, PreSales and Merchandiser share one rhythm. Sign in, take the database, work the beat, close the day. Delivery deliberately doesn't — it has its own, and that's product 03.

01

Sign in

The salesman picks a role. That single choice sets the route and everything the app will show for the rest of the day.

02

Take the database

Not a login token — a database. One compressed SQLite file, filtered to this person, lands on the phone. From here on, reads never touch the network.

03

Start Day

Odometer and GPS. Until the day is open, the journey, the customers and the van screens stay locked behind a padlock — not hidden, locked.

04

Work the beat

Today's stores, in order. Check in at the door with GPS, do the job, check out. Skipping a sale asks why, and the answer is a record.

05

Close the trip

Odometer, per-trip figures, one consolidated roll-up. And a preflight that refuses to close while money is still in the air.

The day gate is real Journey, customers, load requests, unload requests and stock audit are locked until the day is open. Tapping one tells you why rather than failing quietly three screens later. Locked, not hidden
Check-out asks questions Leaving a store with no invoice requires a reason. If the Co-pilot can see money being left on the table, it says so before the door closes. Backing out of the screen still checks you out. No silent exits
The day won't close over loose money End of trip blocks on pending unloads, approved-but-uncollected load requests, rows not yet synced, and batches the server queue is still holding. Offline is not "all clear" — the app says reconnect, because it cannot know. Preflight, not a warning
Location is a hard gate Permission and GPS are both required, and they're watched for the whole session. Revoke either mid-day and the app signs out rather than carrying on with a blind trail. Session-long

01 · VanSales

The van is a
warehouse that moves.

Sell from stock on board. The sale is an invoice, minted at the door — which means stock, the ledger, the customer's balance and the day's books all move in the same instant, on a phone that may not have seen a network since breakfast.

  • Seven batches, one transaction — header, lines, discounts, stock, ledger, receivable
  • Promotions resolve on the handset — stacked by exclusion group, clamped so overlaps can't go negative
  • Van stock is the ceiling — he cannot promise what isn't behind him
  • Print is submit — the end-of-day report can't disagree with the server
Who · Van salesman Runs · Android, offline Writes · Invoice
01

Load

Request stock against the route's real demand. Load Coach forecasts what the beat usually buys and flags what's missing before you drive.

02

Sell

At the store: order from van stock, priced and promoted on the device. Quantities are capped by what's actually on board.

03

Settle

Returns against the original invoice or without a reference. Collections allocate across outstanding documents, with the breakup shown.

04

Unload

What's left goes back. The van's count and the warehouse's agree because both replay the same ledger, not because someone typed a number.

One tap, four books An invoice is seven related batches — header, lines, discounts, stock movement, ledger, receivable. They post as one transaction, parents before children. Half a sale is not a state this system has. Atomic · offline
Promotions run on the phone Percent, amount, cashback, buy-X-get-Y, quantity and value slabs, invoice-level deals — evaluated on the device, stacked by exclusion group, clamped so overlaps can't go negative. No round trip
The van can't oversell Order quantities are limited to van stock, so a salesman can't promise what isn't behind him. Stock audit reconciles the physical van against the book whenever you want the argument settled. Capped at reality
Reports before the depot End-of-day reports print from the phone, and printing is submitting — the driver doesn't get to file a version that disagrees with what the server already has. Print = submit

02 · PreSales

Book today.
Deliver tomorrow.

Same beat, same check-in, same close. One deliberate difference: a pre-seller writes an order, never an invoice. No stock moves, no ledger entry, no receivable — those are minted downstream, once the goods actually go out. Nothing is promised twice.

  • Priced like an invoice — the number the customer agrees to is the number that ships
  • No van, no van problems — load, unload and van stock are absent, not greyed out
  • Same Co-pilot — likely order, leave-money and the dying-store warning belong to the salesman, not the van
  • The portal replans — supervisors approve, split and reschedule in bulk
Who · Pre-seller Runs · Android, offline Writes · Sales order
01

Work the beat

The same journey, gates and GPS check-in as VanSales. The store briefing is the same one: what it owes, what it usually buys, what it stopped buying.

02

Book the order

Price and promotion resolve on the device exactly as they would at an invoice — so the number the customer agrees to is the number that ships.

03

Preview and confirm

The order is reviewed on-screen with the customer before it leaves the phone, then queued for approval and fulfilment.

04

Hand off

Approved orders become delivery plans. The invoice is minted when the goods move — by the driver, in product 03.

No van, no van problems A pre-seller has no load requests, no unloads, no van stock and no quantity cap — because there's no van. The screens aren't disabled, they're absent. Absent, not greyed out
Order, not invoice The app will not mint an invoice at order time for this role. That's a switch in the system, not a habit — which is what stops a pre-sold order being billed twice when it's delivered. One financial event
Same intelligence Likely order, leave-money, dying-store warning and the whole store briefing are the salesman's, not the van's. A pre-seller gets all of it, offline, at the door. Co-pilot included
The portal replans Supervisors approve, split and reschedule orders in bulk from the portal — so a rep's morning isn't spent renegotiating what the office already changed. Bulk transitions

03 · Delivery

A different job,
so a different app.

A driver does not work a beat. He takes a plan, dispatches against a van, delivers what's on it and brings back what isn't. So he doesn't get a Start Day, a journey or a customer list — he gets a lifecycle built for the job he actually has.

  • He has to be there — delivery is gated on GPS proximity to the stop
  • Short deliveries need a why — every adjusted line carries a reason from a controlled list
  • The maths matches the office — the invoice recalculates on the handset as lines change
  • Cash lands at the door — collected against the document, offline, on the same device
Who · Driver Runs · Android, offline Writes · Invoice + collection
01

Dispatch

Take the picked plan and move it onto the van. Picking and cancelling stay in the portal, where they belong. From dispatch onward the phone owns it.

02

Deliver

Line by line at the stop: delivered quantity, live invoice maths, and a mandatory reason whenever what arrives is less than what was promised.

03

Collect

Cash taken at the door lands against the document there and then, offline, on the same device that just cut the delivery.

04

Unload

Residuals go back to the warehouse. The day won't end quietly while stock is still unaccounted for on the van.

He has to be there Delivery is gated on GPS proximity to the stop. Too far away and it won't proceed — unless the driver names a reason, which is then a record with his name and his coordinates on it. 100 m · override is logged
Short deliveries need a why Every adjusted line carries a reason from a controlled list. "It was short" stops being a phone call to the office three days later and becomes a field on the document. Reason-coded
The maths matches the office The invoice recalculates on the handset as lines are adjusted, mirroring what the portal would compute. The driver and the accountant are looking at the same number before he drives off. Same engine, both ends
Reject is a first-class outcome A stop that fails completely is recorded as a rejection with a reason, not left as an unexplained gap for someone to reconcile on Friday. Recorded, not missing

04 · Merchandiser

Audit-only,
priced in money.

No order screens at all. A merchandiser looks at the shelf and answers one question: what is this store costing us this week? The scorecard runs on the handset, in currency, and every finding arrives with the order that fixes it.

  • A gap is not a percentage — every finding is weighted by what that SKU actually earns in that store
  • ShelfLens — photograph the shelf; the phone detects, crops, embeds and matches against your own catalogue
  • New product? Upload photos. Never retrain a model — and the first phone to learn it teaches the fleet
  • Nothing to sell with — no invoice, no order, no collection, no van
Who · Merchandiser Runs · Android, on-device AI Writes · Audit + fix-it order
01

Start

GPS, no odometer — there's no van to read. The dashboard opens on compliance, money at risk and what's still unaudited today.

02

Audit

Availability, facings, price, share of shelf, POSM, promo and competitor — captured against the scorecard this store is actually on.

03

Score

Scored on the device, offline, mirroring the server's own computation — with the money at stake, section by section, and the findings ranked by it.

04

Fix

Each finding carries a button. The next visit re-audits it: either the money came back, or it's still open.

A gap is not a percentage Every finding is weighted by what that SKU actually earns in that store. An out-of-stock on a fast line and an identical gap on a dead one are not the same problem, and the app refuses to pretend they are. Ranked by currency
ShelfLens Photograph the shelf; the phone detects, crops, embeds and matches against your own catalogue. Adding a SKU is uploading photos, never a retrain — and the first phone to learn it teaches the fleet. On-device · no cloud call
Nothing to sell with This build has no invoice, no order, no collection and no van. It's the clearest example of the role model doing real work rather than decorating a menu. Audit-only
The deep version Perfect Store, planogram compliance, the Fix-It loop and the vision stack have a page of their own, with the scoring explained and real captures from the app. Merchandising AI →

05 · Customer Portal New

Your shops order
themselves. At 11pm.

Every order your salesman doesn't take is an order somebody phoned in, mis-typed, or never placed. So we gave the shop owner their own web app — on your brand, your catalogue, your prices and your credit rules — and wired it to the same engines the van runs. It doesn't replace the rep. It catches everything he isn't standing there for.

  • The same promotion engine as the van — literally the same code, so online and on the truck can never quote different money
  • It knows when the van is coming — the deadline is computed from the real journey rules, not a guess
  • It knows what's on the truck — availability from the van's actual stock, in the customer's own units
  • Self-registration, then your approval — a shop signs up with a code and an emailed OTP; nobody trades until your team says so
Who · Your customers Runs · Web, any phone Writes · Portal order
01

Sign up

Customer code plus email, a 6-digit OTP, then a password. The account sits in a queue until your back office approves it — self-service registration, not self-service access.

02

Order

Browse, search, scan a barcode, photograph the product, or just talk. Quantities in the units they actually buy in, priced by your engine.

03

Get it assigned

The order lands in your back office, is reviewed and priced if you hold pricing back, then goes onto a real van or pre-sales route for a real day.

04

Track and settle

Watch the van work down the route, take the delivery, download the invoice PDF, check the statement, raise a return with photos.

05a · Ordering without typing

Point the camera.
Or just say it.

A shopkeeper standing at their own shelf shouldn't have to find a product in a list of two thousand. Three ways in, in the order we trust them: scan the barcode, photograph one product, or photograph the whole shelf and let it propose the basket.

  • Barcode is the reliable path — and when a code isn't in your catalogue yet, the portal learns it from the customer who scanned it
  • Photo matching runs on your own catalogue — the same reference images the van's ShelfLens uses, so both identify products identically
  • Voice ordering in English and Arabic — matched against your Arabic product names, never a translation
  • Uncertain? It asks. A confident match acts; a close call between two pack sizes stops and offers both

05b · Autopilot replenishment

The standing order
that writes itself.

Before each delivery day, Autopilot builds the basket from the shop's own buying rhythm — learned per product and per unit from their own invoices. They approve it with one tap, or let it place itself and just watch it arrive.

  • Never a product they've never bought — new lines are a different feature's job
  • Never above their cap — over budget, it trims from the least urgent end; no cap means it proposes rather than places
  • Never twice for one delivery day — guarded by a check and by a unique index, because one of those is a promise and the other is a guarantee
  • Never auto-places into trouble — overdue or short on credit and it proposes instead, and says why

05c · Grow

Your data, turned
around to face them.

You already know what shops like theirs sell. They don't. Grow shows a retailer what similar shops in their own channel stock that they never have, where they're buying less than their peers, and what they've quietly stopped ordering — each one ending in an Add button rather than a chart.

  • No peer is ever named, and nothing shows at all unless at least five other shops are in the comparison
  • Median, not average — one hypermarket in the set would otherwise tell a corner shop it under-buys by 28×
  • Compared in money, never in units — because a "carton" isn't the same thing in two shops' order books
  • Sized to one delivery, not one month — the van comes weekly; a month in one tap is an over-order
It knows when the van is coming The countdown isn't a generic cutoff. It walks the real journey rules — the same ones that decide which route sees this store on which day — and stops at the first visit you can still order onto. If it can't resolve one, it says so rather than inventing a date. One rule, both ends
It knows what's on the truck Availability comes from the van's real stock, converted into the customer's own units. And it stays quiet when it should: a warehouse it hasn't synced looks exactly like an empty one, and a visit more than a day out reloads first — so it never scares a shop off ordering something that will be there. Silent when unsure
Loyalty that buys something Points are shown as what they actually get — "1,200 points buys any one of these" — not as a made-up currency rate. They leave the ledger exactly once, at acceptance, through the same FIFO redemption the van uses. Decline or cancel the order and they come straight back. Points buy goods
Watch the van work the route Live tracking counts stops from the driver's real check-ins, never from the plan, and the ETA is learned from the gaps between today's own completed stops. Until there's enough of the day to learn from, it shows no ETA at all. Measured, not promised
Returns with evidence A shop raises a return against what it was actually delivered — already net of anything returned before — with photos attached per shot. It lands in a back-office queue as a sales return. It is never a claim; claims are between you and your principal, and a customer never sees them. Photo-backed
You decide what they see Ledger, pricing and invoice visibility are per-login and read on every single request — so revoking one in the back office bites immediately, not at their next sign-in. A store set to hide prices still places orders; your team prices them on review. Server-side entitlements
Invoices and statements, self-serve The invoice PDF the customer downloads is rendered by the same service that produced the one the driver handed over — not a lookalike. Ownership is checked before anything renders: another store's invoice simply doesn't exist. Identical documents
Saved orders and one-tap reorder Templates turn "the usual" into a single tap, and every order carries the channel it came from — portal, autopilot, voice — so you can see what the portal is genuinely adding rather than guessing. Attributed by channel

06 · The back office

Where the rules live,
and where the day lands.

The web portal is both halves of the business: the masters and engines that decide how everything behaves, and the place every field document arrives to be approved, priced, picked and paid. It opens on the Command Center — a briefing in plain English, then the store, the salesman and the amount, sorted by money.

  • Command Center — the Leak Ledger and an Action Queue ranked by value. No leaderboards, no coverage percentages
  • Configured, not coded — surveys, promotions, loyalty, targets, claims and approval chains are data you edit, not releases you wait for
  • The whole distribution cycle — purchase orders, GRN with reason-coded shortfalls, returns to principal, claims, warehousing and the stock ledger
  • White-label to the last pixel — recolour the portal and the login your salesmen open, with a live preview and no CSS
Who · Supervisors, admin, finance Runs · Web Owns · Masters + approvals
The Command Center: a daily briefing in plain English, a Money in Play tile, a Leak Ledger showing where value is slipping, and an Action Queue of named actions ranked by money
The real screen, against an anonymised demo dataset — names and figures changed, software not.
Money, not a dashboard The Command Center opens with a sentence — what the fleet can win today and what is bleeding — then names the store, the salesman and the amount. Every row is an action somebody can take before lunch. Ranked by currency
The doctors and coaches Beat Doctor answers "why is there no beat on Thursday?" by running the scheduler's own rules and showing its working. Target Coach asks whether a number is genuine or propped by one lumpy deal. Load Coach asks whether a van load covers what the route actually buys. It shows its working
Imports that never destroy data Every master import upserts and soft-deactivates — it does not delete and reload. References are resolved against the upload set too, so a parent and its child can arrive in the same file. No destructive load
Your brand, not ours Brand colour, surfaces, sidebar, topbar, borders and shadow — every token, with a live preview, saved as named presets. The login screen has its own gallery of layouts, and the same brand reaches the mobile app. Settings screen, not a ticket

07 · Xpress BI & Dashboards

Your analysts stop
queueing behind IT.

"Sales by sub-channel, by brand, versus last quarter" is normally a ticket, a developer and three weeks. Here it's a screen: drag the dimensions, pick the metric, write a formula if you need one, choose from fifteen view types — four of them true 3D — save it, share it, and drop it into a dashboard.

  • Calculated columns — write the formula instead of requesting it. It compiles to safe, parameterised SQL
  • Crosstab, insights, top-N, growth vs prior — built in, not bolted on
  • Dashboards made of your saved reports — one shared filter, cells rendered in parallel and isolated from each other
  • A deterministic query engine. We don't call it "AI powered", because it isn't.
Who · Analysts, management Runs · Web Views · 15 types, 4 in 3D
The Xpress BI report builder: a dimension palette on the left, aggregated values and calculated formulas, a crosstab, and a chart-type picker offering fifteen view types
Four true WebGL 3D charts built from the same reports — a 3D bar of sales versus returns by channel, a 3D surface, a 3D donut and a 3D scatter
The builder, and four of the fifteen views it can produce — a second WebGL engine that loads only when a 3D view is picked.
Self-service, actually Dimensions, measures, filters, calculated columns and sort — all driven from the screen. A new report is a save, not a deployment, which is the whole difference between a BI tool and a reporting backlog. No ticket
Click once, the board reacts Cross-filter any panel and every other panel re-scopes instantly — no reload and no second query. Leaderboards, maps, funnels, waterfalls, treemaps and calendar heatmaps all take part. Cross-filtered
See it on the ground Stores and routes on a real map at their real coordinates, sized and shaded by whatever metric you picked. Click a point and the whole board focuses on it. Geographic
And the reports nobody builds A four-tab executive surface that loads one light call per tab, plus the end-of-day field reports the salesman prints from the handset — where printing is submitting. Executive · EOD

08 · Anything else

If your operation
has a fifth shape.

Seven products cover most distribution businesses. They don't cover all of them, and we'd rather build the eighth than tell you your business is wrong.

The role model is data The menu and the actions at a store are driven by the role, editable from the portal. A new role is configuration first and code only where the job genuinely differs. Configured, then built
Built to the same standard Whatever we add for you gets the same offline-first discipline as the rest: local reads, atomic posts, a ledger that replays, and no shortcut that only survives a demo. No second-class module
Or something else entirely We build bespoke systems beyond field sales — offline platforms, on-device AI, data platforms and enterprise back-office — held to the standard of our own product. Custom software →

Next

Which of these is your Friday?

Tell us how your business actually runs — vans, pre-sellers, drivers, merchandisers, shops that would rather order at midnight, or some arrangement nobody has a name for. We'll show you the product as that person sees it.