- Data & Research
- AI & Decision Support
“What will life actually cost me?” — a cost-of-living intelligence layer for Zimbabwe.
- Role
- Founder & builder
- Year
- 2025
- Status
- Live
- Links
- zimindex.co.zw

Hover to scroll the page
Price observations
Official ZIMSTAT indicators
Automated data collectors
Tariff points reproduced
01The problem
One US dollar can be 26.65 ZiG officially and 40 in cash on the same day, and ZIMSTAT publishes three inflation rates for the same month. Every tool that collapses that into one column throws away the information a household most needs.
In Zimbabwe the price of bread is a number plus a currency plus a rate basis plus a place plus a date. ZiMINDEX keeps all five, and turns them into a personal picture of a household’s month.
02What I built
- 01A monthly simulator: home, household, shopping and power worked out line by line, in USD or ZiG, at a named rate.
- 02A stepped electricity engine that reproduces the tariff publisher’s own totals at all seven published consumption points, including the 6% rural electrification levy.
- 03Eight scheduled collectors for exchange rates, fuel, tariffs, produce and official statistics — running separately so a slow source never blocks a page.
- 04An assistant grounded in the same functions the interface uses. It answers the core questions on a deterministic engine with zero API keys, and is tested with grounding, refusal and prompt-injection evals.
- 05A community price pipeline that validates, de-duplicates, confidence-scores and moderates contributions — an evidence system rather than a comment box.
- 06Bespoke SVG charts that can show currency-era breaks, uncertainty bands and thin data honestly.
03In the wild
04Decisions that shaped it
Every number carries its provenance
Source, method, observation date, currency, rate basis and confidence travel with every figure, and every figure expands into the steps that produced it.
Show the hole, don’t fill it
Rent is the largest line in most budgets, and property portals disallow crawling it. So rent is not collected, and the interface shows the gap instead of taking data against a publisher’s wishes.
robots.txt is re-read on every run
Not once at build time. A publisher who adds a restriction tomorrow stops being collected tomorrow.
A missing rate fails loudly
No currency conversion happens without naming its basis, and a missing rate never silently falls back to another.
05Stack
- Next.js
- React
- TypeScript
- Tailwind CSS
- SQLite
- Turso
- Drizzle ORM
- D3
- Zod
- LLM integration
- Vitest
- Playwright
- GitHub Actions
- Docker
- Vercel

