AI accounting platform
Case studySoomeo
An accounting platform that transforms uploaded invoices into structured, validated, and actionable financial data.
A walkthrough of the product’s core journey.
Context
Small businesses need invoices, expenses, and bank transactions to become usable accounting data without repetitive manual entry.
Challenge
Coordinate slow and rate-limited OCR and LLM providers without duplicating invoices, quota usage, or downstream accounting effects.
Solution
A progressive document pipeline combining direct S3 uploads, multi-provider OCR, schema-constrained extraction, and deterministic accounting validation.
Contribution
I independently designed, built, and operated the entire Soomeo platform. My ownership covered the product experience, frontend and backend architecture, data model, AI-assisted document processing, accounting rules, cloud infrastructure, deployment, security, and observability. This required balancing delivery speed with maintainability, reliability, and the platform’s ability to evolve.
System design · document ingestion
From upload spikes to trusted accounting data.
The intake queue absorbs upload spikes. Validation stores a clean copy, then hands work directly to an independently scalable OCR worker pool.
File + tenant context
Auth · quota · ingestionId
RESERVED · expiry · tenant
Private · encrypted · immutable key
Filtered object event
Retries · DLQ · burst buffer
Validate → PUT versioned S3 clean
Provider backpressure · retry · DLQ
Mistral primary · Google fallback
JSON Schema · Zod · bounded retries
VAT · totals · business rules
Idempotency · version check
Invoice · items · processing status
Matching · analytics · notifications
PENDING → PARTIAL → SCANNED
At-least-once delivery. Exactly-once business effects.
Queue handoffs favor retry over loss. Stable identities and conditional writes keep duplicate deliveries invisible to the product.
Engineering reflection
What I learned
Reliability did not come from choosing a better AI provider. It came from making provider calls replaceable, retries idempotent, and accounting decisions deterministic. I also learned not to introduce every asynchronous boundary upfront: each additional component must correspond to a measured bottleneck or a distinct failure mode.
Key outcomes
- Direct-to-S3 document upload
- Mistral OCR with Google Vision fallback
- Schema-constrained LLM extraction
- Deterministic VAT and total validation
- Progressive PENDING → PARTIAL → SCANNED states
Technologies