01 The problem
Retyping invoices and receipts into accounting software is slow and error-prone, duplicates slip through, and an external accounting office has to do it for many client companies at once, period by period.
02 What it does
- Intake by upload or a dedicated e-mail inbox per company; PDF pages are rendered and queued as background jobs.
- AI extraction of document data with a review step before anything is posted; nothing is exported unchecked.
- Automatic checks: duplicates, amount mismatches, missing fields; documents keep their original currency.
- Export for POHODA with attachments; a variant for an accounting office adds client companies, accounting periods and handover packages (ZIP + XLSX).
03 Architecture
- 01 WebNext.js app for staff, plus an admin console
- 02 APINestJS, Drizzle ORM, JWT, zod; append-only audit log
- 03 JobsBullMQ on Redis, poppler for PDF rendering, e-mail inbox intake
- 04 AIPluggable extraction provider: Claude via OpenRouter in production, local vision model via Ollama as an alternative
- 05 DataPostgreSQL; a separate database per deployment
- 06 OpsThree Docker deployments behind Caddy on two Linux servers
04 Stack
NestJSNext.jsTypeScriptDrizzlePostgreSQLRedisBullMQClaude (OpenRouter)OllamaTurborepo
05 How I worked with AI
AI shows up twice. Agents build the system, guided by a CLAUDE.md brief and an architecture document in each repository. At runtime an LLM extracts document data, but behind an interface: the provider can be switched between a cloud model and a local one, and every extracted document goes through human review and rule-based checks before export.
06 What is verified
- Three production deployments running (checked Oct 2026); used by three companies.
- Actively developed (latest commits Oct 2026); ~50 test files per codebase.
- Extraction runs on Claude via OpenRouter; a local Ollama provider is implemented as an alternative.
07 Honest notes
- The accounting-office variant is a separate codebase; the shared extraction core is still copied rather than a shared package.
- Client names are withheld; screenshots use a fictional company and generated demo invoices.