Skip to content
All projects
In productionAI document processing for accounting · 2026

Účto

Invoices and receipts come in by upload or e-mail, AI extracts the data, people review it, and it goes to accounting software. Used by three companies.

🔒 Private repository

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

  1. 01 WebNext.js app for staff, plus an admin console
  2. 02 APINestJS, Drizzle ORM, JWT, zod; append-only audit log
  3. 03 JobsBullMQ on Redis, poppler for PDF rendering, e-mail inbox intake
  4. 04 AIPluggable extraction provider: Claude via OpenRouter in production, local vision model via Ollama as an alternative
  5. 05 DataPostgreSQL; a separate database per deployment
  6. 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.

08 Screenshots

Document list with review states, filters and extracted amounts (fictional data)
Review screen: the original PDF next to extracted fields, with a detected duplicate
Income and expenses overview for a period
Next projectJ.A.R.V.I.S.