The status is a claim
A cell that reads "Milling" is a claim someone typed. Nothing checked whether the item was ever measured, and nothing will notice if it skipped a step.
Multi-tenant production tracking
Trakelix™ follows physical things through the process you draw — your statuses, your locations, your idea of what an item is. A move your process does not allow is refused at the door, and recorded as a refused attempt.
Built for workshops, repair benches, labs and small production floors. Driven by printed QR stickers, a phone in someone's hand, and screens on the wall that nobody has to log into.
One organization's board. Every status, location and field on those cards is something they defined — none of it ships with the product, and the next tenant's board has none of these words on it.
The problem
Most workshops already track work — in a spreadsheet, on a magnetic board, in somebody's head. All three record what people say happened. None of them can say no.
A cell that reads "Milling" is a claim someone typed. Nothing checked whether the item was ever measured, and nothing will notice if it skipped a step.
Where a thing physically sits lives in whoever moved it last. Finding it means asking, and asking costs more than the move did.
Overwrite the cell and the previous value is gone. "How long does Milling actually take?" has no answer, so the estimate stays a guess forever.
Process
Every organization draws its own flow on a canvas — drag the boxes, connect them. It can branch wherever a status has more than one legal next step, rejoin further down, and loop back on itself. It is not a fixed list and not a straight line.
One product, five organizations
Five tenants on the same installation. They share no status, no location and no field, they do not agree on how many steps there are, and none of them were set up by us. Pick one and watch the vocabulary change — the board underneath is the same board.
Two products, two routes: a carbon pair goes straight from Measuring to Milling while a custom pair goes through Design first. Both are legal, so the app hands back both candidates instead of guessing.
An insole job as it opens in the app. Everything under Details is a field this lab defined — none of it ships with the product. The scan, the pressure map and the order are dragged onto the job and stored outside the database, and the preview opens beside the form rather than on top of it, so you read the scan while filling in the fields it belongs to. Meshes render as 3D you can orbit, PDF and Word render inline, and the code carries its own QR label for the tray. Beside it, the screen above the mill: that bench's queue oldest-first, how long each pair has been waiting, and the bench's own sticker on the glass so the next one is scanned in without anybody hunting for the printed label.
Awaiting parts is a status of its own because a job can sit there for a week, and a week that nobody can see is a week the customer chases you about.
Proofed leads back to Artwork as well as forward, because a customer who wants one word changed should not need a new job number.
Review is its own step because a result nobody checked is not a result — and the transition rules mean nothing can reach Reported without passing through it.
This is the one that could not be a list at all: Out leads back to Returned, so the same item goes round the process for years. Statuses in a fixed order have no way to say that.
The diagrams elsewhere on this page happen to be the insole lab — that is one of these five tabs, not the product. Everything else, the stickers, the wall, the reports, works identically for all of them.
The floor
Locations have codes, types, and an optional linked status. Scanning an item into a location records the physical move and advances the status that location represents — because on a floor those are the same event, and asking someone to do it twice means it gets done once.
Item fields
Rather than a fixed set of columns, an admin designs the item's shape. Values live in a
single jsonb column, so adding a field needs no schema change and no
deployment — and an unknown key is rejected rather than silently swallowed.
customer-email, due-date, owner — so
anything that matches on meaning survives somebody renaming the label.
{
"type": "orthotic-insoles",
"size": "EU 37",
"customer_email": "a.morgan@example.invalid",
"order_link": "https://…/orders/8814",
"due_date": "2026-08-24"
}
One jsonb column. The English key is immutable — it is what the CSV
header uses, so an export written last year still opens. These particular keys are
one organization's invention; the next has none of them.
Dashboard
A board — a column per status, cards oldest first, drag one across to move it — and counts: the same figures as tiles, a donut and bars. Neither is a report that has to be run.
Reports
Nothing here is a report you have to run or a warehouse you have to fill. Every create, status change, move, edit, attachment and refused attempt is already one append-only row with who did it — the audit screen just reads them three ways.
The shape of a period: started, completed, the net change between them, the total event count, and how many times somebody tried to skip a step. Then what kind of activity it was, how it fell across the days, and who did the most.
The log itself — when, which item, what happened, who. Filter by event type or by person, search the item code, name or note, and page through it. Double-click a row to open the item it belongs to.
The same events read as durations: how long items actually sit in each status, worked out from the gap between entering it and leaving it. Per status: how many passed through, the median, the average, the longest, and how many are still there.
One item left on a bench over lunch drags an average up on its own, which is why the median is the column set in bold. This is the table that answers "how long does Milling actually take?" — and it answers it from what happened, not from what somebody estimated when the process was drawn.
One honest limit: only movements recorded since history started are counted. An item that was already sitting in a status before then has no entry time, so it is not measured rather than being measured wrongly.
| Status | Passed | Median | Average | Longest | Still there |
|---|---|---|---|---|---|
| Measuring | 42 | 8 m 20 s | 11 m 05 s | 34 m 12 s | 6 |
| Design | 28 | 12 m 40 s | 15 m 30 s | 48 m 05 s | 3 |
| Milling | 39 | 14 m 10 s | 18 m 45 s | 1 h 06 m | 4 |
| Forming | 37 | 7 m 55 s | 9 m 20 s | 26 m 40 s | 2 |
| Finishing | 35 | 10 m 30 s | 13 m 15 s | 41 m 50 s | 5 |
The items list is its own view — server-paged, sorted and filtered, with one search
box across the code, name, description and every custom field. Export is CSV, UTF-8
with a BOM and a sep=, line, so Croatian and Slovenian Excel open it in
columns rather than one.
Displays
A wall display, a station display, or a screen you designed yourself — each running on a credential that belongs to the screen rather than to a person. It never expires, it can only read the board, and it recovers on its own. A display that needs a keyboard to come back is a display nobody trusts.
The wall shows one tile per status, scaled to be read across a room. A station shows what is physically at one bench, with that location's QR sticker on screen so it can be scanned straight off the glass.
Open the app, tap Use this device as a display, and it shows a short code. Approve the code in Setup, choose whether it watches the whole board or one location, and it is a display from then on. Nothing to sign in, nothing to expire.
A screen is rows of blocks — status tiles, a big number, a station's queue, a list, what needs attention. Six units of height to share between rows, four of width within each. It can never scroll and never leave a dead band of wall.
The preview beside the designer is the real display page in an iframe — not a drawing of it. Save the screen and it appears wherever a display is pointed, and every wall already showing it redraws within twenty seconds. Nobody walks over to the television.
A row is four units of width to share between its blocks. That is the whole vocabulary — and it is a budget rather than a ratio on purpose: out of a fixed four, "2" is half the television and needs no explaining.
The coloured tiles the wall board is made of. Choose which statuses appear, and whether each one draws its WIP limit under the count.
One count, as large as the cell allows: everything still open, one status, finished today since local midnight, or what is sitting at one location. Write your own caption or let it write one.
One location's waiting list, as many rows as you ask for or as many as fit. The block a bench actually wants above it.
One location's identity — name, colour, count, and its QR sticker on screen. This is the block somebody scans straight off the glass.
Items across the organization or at one location, longest-waiting first — which is the bottleneck, and the bottleneck is what a wall is for — or most recently moved.
Statuses over their WIP limit, and moves the process refused in the last few hours. It says Nothing to flag when there is nothing: a block that draws nothing when all is well is indistinguishable from a block that has broken.
Android app
For the person actually holding the thing. Set a target status and scan items into it; scan a location and then scan items to move them there; or scan either one just to see what it is. Plus a small dashboard of counts.
Events & rules
Four triggers, three audiences, and a message you write. Deliberately not a rule engine: a condition language would be more powerful and nobody would write one correctly. Every rule here is a sentence you can read back to the person who asked for it.
{code}, {name}, {status},
{location} and {age} — a small fixed set, for the
same reason the triggers are fixed.
When an item has been stuck in Milling for 2 days, tell everyone with access to that status.
Subject {code} is still in {status} after {age}
Body {name} has not moved since it entered
{status}. It is at {location}.
Rules can be written, stored, listed and switched on and off today. The part that watches the clock and actually delivers the message is a separate piece of work and it is not finished. We would rather you read that here than find it out afterwards.
Eight kinds of event, append-only, each carrying the person who caused it. This is the same log the reports read and the same one a rule would watch.
Control
Every rule below is enforced at the API rather than by hiding a button, because a hidden button is a suggestion.
The history is append-only and always carries the person, so a record cannot be quietly corrected after the fact. Reading it is a right you grant separately — see Reports.
Per-user rows applied to the items list, the CSV export and the dashboard alike. A filtered board says that it is filtered rather than looking empty.
Export the list, open Setup, open the audit screen, delete items — each granted separately, and each narrower than the role it used to take. Delete is off by default: it destroys the history and the files, and there is no undo.
Finished work is kept for a set number of days — two years by default — then deleted with its history and files by a daily sweep. Work still moving is never touched however old it is. Setup shows what the next sweep would remove before you save.
OIDC with a branded login page and invite e-mails. Three separate clients: the browser, the API's admin access, and the phone. Nothing shares a secret it does not need.
Attachments go to object storage or disk; only their description is a row. Paths are
built from server-generated ids, downloads are always
attachment; nosniff, so an uploaded page cannot execute on this origin.
EU region, per-organization retention, self-hosted fonts, no third-party analytics. These are engineering decisions we can point at — not a compliance certificate, and we will not pretend otherwise.
One example of many
One tenant, followed the whole way through — because a concrete story is easier to judge than a list of capabilities. Read insole as whatever you make or handle: nothing in the application knows what an insole is, and the same six steps could as easily be a repair, a print job or a lab sample.
Everything below happens in the app today. The one thing it does not do yet is tell anybody about it by itself — see Events & rules.
An order arrives. An item is created at Received with its type, size, customer contact and a link back to the order. The customer's foot scan is dragged onto it as an attachment.
It is carried to the measuring room. Somebody scans the sticker on the bench. The item moves to Studio and its status becomes Measuring in the same action.
The process branches. A carbon insole goes straight to Milling; a custom one goes through Design first. Both routes are legal, so whoever has it in their hands is asked which.
Somebody scans it into Dispatch too early. The move is refused, the message names both statuses, and a red chip appears on the card. The item has not moved.
The wall shows the queue all day. Nobody logged that screen in and nobody will; it is a paired tablet on a shelf.
It ships. Dispatched is an End status, so it leaves the board. Two years later the retention sweep removes it, its history and its files — or never, if you switched that off.
Trakelix™ runs in the browser, on a phone, and on whatever screen you hang on the wall. Nothing to install on the floor beyond a printed sticker.
Contact
Describe the thing that moves through your workshop and the steps it goes through, and we will tell you plainly whether Trakelix™ fits — including when it does not.
Would rather just write? info@trakelix.com