Status is marked honestly throughout. Live means running in our production deployment. Built means the code exists with test coverage but isn't wired to a live broker or transport yet. Planned means designed and not built.
Content — Pure CMS
Wagtail
Typed structured blocks — content as data, not HTML
pages · block_utils
Posts, events, scheduling
blog · cms_calendar
Site sign-up audiences
cms_mailing_list
Swappable look, no core edits
theme apps
Your brand voice and business facts, for grounding AI
context_store
In-editor drafting with business context
streamfield_ai · wagtail_ai
Business — Pure CRM
swappable abstract models
Contact, Opportunity, Organisation, sale stages
models · pipelines
Take card payments
crm_payments · pinpayments
Agreements, plans, seats, licences
crm_billing
Invoices and ledger, synced to Xero
crm_accounting · xero
Campaigns from the same contacts
crm_marketing · mailchimp
Invitations, member areas, cases
context_invitations · crm_legal
Business reporting and policy rules
crm_reporting · crm_policies
Server-rendered components, no separate front-end app to maintain
htmx · crm_components
AI — Pure Creative AI
the pure_ai suite
Runner loop, tool registry, approval gating, run log
pure_ai
Governed actions over content and records
pure_cms_ai · pure_crm_ai
Swap the AI model, keep everything else
pure_ai_anthropic · pure_ai_openai
Deny-by-default, tokenised, audited egress to agents
agent_access · token_vault
Background tasks, MCP server, external orchestration client
tasks · mcp_server · n8n
Drafts pages and sections into review, never publishing itself
content-editor · cms tools
Identity & foundation
one user, beneath every layer
A single Django user — the website visitor is the CRM contact
users · Contact.user
Access down to the individual record
guardian
Role depends on context, not fixed group membership
django_proximity_roles
Status models, the agent-access contract
pure_django
Content, business data and identity in one owned store — no SaaS silos, no cross-system sync to reconcile.
This single shared database is what lets an AI assistant see the whole business at once — and what lets you walk away with all of it.
Why it stays maintainable across many clients.
Content is structured, never HTML
Every page is typed, addressable blocks. That's what makes content reusable across channels, queryable alongside business data, and legible to an AI assistant.
Business models are abstract with working defaults
Every CRM model ships as an abstract base with a concrete default you can swap. One core serves very different businesses without a fork per client.
Client projects never edit library source
Customisation happens through model swaps and settings. If something can't be expressed that way, the library needs a new extension point — not a fork.
Want to see it running?
We'll walk you through the real admin, the real data model and the audit log — including the parts still in progress.