← THYNKTA
PROJECT

Ullage Bunker

Three sounding dips into net palm kernel tonnage. One screen, offline, on the phone already in your pocket.

PWA · ANDROID + iOS · LIVE
Ullage Bunker22 ft max
CalculatorLogsChartSettings
3-point soundings
6′ 1″
3′ 7″
5′ 9″
Net tonnage
78.49MT
60%
of 129.91 MT
Avg sounding5.14 ft
Ullage depth16.86 ft

THE CALCULATOR SCREEN

The job it replaces

To know how much kernel is in a bunker you dip it — a sounding rod, three points, read off in feet and inches. Then you take the average, subtract it from the bunker depth, and look the answer up on a printed chart that gives tonnage per foot.

Between the readings and the answer sit two chances to get it wrong: the arithmetic, and reading the wrong row off a laminated sheet in the sun.

How it works

You enter the three dips in feet and inches. Everything else follows automatically:

average sounding = (P1 + P2 + P3) ÷ 3
ullage depth = bunker depth − average sounding
tonnage = interpolated between the two nearest chart rows

Values that fall outside the chart are extrapolated from the two nearest rows, and the result is floored at zero — because a negative tonnage is a measurement error, not a reading.

The reference case

Dips of 6′1″, 3′7″ and 5′9″ against a 22 ft bunker give an average sounding of 5.138889 ft and an ullage depth of 16.861111 ft. That sits between the 16 ft row (71.55 MT) and the 17 ft row (79.61 MT), and interpolates to 78.49 MT.

That figure matches the reference spreadsheet exactly, and there is a test in the codebase that fails if it ever stops matching. Porting the calculation was the easy part; proving it still agreed with the sheet the mill already trusted was the point.

Design decisions

One screen, no scrolling

Every tab fits the phone without scrolling. This gets used standing on top of a bunker, one hand on the rail, in daylight you cannot read a screen in. Anything that needs a scroll gets skipped, and a skipped step is a wrong number.

Offline before anything else

Bunkers are not where the signal is. The whole app — chart, logs, calculation — works with no connection at all. Nothing waits on a server to tell you what 16.86 feet is worth.

The chart is editable

Every bunker has its own calibration table, and they are not interchangeable. So the chart is data, not code: you can add rows, correct a figure, and keep a separate table per tank. Hard-coding one mill's numbers would have made it useless to the next one.

It keeps a log

Each calculation can be saved with a shift and a note, then searched or exported to CSV. The calculator answers today's question; the log answers the one that comes a month later about what the bunker held on the 14th.

Details
PLATFORM iOS · Android OFFLINE Full INSTALL Home screen STACK PWA ORIGIN Ported from Android/Compose

Originally written as an Android app in Kotlin and Compose, then rebuilt as a PWA so the same thing runs on iPhone without a second codebase or an app store listing.

Contact

Want this for your bunkers, with your calibration tables? akmalka97@gmail.com