D.01
Code before the model
A pattern parser reads the common cases, such as "bread 500" or a currency exchange, in Arabic or Latin digits. Only what it cannot read goes to a model, which keeps free quotas for the hard messages.
Own product · free to use · live on Netlify · source private
A household money companion: log spending in seconds from Telegram or the web, and get one number back, what you can safely spend today.
I kept my family's budget in an Excel sheet for four years, then stopped. Entering a purchase meant opening a laptop and finding the row, and only one person could do it, so the rest of the family never joined in. Mizan's goal is a purchase logged in under five seconds from apps the family already uses, turned into a number everyone trusts.
D.01
A pattern parser reads the common cases, such as "bread 500" or a currency exchange, in Arabic or Latin digits. Only what it cannot read goes to a model, which keeps free quotas for the hard messages.
D.02
A limit, an outage, a timeout or an answer that misses the schema moves the message to the next provider in the chain. A real bug stops instead, keeps the message for review, and tells the sender the fault is ours.
D.03
Amounts are numeric columns, never floats, and every transaction stores its currency, its rate to the base currency and its base amount. Prices move fast, so history keeps the rate that applied when the money was spent.
D.04
The ORM connects with full rights, so database row policies cannot be the guard. Every service checks household membership before it reads or writes.
D.05
The Telegram route checks the secret header in constant time, records each update_id once so a retry is ignored, answers at once and does the work in Next.js after().
D.06
A scheduled workflow takes an encrypted pg_dump every Friday and keeps it for 90 days.