GoRepair
An offline React Native app that tracks repairs, resales and parts stock for my retro hardware business, and is honest about when a job has actually made money.
- When
- Ongoing
- Context
- My own repair and resale business
- Stack
- React Native, Expo, JavaScript
- Storage
- AsyncStorage, on device only
The problem
I buy broken retro hardware, fix it and sell it on, and I also repair other people's. Those are not the same business and a spreadsheet treats them as if they were. The money question that actually matters is which of those jobs made a profit, and a single running total cannot answer it.
Three kinds of job
The app models three distinct cases, because the profit calculation is genuinely different for each one.
- My own device. I paid for the unit and the parts, so both are costs against whatever it eventually sells for.
- A customer repair. I never owned the device, so only the parts and the labour count. The unit's value is not mine and must not appear in the maths.
- A resale. Bought to sell on, with or without work in between.
When profit counts
Profit is only recognised once the item is actually sold or handed back to its owner. A finished repair sitting on the shelf is not income, it is stock with hours in it. Getting this wrong is the classic way a small operation convinces itself it is doing better than it is, so the app refuses to count it early.
Parts and reporting
There is stock management for parts, because the thing that stops a repair is almost never the diagnosis, it is discovering the capacitor you needed went into the last job. On top of that sits a dashboard with the reports I care about, so I can see where the money went and which kind of work is worth taking more of.
No server
Everything lives in AsyncStorage on the phone. There is no backend, no account and no sync, which was a deliberate choice for a single-user tool. It works on a workbench with no signal, there is nothing to pay for and nothing to breach, and the entire trust model is the lock screen on my phone. The trade is real and I know what it is, which is that losing the phone loses the data.
What I took from it
- Modelling the domain correctly is the whole product. Three job types with three profit rules is not a feature, it is the reason the numbers mean anything.
- Recognising revenue at the right moment is a data modelling decision before it is an accounting one.
- Building a tool for yourself is the shortest feedback loop there is. You find the design mistakes the same week you make them.