Inside Foxing
Its 8 parts, what each runs on, and the lines between them: the containers of the C4 model, inside the system's boundary, and the 4 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 |
|---|---|---|---|
| Web Worker | worker | React Router 8 and Hono on a Cloudflare Worker | Serves foxing.app and the /api/v1 the apps call: books, reading, reviews, clubs and the web reader. |
| foxing | database | D1 | Readers, books, shelves, reviews, annotations, clubs and journal posts, with full-text search. |
| foxing-epubs | bucket | R2 | Covers, EPUBs, avatars and journal images. |
| foxing-backups | bucket | R2 | The nightly D1 dumps. |
| APP_KV | kv | Workers KV | Sessions, caches and rate-limit state. |
| ClubRoom | database | Durable Object | One live room per reading club, fanning out reactions and presence. It never writes D1. |
| foxing-companion-cache | queue | Cloudflare Queues | One message per book, so the consumer writes the AI companion's cached notes. |
| Scheduled jobs | cron | Workers cron triggers | The companion cache at 08:00, a push sweep every five minutes, and the nightly D1 backup. |
Outside it
- Foxing reader (Expo React Native app): The phone reader, with foliate-js for EPUBs. It calls the web Worker's API.
- Discord Activity (Vite and React Discord Activity): Club reading inside Discord: reactions, polls and sprints.
- Supabase function (Supabase edge function): Kept only for the phone reader's AI companion.
- Email (Workers send_email binding): Sign-in and notification mail.
How they connect
- Web Worker writes to foxing
- Web Worker writes to foxing-epubs
- Web Worker writes to APP_KV
- Web Worker writes to ClubRoom
- Web Worker writes to foxing-companion-cache
- Web Worker reads foxing-companion-cache
- Web Worker serves Foxing reader
- Web Worker serves Discord Activity
- Web Worker writes to Email
- Foxing reader reads Supabase function
- Scheduled jobs writes to foxing
- Scheduled jobs writes to foxing-companion-cache
- Scheduled jobs writes to foxing-backups