Work
ERP · confidential

A Norwegian multi-tenant ERP.

B2B accounting and operations for many organisations on one codebase, built under NDA. I can't name the client or show the screens. I can show the architecture, the constraints, and how a human approves everything the AI proposes.

.NETNext.jsSupabaseEntra ID
Role
Sole engineer, design → ops
Type
Multi-tenant B2B platform
Status
Live, in production
Governance
Human-approval AI workflow

The situation

The brief was structural: one platform, many organisations, zero data leakage between them, and an AI-assisted expense pipeline a finance team could actually trust. Norway's 2027 e-invoicing mandate was on the horizon, and the client wanted it built in as a standing deadline, not discovered as a scramble.

What I made

A single codebase serving many tenants. Identity runs through Microsoft Entra ID. Tenant isolation is enforced in the database with row-level security, so a bug in application code cannot reach across organisations. The AI reads receipts and drafts the line items and VAT codes; nothing it drafts reaches the books until a person approves it.

The 2027 e-invoicing mandate lives in the platform as a compliance clock, so the deadline lands as routine work instead of an emergency.

Three decisions

  1. Isolation in the database, not the code. Row-level security on every tenant table means the boundary holds even when the application layer is wrong. Application code is where bugs live; the database is where the guarantee has to be.

  2. The AI drafts, a human commits. Extraction and drafting are automated. Approval is not. If the AI gets it wrong, nothing reaches the books on its own — a human is always the last step.

  3. Compliance as a clock, not a project. The 2027 mandate is tracked inside the product from day one, so every release moves it forward a little instead of one release having to solve it all.

Outcome

Live and in production. Boundaries and controls described here are real; names, revenue and headcount are not disclosed. I can walk through the architecture in conversation under the client's confidentiality terms.

If you are building something similar, I read every brief myself and reply within 48 hours.

Project brief