WORK/ 042026ONGOINGONGOING

Kanz — UAE gold, silver, and Zakat tracker

Zero-friction wealth tracking with a built-in Hanafi Zakat engine.

role
Founder, Full Stack & Mobile Engineer
duration
ongoing
team
solo
stack
Flutter · Riverpod · Drift · Hono · Bun · Supabase · Groq OCR
Kanz — the live kanz.ziad.us landing page
the hardest part was the hawl logic. the rest was just wiring.

The problem

Gold and silver trackers exist. Zakat calculators exist. Nobody built the one that does both, knows about the UAE retail gold premium over spot price, and understands that Hanafi zakat care-abouts are different from Shafi’i. So I built it.

The approach

Flutter for iOS + Android with Riverpod 3 for state and Drift for an offline-first SQLite layer. Camera-first asset entry: you photograph a gold-shop receipt, Groq’s Llama 4 Scout reads it (Arabic included), and the asset lands in your portfolio with price, weight, purity, and purchase date. Live retail prices via iGold.ae + Khaleej Times HTML scraping with multi-source consensus — because the spot-price APIs everyone else uses are ~5% off what a Dubai shop will actually pay.

Zakat calculation tracks per-asset hawl (one-year-possession) dates and only mutates them when the asset changes — never on a read. One bug in that logic corrupts a whole portfolio, and one bug did, early on.

The stack

Flutter 3.29+ with Riverpod, Drift, go_router, freezed, fl_chart. Backend is Hono on Bun, deployed to Koyeb’s Frankfurt free tier via GHCR Docker. Auth via BetterAuth with email OTP, Supabase Postgres with RLS. Landing page is a separate Next.js app on Vercel at kanz.ziad.us.

Reflection

This is the most disciplined backend I’ve written. “Don’t mutate on read” sounds trivial until the bug it prevents loses someone a year of compounded hawl. Writing it once, carefully, beat writing it five times fast.