Inside Foxhound
Its 12 parts, what each runs on, and the lines between them: the containers of the C4 model, inside the system's boundary, and the 2 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 |
|---|---|---|---|
| App Worker | worker | React Router 8 on a Cloudflare Worker | Serves foxhoundapp.com: marketing, sign-in, the merchant app, Stripe webhooks and the admin API. |
| foxhound | database | D1 | Accounts, merchants, payments, recoveries, disputes and billing. |
| foxhound-backups | bucket | R2 | The nightly D1 dumps. |
| MoneyWriter | database | Durable Object | Serialises every write that moves money. |
| CronLock | database | Durable Object | Keeps each scheduled job to one run at a time. |
| RateLimiter | database | Durable Object | Rate limits for the API. |
| Auth rate limiter | database | Durable Object | Rate limits for sign-in. |
| foxhound-audit | queue | Cloudflare Queues | Free revenue audits, run one at a time off the request. |
| foxhound-email | queue | Cloudflare Queues | Outgoing recovery and account mail. |
| foxhound-email-dlq | queue | Cloudflare Queues | Mail that failed every retry. |
| foxhound-email-events | queue | Cloudflare Queues | Delivery events for sent mail. |
| Scheduled jobs | cron | Workers cron triggers | Recovery every five minutes, daily sweeps and backup, weekly digests, and monthly billing and audits. |
Outside it
- Stripe (Stripe Connect): Merchants' payments, failures and disputes.
- Email (Workers send_email binding): Recovery mail from send.foxhoundapp.com, sign-in mail from auth.foxhoundapp.com.
How they connect
- App Worker writes to foxhound
- App Worker writes to MoneyWriter
- App Worker reads RateLimiter
- App Worker reads Auth rate limiter
- App Worker writes to foxhound-audit
- App Worker reads foxhound-audit
- App Worker writes to foxhound-email
- App Worker reads foxhound-email
- foxhound-email writes to foxhound-email-dlq
- App Worker reads foxhound-email-events
- App Worker writes to Email
- App Worker reads Stripe
- App Worker writes to Stripe
- Scheduled jobs writes to CronLock
- Scheduled jobs writes to foxhound
- Scheduled jobs writes to foxhound-backups
- Scheduled jobs writes to foxhound-email