StoreManagement
Overview
One Flutter app that runs the shop's paperwork: what came in today, what's on the shelves, and what the books say about both.
It has three features, each of which used to be its own application:
| Feature | What it does | Routes |
|---|---|---|
| DailyCash | The day's close: sales, expenses, receivables, salaries, advances, commissions. Plus the monthly and per-day reports built on them. | /cash/… |
| StockRoom | Products and their terms, stock received, stock sold, adjustments and physical counts — and the reconciliation between counted stock and recorded sales. | /stock/… |
| BookKeeper | Double-entry proper: a chart of accounts, three journals, a general ledger and trial balance, and the four financial statements. | /books/… |
Where it runs
One codebase, three targets. The tablet is the one that matters — it sits in the shop and is what the day is actually recorded on — but the same build runs on a phone and in a browser.
| Target | How it's used |
|---|---|
| Tablet (iPad / Android) | The primary one. Wide enough for the feature rail, the section list and the page at once. |
| Phone | For checking something away from the counter. Same pages, one column, bottom bar. |
| Web | Deployed to store.mblrc.me. Convenient on a laptop, and the reason the app existed before it was ever installed anywhere. |
The shape of it
There is no backend of my own. The app talks to Postgres through Supabase, and most of the reporting is done by database views rather than by Dart — see Database.
A short history
It started as one app for daily cash. Stock came next, then the books, and each arrived as a separate Flutter application deployed to its own path on one origin — /cash/, /inventory/, /bookkeeping/ — with a small portal at the root to choose between them.
That worked, and it had a cost: signing in four times, four builds to deploy, and a shared package that three applications imported at arm’s length. They were merged into one app in v2.0.0. The Architecture page picks up there.