The laptop list is in a spreadsheet. Software renewals live in someone's calendar. Server maintenance is in a ticketing tool. Finance keeps a depreciation schedule nobody else can read. When a person leaves, three teams ask "what did they have?" — and none of them is sure.
AssetLedger is one operational register for physical equipment and software licences: what it is, who has it, where it lives, what it cost, what it is worth today, what it needs next, and a periodic audit that proves the register matches the building.
The problem we started from
Asset tracking fails in two directions. The register drifts from reality because moves are not recorded; and the register is never trusted because nobody checks it. So the product had to make recording a move as cheap as a click, and make checking as structured as a checklist.
Every hand-over is a row. Every repair is a cost. Every audit is a receipt.
The register
Every asset gets a tag, a category, a model and serial, a status — in stock, assigned, in repair, retired, disposed, lost — a condition, a location, a custodian, and its purchase facts: date, cost, supplier, warranty end, useful life and residual value. From those the register computes book value, total cost of ownership, warranty days left and the number of open jobs. The whole thing exports to CSV with the filters you have applied.
Typed, minimal
A name and a category are enough to register something; everything else can follow.
Searchable
Tag, name, model, serial, custodian — one box. Filter by status, category, location and warranty window.
Honest statuses
Retired, disposed and lost are distinct; lost is only ever set by an audit or a person, never silently.
Custody and moves
Check an asset out to a person and it takes their location; check it back in with the condition it came back in; transfer it between sites. Each move is an assignment row with who, where, when and a note — the full custody history sits on the asset page, so off-boarding is a filter, not an investigation.
Auto tag; the purchase cost opens the cost ledger.
Custodian and location update; history keeps the old ones.
Schedule, start (asset goes in repair), complete with cost and outcome.
Retire, dispose with proceeds, or mark lost — with a reason on the record.
What it needs next
The dashboard's "coming up" list merges three calendars: maintenance jobs due (overdue ones first), warranties ending within 90 days, and software renewals within 60 days. Maintenance is a board — scheduled, in progress, done — and starting a job takes the asset out of service until it is completed or cancelled.
Licences carry seats bought versus seats used, so utilisation and the cost of empty seats are visible per licence and in total. Renewing moves the date forward one period and records the cost; cancelling stops the calendar.
What it is worth
Book value is straight-line depreciation from purchase cost to residual over the useful life — a laptop on a 36-month life is worth half its depreciable value at 18 months, and nothing once disposed. Total cost of ownership is the sum of the cost ledger: purchase, maintenance, accessories, and disposal proceeds as a negative line. The costs page shows spend by month and by kind, filterable by asset, licence and date.
Proving the register
An audit opens for a location and snapshots every asset in service there with its expected location. Someone walks the floor and marks each one found, moved (which updates the register on the spot) or missing. Closing the audit marks anything still missing as lost — with the audit's name as the reason — so the register never quietly pretends.
- Progress is visible on the dashboard while the audit is open.
- Results stay on both the audit and the asset, so a device's audit history is one tab away.
- Reopen a result with one click if you find the thing after all.
How it is built
House stack: a Go backend (standard-library routing, SQLite, no CGO) whose seed builds a ~120-asset estate across eight locations and replays custody, maintenance, renewals and two audits through the real domain code, with tests for the asset lifecycle and depreciation, maintenance, licences, audits, search, export and costs; and a Next.js 16 / React 19 frontend on shadcn/ui and Tailwind v4: register, asset page with tabs for custody / maintenance / costs / audits / activity, licences, a maintenance board, audits, locations, costs and the trail. It signs in through the System32 control plane.
AssetLedger is available now in the System32 catalog. Bring your spreadsheet; we will import it.