AI bookkeeping for South African small businesses. Snap a receipt or type a transaction in plain English; it extracts, classifies, and files it for VAT201 and IRP6. Owner-funds protected by a 5-layer enforcement system (rules → LLM → confirmation → server → DB constraints), gated by a 40-test suite.
# BookkeepGenie
AI-first accounting for South African small businesses. Snap a receipt or describe a transaction in plain English; BookkeepGenie extracts it, classifies it, and files it correctly for **VAT201** and **IRP6** — without letting an AI mistake quietly corrupt the books.
---
## Why I built this
Accounting is going AI-first. Tools like Digits, Kick, and Billow are racing toward "self-driving" books — categorise, reconcile, and report with minimal human touch. The vision is clearly right.
The hard part isn't the extraction — modern models read a receipt fine. The hard part is **trust**: an LLM will happily book an owner's capital injection as revenue, overstating profit and triggering VAT that shouldn't exist. In accounting, a confident wrong answer is worse than no answer.
So I built BookkeepGenie to pressure-test the unglamorous half of the AI-first vision — **how do you let a probabilistic model drive the books without ever letting it corrupt them?** The answer here is defense-in-depth: the AI proposes, but deterministic guardrails dispose. A wrong AI guess is structurally prevented from reaching the ledger.
Built to demonstrate:
- Constraining a probabilistic classifier with deterministic guardrails
- Domain-correct SA financial logic (VAT, owner funds, multi-tenancy)
- Vision + language extraction from messy real-world inputs
- Eval- and test-gated delivery
---
## The core idea: 5-layer owner-funds enforcement
The AI classifies each transaction, but **no single layer is trusted to be right.** Five independent layers each guard the books, so failure of any one cannot corrupt them:
1. **Rules-first classifier** — deterministic regex catches the common owner-funds cases (~80% of traffic) at zero API cost.
2. **LLM fallback** — anything unmatched goes to the model with a strict schema and a low-confidence floor.
3. **User confirmation modal** — when owner funds are suspected, the transaction is *not saved* until the user explicitly confirms Cap …