But we can at least tell you how it works and how it was built. (Hint: Lots of tokens and hundreds of Github commits and pull requests. At the time of writing this we were up about 250 PRs)
Payload CMS
Payload CMS is our backbone, and honestly it's amazing. It's lightweight and as a Next.js app we were really able to modify every bit of it and provide a truly custom experience that we wouldn't have been able to with the other backend platforms.
Multitenancy
We chose Payload because it allowed us to give each user their own publication. Within each publication are that users' unique posts, pages, tags, media, interactives and subscribers.
Content pipeline
Posts and pages are Lexical documents rendered by a fixed React frontend. Publication owners configure content and Interactive blocks resolve per request under the domain-derived publication: declarative kinds such as charts, tables, timelines and embeds render from validated specs, dynamic kinds such as post bands and signup forms query current published content at render time and never persist the result, and sandbox interactives render author code in an isolated frame.
How each kind renders
| Kind | Renders from | State at render |
|---|---|---|
| Declarative — charts, tables, timelines, embeds | A validated spec stored in your library | Nothing persisted |
| Dynamic — post bands, signup forms | Your current published content, queried per request | Result never persisted |
| Sandbox | Author code in an isolated frame | No network, no storage, no parent access |
The sandbox
A sandbox interactive runs in an iframe with a content security policy of default-src 'none': no network, no storage, no parent DOM access, no external images or fonts. Publication theme variables and a repository-maintained design kit are copied into the frame.
This is great because the AI agent can literally build anything.
Agent surface
The in-app chat runs server-side on the publication's encrypted provider credential, with publication-scoped tools for creating interactives and reading posts. MCP is served by the official Payload MCP plugin at /api/mcp, limited by the platform config and further restricted by each API key — nothing is deleted through it. But CAREFULLY configure access please.
We use a SMTP-backed queue along with Mailgun to send out the newsletter and and any verification emails.
Part of Under the hood. Questions? Support & FAQ.