Receipt AI Expense Tracker
Manual expense entry is slow and error-prone when receipts mix Thai and English text, inconsistent layouts, and Buddhist Era dates.
- Project type
- AI engineering
- Core stack
- Next.js 16, React 19, TypeScript
- Delivery
- Demo available
Case Study
The problem, implementation decisions, measured evidence, and next improvements.
Overview
A multimodal receipt-to-expense workflow with safe provider routing, human review, local persistence, and analytics.
Problem
Receipt images contain semi-structured financial data that must be extracted, normalized, reviewed, and stored without exposing provider credentials or silently persisting incorrect AI output.
Solution
Built a local-first Next.js application with a capability-aware AI router, structured Zod validation, Buddhist Era date normalization, editable human review, IndexedDB persistence through Dexie, and client-side spending analytics.
Outcome
The full product flow works without a database or account. AI parsing returns review data only; users explicitly confirm each receipt before it enters the local ledger and dashboard. The public deployment uses deterministic mock AI until server-side provider keys are configured.
What It Proves
Multimodal AI product design, Thai/English normalization, schema enforcement, local-first architecture, Next.js, IndexedDB, and testable provider fallback.
Key Features
- Image-capability filtering prevents receipt images from being sent to text-only providers.
- Zod validation rejects impossible dates, negative totals, and malformed receipt structures.
- Reviewed records stay in the browser through a repository abstraction backed by Dexie.
Architecture
- 01
Receipt upload
- 02
Server-side AI router
- 03
Structured extraction
- 04
Zod normalization
- 05
Human review
- 06
IndexedDB repository
- 07
Analytics dashboard
Tech Stack
- Next.js 16
- React 19
- TypeScript
- Gemini
- Groq
- Cerebras
- Zod
- Dexie
- Recharts
Challenges & Trade-offs
- Buddhist Era dates such as 2568 normalize to Gregorian year 2025.
- AI parsing never saves automatically; persistence requires explicit user confirmation.
- Mock mode preserves the full validation and review path without spending provider quota.
Future Improvements
- Add encrypted export and import for local ledgers.
- Add duplicate receipt detection and batch upload.
- Expose field-level confidence and review history.
Repository README, tests, and public deployment reviewed June 14, 2026.