Carrel
The writing desk, where drafts are written, checked, and published.
carrel.dustinedwards.info · github.com/DrDustinEdwards/carrel · capsid.dustinedwards.info/s/carrel
Used by 2
Inside Carrel
Runs
Carrel Worker
Cloudflare Worker
The editor behind Access, and the MCP door AI sessions use, in one Worker.
writes to carrel reads Site Worker (dustinedwards.info) publishes to Site Worker (dustinedwards.info) writes to OAUTH_KV reads Cloudflare Access serves AI sessions writes to GitHub reads GitHub reads Google writes to Email writes to Books (Writing) reads Books (Writing)
Fifteen-minute check
Workers cron trigger
Checks each connected site against site-api's contract and refreshes Carrel's index of its posts.
watches Site Worker (dustinedwards.info) writes to carrel reads Google writes to Bluesky and X writes to Drafting routine writes to Email writes to MCP Worker (Capsid)
Nightly backup
Workers cron trigger
Dumps the D1 database into carrel-backups with d1-dump, alone, once a night.
writes to carrel-backups reads carrel
Stores
carrel
D1
People and roles, working drafts, AI drafts, flags and the index of each site's posts.
OAUTH_KV
Workers KV
Grants and tokens for the AI door's OAuth provider.
carrel-backups
R2
The nightly D1 dumps.
Outside
Cloudflare Access
Access, and Access for SaaS
Guards every page at the Worker level, and is the login behind the AI door's own OAuth.
AI sessions
MCP clients
The AI sessions that read posts, save AI drafts and flag problems through the AI door.
GitHub
Repos, Actions, a GitHub App
The writing repository Carrel commits book files to through its App, and CI, which deploys the Worker.
deploys Carrel Worker watches Carrel Worker
Google
Drive and Search Console APIs
Manuscripts in a shared Drive folder, and search data for dustinedwards.info.
Bluesky and X
Bluesky and X APIs
Where Carrel posts original social posts. It never replies, messages, follows or likes.
Drafting routine
Claude Code routine
Drafts brand posts when no session drafted them ahead. Carrel only fires it.
Email
Workers send_email binding
Alerts when a site's state changes, and the unpublish link after an AI publish.
Uses 13
- Capsid writes to
- d1-dump installs
- devkit installs
- site-runtime installs
- Capsomer installs
- site-api installs
- Germomics publishes to
- dustinedwards.info reads, publishes to, watches
- TXASM publishes to
- julieedwards.info publishes to
- Foxing publishes to
- Foxhound publishes to
- Writing writes to, reads
Step by step
Publishing a post
A post goes from a private draft in Carrel to a live page on dustinedwards.info, through the one contract every site speaks, with the site deciding what may go live.
- Drafted: the writer works in Carrel's editor, which autosaves a working draft only that person can see.
- Previewed: Carrel shows the site's own render of the draft in a sandbox, with the checks' flags and any reviewer's beside it.
- Saved: an Editor or the Owner saves the draft to the site, naming the version it replaces. The site refuses a stale one, so nobody overwrites a newer save.
- Published: only the Owner publishes, and a first publish asks for confirmation. The site's own publish policy decides, so there is one authority.
- Or by instruction: the Owner's AI session may publish through the MCP door, never while a flag is open. It sends no text, so only the saved version goes live, and Dustin is emailed an unpublish link.
- Recorded: Carrel indexes the live post, records who published it (an AI session by its client name) and clears the draft that was sent.
- Watched: every 15 minutes Carrel runs site-api's conformance suite against the site and emails when its state changes.
Public model, 2026-10-23. Markdown