Foxing
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 · github.com/DrDustinEdwards/foxing · capsid.dustinedwards.info/s/foxing
Used by 3
- Capsid coordinates
- Foxing Admin writes to, reads
- Carrel publishes to
Inside Foxing
Runs
Web 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.
writes to foxing writes to foxing-epubs writes to APP_KV writes to ClubRoom writes to foxing-companion-cache reads foxing-companion-cache serves Foxing reader serves Discord Activity writes to Email
Scheduled jobs
Workers cron triggers
The companion cache at 08:00, a push sweep every five minutes, and the nightly D1 backup.
writes to foxing writes to foxing-companion-cache writes to foxing-backups
Stores
foxing
D1
Readers, books, shelves, reviews, annotations, clubs and journal posts, with full-text search.
foxing-epubs
R2
Covers, EPUBs, avatars and journal images.
foxing-backups
R2
The nightly D1 dumps.
APP_KV
Workers KV
Sessions, caches and rate-limit state.
ClubRoom
Durable Object
One live room per reading club, fanning out reactions and presence. It never writes D1.
foxing-companion-cache
Cloudflare Queues
One message per book, so the consumer writes the AI companion's cached notes.
Outside
Foxing reader
Expo React Native app
The phone reader, with foliate-js for EPUBs. It calls the web Worker's API.
reads Supabase function
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.
Uses 4
- d1-dump installs
- devkit installs
- site-runtime installs
- site-api installs
Public model, 2026-10-23. Markdown