Side product · Household spending app
Masroof
مصروف (“allowance”)
Never overpay twice.
An app my family uses to log what we spend in seconds, and to check, right at the shelf, whether a price is a good deal. It works offline.
Built solo: product, design and engineering.



- To log an item
- <10s
- Arabic and English, full right-to-left
- EN · AR
- Specs written before coding
- 14
- Automated test files
- 46
The journey.
01
Idea
We tracked spending in our heads and on scraps of paper. In the store we only wanted to know one thing: is this a good price?
02
Spec
Wrote a short spec with goals, what I wouldn’t build yet, and one test of success: log a grocery item in under 10 seconds, on a phone, offline.
03
Build
A React app that works offline and syncs later, in Arabic and English, with barcode scanning and spending reports by category, store and prepaid electricity.
04
AI
Take a photo of a receipt or scan an Egyptian e-invoice QR code. Gemini turns it into items matched to our own product list, ready to check.
05
Iterate
Using it every day set the next steps: a good deal / bad deal price check, a better iPhone barcode scanner, and typing the code in when small barcodes won’t scan.
Product decisions.
- Works offline first
- We shop in aisles with bad signal. Entries save on the phone and sync when the connection comes back.
- No budgets or bank sync in the first version
- I left them out on purpose, so daily logging shipped first and stayed fast.
- Past purchases beat the AI’s guess
- If we bought an item before, its category comes from our history, not from the model.
- Real data over AI when we have it
- E-invoice prices come straight from the tax authority. The AI only tidies up item names.
- Compare prices over 6 months
- Prices change. Older data would make the good deal check wrong.
How I think about it.
- Design for the moment it’s used
- A servant at a church door with forty kids arriving can’t type names into a list, so Flock’s QR attendance works offline. Masroof had to log an item in under 10 seconds, in a store with weak signal.
- Decide what not to build
- Masroof’s first version left out budgets, bank sync and receipt photos. AI receipt scanning only came after daily logging worked.
- AI helps, people decide
- Masroof’s receipt scanner fills in items for you to check, and past purchases override the model. At Luciq I added checks and fallbacks for unreliable LLM output.
- Watch real use, then improve
- When iPhone barcode scanning didn’t work well, I swapped the scanner and added typing the code in. At Luciq, we tuned prompts from real customer feedback.
Built with
- React
- TypeScript
- PWA
- IndexedDB
- Node.js
- Express
- MongoDB
- Gemini API
How I build: I write the spec and the plan, AI coding agents write code against them, and nothing ships unless the tests pass.