Inventory Desktop Application
Inventory management software for a workstation rather than a browser tab: data lives on the machine, entry is keyboard-first, and the app keeps working when the network does not.
Product Context
context.mdDesktop software for tracking inventory: items, quantities, movements and reporting, in a dense interface built for repeated data entry.
Small operations where one or two people manage stock on a shared machine and cannot depend on a stable internet connection.
Web inventory tools fail exactly when stock work happens — during a count, in a stockroom, offline. Local-first storage removes that failure mode.
The Challenge
04 constraints- 01Local-first without data lossThe single source of truth is a file on someone's machine. Schema changes, interrupted writes and backups all have to be handled without a server to fall back on.
- 02Dense data entry that still feels fastLong tables and multi-field forms in a renderer process degrade quickly if every keystroke re-renders the grid.
- 03One set of validation rulesRules enforced only in the UI drift from the database. Enforced only in the database, they surface as unhelpful errors after the fact.
- 04Shipping an installable buildPackaging, native module rebuilds and first-run migrations are part of the product, not an afterthought.
My Role
Sole engineer.
From the data schema to the packaged installer, including the parts that are usually someone else's job.
Prisma schema, relations and migration strategy for a database that ships with the app.
Table virtualisation, form architecture and keyboard-first interaction across the app.
Designed the typed IPC surface between renderer and main with context isolation on.
Build configuration, packaging and a first-run flow that migrates or seeds the database.
Architecture
05 layersTechnical Decisions
04 recordsEach decision below records what it cost as well as what it bought.
Forms & Validation
Data entry is the product.
Stock work is hundreds of small edits a day, so the item form is tuned for the keyboard: tab order that follows the paper flow, inline validation on blur, and errors that name the field rather than the rule.
Local-First Storage
The database is a file on the desk.
SQLite means every read is instant and the app never blocks on a network. Backups are a file copy, and migrations run on launch before the window is shown.
Engineering Quality
08 dimensionsFull keyboard operation, labelled inputs, and error text tied to fields via aria-describedby.
Virtualised tables, memoised rows, and debounced filters so typing never blocks the grid.
Unit tests on validation and data mapping; smoke coverage of the create-and-edit flow.
Write failures surface as recoverable states with the entered data preserved.
Local state by default; shared state only where two panes genuinely read the same record.
A small primitive set — table, field, dialog — composed into every screen.
Layout adapts from a narrow window to a wide monitor without horizontal scrolling.
Domain logic kept out of components; schema-driven types across the process boundary.