6.3Software · Infrastructure · SystemsDustin Edwards

Foxing

A reading app and web platform, Letterboxd for books: a web app, an Expo phone reader and a Discord Activity for reading clubs.

How Foxing connects

Used by 3

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

Public model, 2026-10-23. Markdown