Inside dustinedwards.info
Its 11 parts, what each runs on, and the lines between them: the containers of the C4 model, inside the system's boundary, and the 9 it works with outside it.
The drawing
The same map as a list
Runs everything
- Capsid The store, the queue, and the credentials every other project runs through. mcp.dustinedwards.info Its page Capsid
Shared parts
- d1-dump shared Backs up each table of a D1 database, keeps the backups on a schedule, and drills the restore. Its page d1-dump
- devkit shared Shared CI workflows, Renovate rules, and test helpers. Its page devkit
- site-runtime shared Security headers, the rate limiter, and the health format that every site imports. Its page site-runtime
- Prelum shared Turns finished writing into pages, feeds, and sitemaps. Its page Prelum
- Capsomer shared The tokens, the shell, and the shared controls every app is drawn with, in plain CSS. capsomer.dustinedwards.info Its page Capsomer
- site-api shared The contract Carrel uses to publish. Its page site-api
Websites
- Dustin Edwards Admin admin Runs dustinedwards.info from a chat, covering health, mentions, media, registries, citations, and lab procedures. Writing stays in Carrel. Its page Dustin Edwards Admin
- Germomics site A podcast and writing site about microbiology and history, with interactive virus and bacteria data pages and browser games. germomics.com Its page Germomics
- dustinedwards.info site Dustin's personal site. dustinedwards.info Its page dustinedwards.info
- TXASM site Runs the Texas Branch ASM meetings: registration, abstract submission and review, the program, and the abstract book PDF. txasm.org Its page TXASM
- julieedwards.info site Julie Edwards's campaign site for the Bluff Dale ISD school board. Its copy lives in D1 and is edited through Carrel. julieedwards.info Its page julieedwards.info
Apps
- Foxing app A reading app and web platform, Letterboxd for books: a web app, an Expo phone reader and a Discord Activity for reading clubs. foxing.app Its page Foxing
- Foxhound Admin admin Runs Foxhound from a chat. It holds no Stripe key and no database: every action is a call to the foxhound Worker's admin API. admin-mcp.foxhoundapp.com Its page Foxhound Admin
- Foxhound app Recovers failed Stripe payments, handles disputes and reports subscription health for merchants, and is paid only on money it recovers. foxhoundapp.com Its page Foxhound
- Foxing Admin admin Runs Foxing from a chat: stats, users, badges, journal posts and catalog health, all through the foxing Worker. Built, not yet deployed. Its page Foxing Admin
Writing
- Carrel writing The writing desk, where drafts are written, checked, and published. carrel.dustinedwards.info Its page Carrel
- Enarratio writing An npm package of charts, with a gallery. enarratio.dustinedwards.info Its page Enarratio
- Writing private Dustin's books: scenes, outlines and story bibles, which Carrel reads and commits through its own GitHub App. Its page Writing
Tools
- Skills tool The instructions AI sessions follow. Its page Skills
- Private skills private Dustin's own session setup, which every AI session loads beside the public skills. Its page Private skills
- capsid-bench tool The study harness that compares Claude Code with and without Capsid on the same tasks, scored on hidden tests. Its page capsid-bench
- Capsid backups private Mirrors Capsid's daily database dumps off Cloudflare every day, so losing the account does not lose the store. Its page Capsid backups
| Part | Kind | Runs on | What it does |
|---|---|---|---|
| Site Worker | worker | Cloudflare Worker | Serves the site, and the site-api routes Carrel writes through. |
| dustinedwards | database | D1 | The posts and pages, with every saved version. |
| Watchdog | cron | Second Worker on a 15-minute cron | Reads the site's /api/health over a service binding, runs the repair plan and the nightly D1 dump through the operator API, and emails an alert when the state changes. |
| APP_KV | kv | Workers KV | The health snapshot, the drift cache, the Ask cache, the watchdog's alert state and other site state. |
| dustinedwards-media | bucket | R2 | Media originals. Irreplaceable and never emptied. |
| dustinedwards-og | bucket | R2 | Derived social cards and the CV PDF. Regenerable, so it may be emptied and rebuilt. |
| dustinedwards-media-backup | bucket | R2 | The media mirror. No site code path deletes from it. |
| dustinedwards-backups | bucket | R2 | The nightly D1 dumps, pruned to 14 daily, 8 weekly and 6 monthly. |
| dustinedwards-media-events | queue | Queues, R2 event notifications, dead-letter queue | Object-create events from the media bucket. The consumer derives the media table row and the mirror copy. |
| dustinedwards-webmention-verify | queue | Queues, dead-letter queue | Webmention ids waiting for verification. The consumer fetches each source and records the verdict. |
| AskBudget | database | Durable Object with SQLite | The whole site's exact rate limiter: sign-in, the operator API, webmention, health, CSP reports, preview links and Ask. |
Outside it
- Ask index (Cloudflare AI Search): The one AI Search instance behind Ask mode. Classic search is D1 only and never waits on it.
- Images (Cloudflare Images binding): Derives every thumbnail size from the one original in R2.
- Browser Run (Cloudflare Browser Rendering binding): Renders the CV PDF after each CV save.
- Cloudflare Access (Cloudflare Access application): Guards /admin. The Worker verifies each request's signed Access token.
- GitHub (Repo, pull requests, Actions): The repo the site's content saves commit to, CI, and the deploy workflow that runs ship after green CI on main.
- OpenAlex (OpenAlex API): Citation counts for the publications, by DOI.
- Webmention sources (Other sites on the web): The pages a webmention names. The verifier fetches each one.
- Cloudflare Analytics (GraphQL Analytics API): The Worker's error rate, which the watchdog reads.
- Alert email (Workers send_email binding): Where the watchdog sends an alert when the site's state changes.
How they connect
- Site Worker writes to dustinedwards
- Site Worker writes to APP_KV
- Site Worker writes to dustinedwards-media
- Site Worker writes to dustinedwards-og
- Site Worker writes to dustinedwards-backups
- Site Worker writes to dustinedwards-media-backup
- Site Worker writes to dustinedwards-webmention-verify
- Site Worker writes to AskBudget
- Site Worker writes to GitHub
- Site Worker reads dustinedwards-media-events
- Site Worker reads dustinedwards-webmention-verify
- Site Worker reads Webmention sources
- Site Worker reads Ask index
- Site Worker reads Images
- Site Worker reads Browser Run
- Site Worker reads Cloudflare Access
- Site Worker reads OpenAlex
- dustinedwards-media writes to dustinedwards-media-events
- GitHub deploys Site Worker
- GitHub deploys Watchdog
- Watchdog watches Site Worker
- Watchdog writes to Site Worker
- Watchdog writes to APP_KV
- Watchdog reads Cloudflare Analytics
- Watchdog writes to Alert email
Step by step
- Publishing a post, in 7 steps: 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.