Sajjad Inventory
A Persian inventory app that runs entirely in the browser — no server, works offline

An inventory app a shop owner can run from a browser, with no server to maintain and no internet needed.
What it is
Someone needed to know what is in the storeroom, what came in, what went out, and what is about to run out. The constraint was that it had to work in a shop: cheap Android phones, patchy internet, and Persian as the first language.
So there is no server. The database is IndexedDB in the browser, a service worker caches the app, and once the page has loaded it works forever offline. A Persian date picker is wired into every date field because Gregorian quarters mean nothing to the person using it.
What it does
- Receiving goods into the storeroom and dispatching them out, with stock tracked through both.
- Every transaction kept, so you can answer “when did this leave and who took it”.
- Low-stock alerts, so you find out before the shelf is empty rather than after a customer is disappointed.
- Inventory charts that follow the light/dark theme instead of staying white in a dark room.
- Excel export, because the person who needs the numbers at month end is in Excel.
- Installs as an app and works offline, with versioned caching so updates do not break an open session.
- Persian throughout — right-to-left layout, Persian digits, the Vazirmatn typeface.
The numbers
| 0 | servers, 0 frameworks |
| 1,650 | lines of JavaScript and CSS |
| Offline | full functionality after first load |
Why it’s worth a look
The decision that shapes everything is putting the database in the browser instead of on a server. It removes an entire class of problem — no deployment, no backups, no hosting, no accounts — and it costs the ability to use the same data on two devices at once. For a single-shop inventory that is the right trade, and recognising the right trade is the actual skill.
The other part is honesty about being Persian-first. A Persian right-to-left app is not a translation job: the layout direction, the date picker, the digits, and the font all have to be chosen deliberately. Most software in Iran is translated into Persian, and it usually shows.
Current state
- The data lives in one browser. Clearing site data deletes the inventory, so exports matter.
- There is no multi-user support and no sync between devices.

