Home
Story
Product
Market
Business
Team
Investors
Book 20 minutes
Measured 2 October 2026

A big codebase, kept under control.

Simma is built on Python and Django, with React for the newer pages and a mix of AI models chosen task by task: Claude, GPT and TypeSafe's Jev. Mainstream, well-documented tools that any experienced Python developer knows. This page covers what it's built on, how it's kept in check, and where it's thin today.

11,733tests passing at the last full run (1 September)
122contract tests guarding the joins between parts
65design decisions written down, with the reasons
Nightlybackups, with a monthly restore test
The stack

One codebase, from database to browser.

Every section of the product (website, bookings, customers, payments, marketing, team, money) is in the same codebase, on the same database. That's what lets the AI team see the whole business.

Layer
Version
What it does
Python
3.11
The whole back end.
Django, with Django REST Framework and Channels
5.2
The web framework: pages, sign-in, APIs and live updates. Each business gets its own address and sees only its own data.
PostgreSQL, with pgvector
16
One database for every section of the product. pgvector adds the search the AI uses to find related records.
Celery and Redis
5.5 · 7
Background work: scheduled jobs, emails, reminders and longer AI tasks.
Server-rendered pages, htmx and Tailwind CSS
htmx 2 · Tailwind 3
Most of today's app: fast pages built on the server, with small interactive updates.
React, with TypeScript, Vite and Tailwind CSS 4
19
The newer pages. The app is moving to React one page at a time, with Django still in charge of routing, sign-in and data. See where it's thin.
Stripe
—
Card payments, subscriptions and payouts.
AWS, in London
—
The app, database and background workers run in containers on AWS in London (eu-west-2). Files and images are served from S3 through CloudFront.
Sentry and CloudWatch
—
Error tracking, alarms and scheduled checks on backups and the database.
How it's kept in check

Built with AI agents. Checked by more than trust.

Simma is built by the founder working with AI coding agents. That only works if the checks don't depend on anyone reading every line, so the checks are built in.

Tests, with the pass rate

At the last full run (1 September): 11,733 passed, 5 failed and 2,003 skipped. Four of the five failures were written on purpose, to reproduce a bug before its fix. The skipped tests are parked on a list, each with its cause, and cleared in batches. Day to day, the rule is that a change runs the tests it affects before it's committed.

Contract tests on the joins

122 tests check the places where one part of the system relies on another: menus, links, signals, background queues, which roles can open what. If someone changes one side of a join, the other side's test fails.

Decisions written down

65 decision records say what was chosen, what was rejected and why, and 57 of the 85 apps carry their own guide. Agents read them before they plan, and a plan that contradicts a decision stops for the founder.

How agent work is checked

The founder approves each plan, and agents work from written contracts that name the files they may change. A change outside that area is refused until it's explained. The whole loop is below.

How Simma builds Simma

Simma is built inside Simma.

Simma's own development runs on its own project board, at /a/projects/dev. Work is planned there, AI coding agents pick it up there, and it's checked in there. It's the same system the AI team will use to run a customer's business.

  1. Plan

    The founder writes the plan, then breaks it into initiatives, epics and stories on the board.

  2. Contract

    Each story gets a written contract: what to do, which files it may touch, how it will be checked, and how hard it is.

  3. Approve

    The founder approves the plan. Its stories are then offered to agents automatically, once each contract passes the checks.

  4. Claim

    An agent connects to Simma over MCP, asks what's ready for its model, and claims a story, so two agents never take the same one.

  5. Test first

    The agent writes a failing test that describes the change, then the code that makes it pass.

  6. Check in

    The agent closes the story by naming its commits and the files it changed. Anything outside the agreed area is refused until it's explained.

  7. Ask, don't guess

    When the contract looks wrong or the agent isn't sure, it stops and asks a question on the board, and waits for an answer.

  8. Record

    Commits attach themselves to their stories, so the board shows what really happened without anyone updating it.

2,532work items on the board: 23 initiatives, 303 epics, 416 stories, the rest tasks and bugs
1,288commits attached to the work they belong to
203agent check-ins since 17 September, every change accounted for
77questions agents asked instead of guessing

The right model for each story.

Every story is graded simple, standard or complex, and offered only to agents on a matching model. Harder work goes to a stronger model; routine work goes to a cheaper, faster one. 84 agents are registered: 10 simple, 26 standard, 44 complex.

Grade
Model
Used for
Simple
Claude Haiku
Small, well-specified changes with a clear test.
Standard
Claude Sonnet
Most feature work and bug fixes.
Complex
Claude Opus
Planning, design, and changes that cross many parts of the system.

What we learned measuring it. On three matched stories, Haiku used 73% of Sonnet's tokens and passed two of three; Sonnet passed all three. Haiku's miss was a test suite that tested nothing, and every automatic check passed it. That's why grading matters, and why a story that fails at one grade moves up to the next. The loop has been proven on this codebase only; it isn't offered to customers yet.

Next: Simma grows Simma

If it can run our business, it can run theirs.

Simma already builds Simma. The plan is that it also runs and grows Simma, the business: everything in one system, the way it will be for a customer. If we can run and grow our own company on it, we know our customers can too.

Simma, the business
Status
Run in Simma
Building the product
● Live
The project board, the agents and the check-ins above.
Customers and sales
○ Plan
Leads, customers and the sales pipeline in Simma's own CRM.
Marketing
○ Plan
Emails, social posts and Simma Sparks content, drafted by the AI team and approved and sent from Simma.
Simma Local Partners
○ Plan
Partners onboarded, trained and managed inside Simma.
The website
○ Plan
Simma's own sites, this one included, moved onto Simma's site builder as it grows into this kind of design.
The AI

The right model for each job.

No model is hard-wired. Each kind of task is routed to the model that does it best, and a business can change the choice task by task. When a better model ships, it's a setting, not a rebuild.

Model
Provider
Used for
Claude (Haiku, Sonnet, Opus)
Anthropic
The default for text work: writing, sorting, pulling details out of messages, analysis and actions. Haiku is the default; a larger model can be chosen for harder work.
GPT (gpt-5-mini, gpt-image-2)
OpenAI
Reading images and documents (receipts, product photos, PDFs), and creating and editing images.
Jev, the decision engine
TypeSafe
The small calls a business makes all day: yes or no, which of these, how likely. A model built for decisions answers them instead of a full language model, with a calibrated confidence and at a fraction of the cost. A decision can flag, narrow or escalate; it never approves anything on its own. If Jev is unavailable, each decision falls back to Claude or holds back its answer, so Simma never depends on it. In the code now, and being switched on one decision at a time.
MCP, the open standard for AI tools
—
Simma's 94 tools are offered over MCP, which Claude and ChatGPT both support. Simma's own AI team and an owner's outside assistant can use the same tools, within the business's permissions and approvals.

The AI drafts; the owner approves

Anything that reaches a customer or moves money waits for a person to approve it. The AI can suggest and prepare; it doesn't get to send on its own.

Answers only from what's public

Simmi, the assistant on this site, runs on Claude and answers only from this site's own text. Ask Simmi.

Data protection

Customer data stays in London.

What
Status
How
Where data lives
● Live
The database, files and backups are all on AWS in London (eu-west-2).
One business can't see another's
◐ Building
Every business's records carry the business they belong to, each business has its own address, and access is by role. Tests cover the known risky patterns; a check across every route is being written (see below).
GDPR tools
● Live
Consent records, data-subject requests, retention policies and an audit log are part of the platform, not add-ons.
Backups
● Live
A full database backup to S3 every night, kept daily, weekly and monthly. A monthly test restores it into a separate copy and checks the counts; the first run, on 4 September, passed.
Where it's thin today

The questions a developer would ask.

Better you read them here than find them in due diligence.

The gap
Status
What it means, and what's next
One person knows the codebase
Risk
True today, and until the pre-seed: two engineers join in month 8, one owning infrastructure and releases, so from then three people know it. Meanwhile: the 65 decision records, the app guides and the full history of the build are kept with the code, where the next engineer can read them. More on Team.
One server
◐ By choice
The app, database and workers share one machine. There's no second server to take over, and a full release takes the site offline for a few minutes. Until 3 September Simma ran on a managed database, a separate cache and a load balancer; they were switched off to cut hosting costs to about a third while there are no customers. Going back is known work, not new work.
Two front ends
◐ Building
Most pages are server-rendered; the newer ones are React. Pages move one at a time, the two never share a page, and moving a page back is a one-line change. The first page has moved in the code and goes live with the next release. The move pays off only if later pages get cheaper to move; that's being measured.
Parked tests
◐ Building
2,003 tests were skipped at the last full run. Most are parked on a list, each with its cause, and are cleared in batches when work touches that area. New code may not add to the list.
Keeping businesses apart, checked everywhere
◐ Building
The rule that every lookup is filtered by business is checked for the patterns known to go wrong, and fixes of exactly this kind are still landing. A test that drives every route as the wrong business is being written.
No independent security review
○ Not yet
No outside penetration test or security audit has been done yet.
Code ahead of production
◐ Building
Much of what's described here is in the code but not yet released. Status has the gap, measured.
The size

About 2.9 million lines.

Lines of code don't measure value, and more code is more to look after. We show them for one reason: they give a sense of how much of the product already exists.

Kind
Lines
Notes
Application Python
1,067,843
4,095 files across 85 Django apps, with 1,446 data models (791 of them belong to a business).
Page templates
1,158,031
4,592 HTML templates, including the themes for customers' websites.
Tests
287,890
1,776 files, 17,469 test functions.
JavaScript
209,096
597 files, mostly the website builder and published sites.
Database migrations
104,520
880 files: every change to the database's structure, in order.
TypeScript (React)
59,405
The React pages and their component library.

How it was counted: non-blank lines in the files tracked in the repository, 2 October 2026. Left out: documentation, planning notes, third-party libraries, built bundles, generated files, stylesheets and one-off scripts.