01
corebank
A complete digital bank: accounts, transfers between customers, transaction history, and an AI assistant you ask about your balances in plain language.
Architecture
A Go API between two stores: TigerBeetle holds the money and PostgreSQL holds everything else. There is no distributed transaction — the row uuid is the transfer id in the ledger.
Backend Go 1.26 · chi · pgxLedger TigerBeetle 0.17.9Data PostgreSQL 17 · gooseFrontend React 19 · Vite 6 · TanStack Query · Tailwind 4Assistant MCP · Anthropic SDK for GoInfrastructure Docker Compose · nginx · GitHub Actions
What I take away
An invariant that really matters is not defended with a check: it is defended by removing the possibility. There is no balance column, so it cannot fall out of sync; the model cannot confirm, so a prompt injection does not scale into a loss; the spend cap compares and increments in one statement, so there is no race to win. In all three the cost was losing a convenience.


