Skip to content

Internal platform — built, not publicly launched

Analytical Ledger
correctness, enforced.

A multi-entity, double-entry general ledger that runs our own group's books — holding company, operating brands, consulting arm — with intercompany elimination on consolidated statements. It's built correctness-first: the database itself rejects a posting that doesn't balance. The full interface is built and runs internally for the group — it simply isn't publicly launched, so there's no link to share. We show the engineering; we never quote the data.

At a Glance

118
Account chart-of-accounts library, structured for multi-entity consolidation.
PostgreSQL
Exact-decimal money on NUMERIC(20,4) — no floating point anywhere in the ledger.
23
Vitest suites that run against a real, trigger-enforced Postgres — not mocks.

What It Is

The books we run on, built the way we'd build yours.

It's an internal platform, not a product for sale — one more piece of the portfolio we own and operate. It keeps the group's multi-entity books honest: separate legal entities, intercompany transactions eliminated on the consolidated view, every statement tracing back to balanced journal entries.

We reference it here because it's the clearest proof of a discipline we bring to anything that moves money. If you need a system where correctness isn't a hope but an enforced invariant — accounting, billing, reconciliation, ledgers of any kind — this is the standard we'd hold your build to.

The Stack

Audit it in sixty seconds.

What's built, layer by layer — major framework versions where they matter. We name what runs and keep schemas, security internals, and the data itself off the page — omission over invention is the whole point.

Front end

Next.js 16 with React Server Components, React 19, and Tailwind CSS 4. The full interface is built — twenty pages across the app — but it runs privately for the group and isn't publicly launched, so there's no link to share.

Middleware & services

Server Actions handle writes; a request-proxy layer attaches the session and applies security headers on every request; a daily cron digest surfaces the review backlog and overdue periods over Resend email and Slack; an ETL importer ingests CSV and OFX with idempotent dedupe and a rules engine.

Back end & data

Drizzle ORM over PostgreSQL, seven migrations to date. Money is exact — decimal.js over NUMERIC(20,4), never floats. Multi-entity double-entry with intercompany elimination, built on a 118-account chart of accounts. PL/pgSQL triggers physically reject an unbalanced posting at the database layer — correctness enforced below the application, not just inside it.

API paradigms

React Server Components and Server Actions — not REST-first. A handful of route handlers cover report exports, authentication, and the cron digest; there's no public API surface, by design.

Authentication

Auth.js v5 with OAuth sign-in via Google and Microsoft Entra ID (Microsoft 365). Access is internal only — the system isn't open to the public.

Payments & commerce

None. This is a general ledger, not a storefront — it records money, it doesn't collect it.

AI & agentic layer

Claude (Haiku) proposes transaction categories through structured tool calls with prompt caching. The rule is fixed: AI proposes, a human approves, and the database triggers validate. The model is a suggestion engine — it never has the final word on a posting.

Delivery & testing

Hosted on Vercel; CI gates every change. The test suite runs against a throwaway Postgres with the real triggers installed, so the same invariants that guard production guard the tests. Digest and alert delivery run over Resend and Slack.

What a Technical Reviewer Will Notice

The parts that don't show up in a demo.

Invariant in the database

PL/pgSQL triggers reject an unbalanced journal entry at the storage layer. An application bug can't write books that don't balance — the database won't let it.

Exact money, no floats

NUMERIC(20,4) with decimal.js arithmetic. No floating-point rounding creeps into a balance sheet that has to reconcile to the cent.

Tested against real triggers

The 23 Vitest suites run on a throwaway Postgres with the production triggers loaded — the correctness rules are exercised, not mocked away.

Engineering, Never Data

We'll walk you through how it works. We'll never show you whose books it holds.

Because this ledger runs our own group's real accounts, the data stays private — always. What we can show a serious reviewer is the engineering: the schema approach, the trigger discipline that enforces balance, the exact-money design, and how the AI-proposes / human-approves / triggers-validate loop is wired. On request, we'll do a live walkthrough of the mechanics against scratch data. The books themselves are never on the table.

Start a Conversation

Need a system that can't
get the math wrong?

This is the discipline we'd bring to anything you need built around money. Tell us what you're trying to ship, and we'll show you how we'd hold it to the same standard.