Under the hood
Built to keep the books exact.
A Go server and a PostgreSQL 18 database. Plain enough to run on a small server, strict enough that one bug cannot quietly corrupt the ledger.
Design decisions
- Modular monolith
- Finalizing an invoice touches stock, tax, accounts and numbering together, so it needs one transaction rather than a chain of services.
- Exact decimals for money
- Floating point cannot hold 0.01 exactly, and an accounting system that rounds wrongly has a trust problem. Money and rates use exact decimals.
- Append-only stock history
- A balance is the sum of movements, never an editable number, so it can always be explained and reconciled.
- Double-entry, enforced in layers
- The application checks the sum, the database enforces it, and posted rows cannot be silently edited.
- Row-level security
- Tenant data is scoped in the application and again in PostgreSQL, so one bug is not a cross-tenant leak.
- Tax as data, not columns
- A generic tax model with country packs keeps a new country additive instead of a rewrite.
Passwords use Argon2id with TOTP support. Read the engineering notes on double entry and money as exact decimals, or the architecture documentation.
Integrate with it
The API, webhooks and read-only MCP interface sit on the same permission checks as the app.