Built around one man’s spreadsheet

StockBook — inventory and landed cost software for UAE importers

His workbook had no stock sheet. So we derived it.

StockBook — Overview
Overview
StockBook — Record a sale
Record a sale
StockBook — Stock trail
Stock trail

What it is

A Dubai coir and horticulture importer ran everything from one Excel file. He tracked sales, credit, cash and import payments — but "how much is left" lived in his head. On-hand is now derived from a movement trail that never stores a number, and landed cost per pack reproduces the figure he already worked out by hand.

The numbers

Imported from his real file
44 invoices · 28 customers
Landed cost per pack
AED 52.02
Errors it found in his ledger
2 real ones
Nightly backup retention
14 days

What is inside

In more detail

Every balance can be replayed

There is no on-hand column to fall out of step with reality. The figure is worked out from the trail of movements each time it is asked for, so a mis-keyed adjustment cannot quietly become the truth — it stays a movement you can see and correct, with the balance following it. Any number on the screen can be explained by the movements that produced it.

How the shared costs of a container get split

A container rarely holds one product, so freight, duty and clearance have to be spread across everything inside it — and the basis you choose changes the answer. Duty and insurance are allocated by value, because that is how they are charged. Freight is allocated by volume, because that is what the shipping line prices. Put one basis across all of it and the per-unit costs come out wrong in both directions at once: overstating some lines, understating others, and averaging out to look about right.

A blank instead of a guess

A margin needs a cost, and until the shipment costs are in, that cost does not exist. The line shows a dash and the reason rather than a placeholder that would read like a real number. It sounds like a small thing. It is the difference between a report you can act on and one where you have to remember which figures were invented.

A restore that cannot half-finish

Taking the backup is the easy half. The hard half is putting it back. A restore here runs as a single transaction: it either completes or leaves the database exactly as it was. A restore that stops partway is worse than no restore at all, because the record of the business is now a mixture of two, and nothing on the screen tells you which rows came from where.

Built with

Next.js 16 Prisma Neon Postgres Tailwind 4 ExcelJS
Open the live demo Talk to us on WhatsApp

It boots in your browser and runs the real logic — no form, no sales call.

Common questions

Is StockBook live, or a demo?

Live. It runs the day-to-day of a coir and horticulture importer in Dubai, and it was stood up on his own workbook rather than on sample data. What you can open from this page is a demo that runs the same rules and the same arithmetic against safe sample data, so nothing you click touches his business.

Can it start from the Excel file we already run the business on?

Yes — that is how this one started. His workbook was loaded in, and the software had to reproduce his own numbers before it replaced anything. Expect the migration to be a decision task more than a data one, though: where the same customer appears under several spellings, someone who knows the business has to pick the real one. We can do the work; we cannot guess.

Does it work out landed cost, or just the supplier invoice?

Landed cost per pack, not the supplier price divided by quantity. Freight, duty, insurance, clearance and the bank charges on the transfer are all carried into the unit cost. Most of them are known days or weeks after the goods arrive, so a clearance invoice entered later corrects the margin on everything that came out of that container — including the part already sold.

Can it message customers on WhatsApp?

Yes. A campaign goes to an audience built from the records already in the system — who bought what, who owes what — rather than a list pasted in from somewhere else. It is the same rule the rest of it follows: if a name or a number is not backed by a record, it does not appear.

Related reading

More of the work

JD Software Solutions — a four-person software studio in the United Arab Emirates. We build the system, hand over the code, and stay on to run it.

All of the work