Release

The Warehouse, the Ledger,
and the Engine Room

The last time we wrote about the roadmap, we listed six things and told you honestly which of them were real. This post is the other half of that promise: four things that were not on a public list at all, and are now shipping in every installation.

They are the container lifecycle, the warehouse, the accounting ledger, and planned maintenance. Road freight went live alongside them. None of these were built because they looked good on a feature grid. Each one came from the same place every module here comes from: an operator describing a problem in enough detail that ignoring it stopped being an option.

Containers: the box has a life of its own

A container is not a line on a booking. It arrives empty, gets stuffed, gets loaded, sails, gets discharged, sits in a terminal, leaves on a truck, sits in a customer's yard, gets stripped, and eventually comes back. Most of that happens while nobody is invoicing anything, and most of the money lost on containers is lost in exactly those gaps.

So the module records movements, and works out the box's state from them. It does not ask anybody to set a status. That distinction sounds academic until the first time a gate-out is entered two days late: a status somebody typed is now simply wrong, and stays wrong, whereas a state derived from movements corrects itself the moment the missing movement is added. If the two ever disagree, we treat that as a bug in our software rather than a discrepancy in your yard.

On top of that sit demurrage and detention, which are two different clocks and are routinely treated as one. Demurrage is the box inside the terminal past its free days. Detention is the box outside the terminal past its free days. Different allowances, different rates, frequently different customers at fault. The charge is computed from the movement timestamps, so when a customer disputes it you can show them the dates that produced the number instead of asking them to trust it.

The warehouse, and the one thing a freight WMS must not get wrong

There are many warehouse systems. Very few of them are built for a company whose warehouse is mostly full of other people's cargo.

That is the design constraint that shaped this one. Stock is held either as own stock, which you bought and which is your asset, or in custody, which your customer owns and you are merely storing. Custody stock is received, put away, counted, picked and billed for exactly like anything else, and it never touches your balance sheet. Getting this wrong inflates a freight forwarder's assets by the value of their clients' goods, which is the kind of error an auditor notices immediately and a spreadsheet never will.

The rest is what you would expect, built the way we build things. The building is modelled as zones, aisles, racks, levels and bins with real dimensions and weight limits, drawn in plan and in 3D from the same configuration, so the picture cannot drift out of date separately from the data. On-hand quantity is not a stored number: it is the sum of every movement, cached for speed and rebuildable from scratch. Counting writes an adjustment movement rather than overwriting a figure, so a variance leaves a trace. Labels print from the platform and scan back into it on an ordinary phone, which means the person holding the carton is the person recording the move, rather than somebody copying a list at a desk an hour later.

Accounting: a real ledger, not a reporting layer

Plenty of operations software produces financial reports. Far less of it produces financial records. The difference shows up the first time an auditor asks where a number came from.

What shipped is double-entry: a chart of accounts, journals that must balance to the cent before they post, and a trial balance rebuilt from those journals rather than accumulated alongside them. A posted journal is never edited. It is reversed and replaced, so the history of a correction survives the correction.

The part we care about most is where the entries come from. An invoice posts revenue, tax and a receivable. A receipt clears the receivable and moves cash. A bunkering record posts fuel cost against the voyage that burned it. A maintenance job that consumed spares posts that cost once, from the warehouse, at the moment the parts left the shelf, and not again when somebody in finance remembers it happened. The ledger is a consequence of the operation rather than a second, hand-typed description of it, which is the only way the two stay in agreement over a year.

Fixed assets depreciate on two schedules at once, book and fiscal, because those genuinely differ and running only one means one of your two audiences is getting the wrong number. PPN is calculated on a fraction basis, which is how the regulation is written and where hand-built spreadsheets tend to drift by a rupiah a line. PPh 15 is opt-in: it applies to some domestic shipping operators and not others, and we are not going to assume it applies to you.

Maintenance: calendar, meter, or whichever arrives first

Ask a chief engineer when the ship was last maintained and you will get a look. The question they actually ask is when a specific component was last serviced, so equipment is modelled as a tree: main engine, turbocharger, bearing. Systems contain components, components contain parts.

Intervals are written the way real manuals write them. "Every six months or 1,000 running hours, whichever comes first" is supported as stated, because choosing one half silently would over-service a laid-up vessel and under-service a hard-working one, which are opposite failures with the same cause. Due-ness is computed every time it is asked for, from the job template and the last completion, and never stored as a fact that can quietly go stale.

Meter readings are appended, never overwritten. Current hours is simply the latest reading, so a mistyped figure is corrected by logging the right one, and the wrong entry stays visible with the name of whoever entered it. A field you can edit in place cannot tell you that 41,250 was once entered as 4,125.

Then the part that surprised us: a truck's service interval and a generator's are the same idea measured on a different meter. Kilometres instead of hours. There was no honest reason to build a second maintenance system for the road fleet, so we did not. The same engine runs vessels, trucks and containers. Maintenance appears inside each asset's own record, where the person responsible for that asset already works, and there is one platform-wide list you can filter by asset type when you want to see everything falling due at once.

Critical jobs cannot simply have their dates edited. They move through a deferral: a written reason, a proposed new date, and approval from somebody other than the person asking. A waiver nobody signed is just a delay with better presentation, and the difference matters when an inspector asks why.

Road freight is live

In June we wrote a post called "Sea Is Done. What About Road and Air?" and said road was next. Road is now in the same installation, on the same shipment record: vehicles with documents and odometers, drivers with licences that expire on a calendar rather than in a drawer, trips that are legs of a shipment rather than separate jobs, and a land network whose lane distances are refined by the trips your drivers actually make — the road equivalent of learning a sea route from real GPS trails. Reefer temperature is logged along the trip, so a claimed cold-chain breach is something you can prove or disprove.

Air is still next. It has not moved.

A small one: Ctrl+K

There is now a command palette. Press Ctrl+K and type what you want, in English or Indonesian. “open vessels” goes there. “create shipment from Perawang to Klang for Borneo Timber”, or “buat pengiriman dari Perawang ke Klang untuk Borneo Timber”, opens a New Shipment form with the ports and the customer already chosen, looked up from the real lists rather than guessed. When “Klang” could mean three ports, it shows you all three. The same sentence can go on, “2x40HC reefer, 25 tons, ETD 20 Sep, goods plywood”, and it works for anything in the menu, from invoices and customers to incidents and budgets.

It reads the sentence by rules, not with AI, and it never saves anything on its own: you look at the form and press Save. It only ever offers screens your role can already open. The single thing it will write directly is a meter reading, and it shows the figure it understood before writing it, because a wrong meter reading is invisible for six months and then expensive.

What is still missing

Three things, named plainly, because a release post that only lists wins is marketing rather than information.

Running hours still have to be entered by a person. Reading them automatically off engine telemetry needs a signal from hardware we do not control, and every vessel's setup differs. Until that is real for a specific fleet, someone logs the number.

Crew competency matching is not built. Certificates and their expiry dates are tracked; automatically checking that the people rostered for a voyage collectively hold the certificates that voyage legally requires is a different and larger problem, and we would rather not half-build it.

Dry-dock capitalisation is manual. Dry-dock planning exists and fixed assets exist; deciding which portion of a dry-dock bill is capital expenditure and which is repair is an accounting judgement, and we are not going to have software make it silently.

Where this stands

Fifty-odd modules, one installation, one database, and no per-module licence to unlock any of them. All four of these went in the same way the B2B order module did two years ago: an operator described how their business actually works, we disagreed with none of it, and the platform grew a piece it did not have. That is still the only roadmap we entirely trust.

Ready?

See it running on your operation.
Not ours.

Tell us about your fleet. We will show you SEALUTION configured for it, live, in a private demo session with the team that built it.

No sales deck, no pressure. Just a real conversation about your real operation.