6.3Software · Infrastructure · SystemsDustin Edwards

dustinedwards.info

Dustin's personal site.

How dustinedwards.info connects

Used by 3

Inside dustinedwards.info

Runs

  • Site Worker

    Cloudflare Worker

    Serves the site, and the site-api routes Carrel writes through.

    writes to dustinedwards writes to APP_KV writes to dustinedwards-media writes to dustinedwards-og writes to dustinedwards-backups writes to dustinedwards-media-backup writes to dustinedwards-webmention-verify writes to AskBudget writes to GitHub reads dustinedwards-media-events reads dustinedwards-webmention-verify reads Webmention sources reads Ask index reads Images reads Browser Run reads Cloudflare Access reads OpenAlex

  • Watchdog

    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.

    watches Site Worker writes to Site Worker writes to APP_KV reads Cloudflare Analytics writes to Alert email

Stores

  • dustinedwards

    D1

    The posts and pages, with every saved version.

  • APP_KV

    Workers KV

    The health snapshot, the drift cache, the Ask cache, the watchdog's alert state and other site state.

  • dustinedwards-media

    R2

    Media originals. Irreplaceable and never emptied.

    writes to dustinedwards-media-events

  • dustinedwards-og

    R2

    Derived social cards and the CV PDF. Regenerable, so it may be emptied and rebuilt.

  • dustinedwards-media-backup

    R2

    The media mirror. No site code path deletes from it.

  • dustinedwards-backups

    R2

    The nightly D1 dumps, pruned to 14 daily, 8 weekly and 6 monthly.

  • dustinedwards-media-events

    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

    Queues, dead-letter queue

    Webmention ids waiting for verification. The consumer fetches each source and records the verdict.

  • AskBudget

    Durable Object with SQLite

    The whole site's exact rate limiter: sign-in, the operator API, webmention, health, CSP reports and Ask.

Outside

  • 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.

    deploys Site Worker deploys Watchdog

  • 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.

Uses 7

Step by step

Publishing a post

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.

  1. Drafted: the writer works in Carrel's editor, which autosaves a working draft only that person can see.
  2. Previewed: Carrel shows the site's own render of the draft in a sandbox, with the checks' flags and any reviewer's beside it.
  3. Saved: an Editor or the Owner saves the draft to the site, naming the version it replaces. The site refuses a stale one, so nobody overwrites a newer save.
  4. Published: only the Owner publishes, and a first publish asks for confirmation. The site's own publish policy decides, so there is one authority.
  5. Or by instruction: the Owner's AI session may publish through the MCP door, never while a flag is open. It sends no text, so only the saved version goes live, and Dustin is emailed an unpublish link.
  6. Recorded: Carrel indexes the live post, records who published it (an AI session by its client name) and clears the draft that was sent.
  7. Watched: every 15 minutes Carrel runs site-api's conformance suite against the site and emails when its state changes.

Public model, 2026-10-23. Markdown