DFD — System (Level 0)

The whole site as one data flow, from authoring through the build and publishing to reading, with its trust boundaries.

  • Status: Current
  • Last updated: 2026-11-01
  • Related ADRs: ADR-0005, ADR-0010, ADR-0020, ADR-0013, ADR-0014, ADR-0016

Snapshot of the system as it stands today. Edit in place; never record what changed. Conventions: content/docs/maintain/dfd/index.mdx. Levels balance — a child's flows match its parent's.

Scope

The whole site: authoring, build, publishing and reading. No parent diagram.

Diagram

Data flowOpen full screen

External entities

EntityRole
OwnerWrites the content; reviews and commits every change; runs the build
Consuming repositoriesThe owner's project and package repositories, which include this one as a git submodule and write their own folder, content/<slug>/ (ADR-0010)
ReaderReads pages; searches from the browser, in the search dialog or the home page's hero field
LLM tools / crawlersRead the pages, the Markdown routes, llms.txt / llms-full.txt, robots.txt and sitemap.xml
Google FontsServes font files during the build, for next/font and the share images (ADR-0035)
AlgoliaHosts the search index document
GitHubServes the avatar in each profile chip, github.com/<user>.png, redirecting to avatars.githubusercontent.com (ADR-0020)

Processes

#ProcessInput → Output
1.0Build (next build)content/ → static pages and routes
2.0Sync search index (scripts/sync-content.ts)Built static.json → Algolia index
3.0ServeBuilt output → readers and tools

Data stores

IDStoreContentsClassification
D1content/Published documentation, one folder per package or project, including this site's own design documents (docs/maintain/)Public — see ../security/data-classification.mdx
D2.env.local (gitignored)Algolia app ID, search-only key, write keyThe write key is Restricted; the others are Public

Trust boundary crossings

FlowDirectionAuthorisationPrivate content?
Pages from a consuming repository → content/Submodule → repositoryThe owner's review and commit; agents there never commit (PROJECT_AGENTS.md §10)Could carry a private project's text if written into its folder; the owner's review is the control, and PROJECT_AGENTS.md §2 forbids it
Records → AlgoliaBuild → AlgoliaALGOLIA_WRITE_KEYWould carry any page in content/. Each record also carries its scope tag and, for catalogue pages, package, kind, ecosystem, track, line, channel (ADR-0013) — public metadata about public pages
Search query → AlgoliaBrowser → AlgoliaSearch-only key, public by designCan read every record in the index. The query is the reader's text only; the dialog adds no filter
Pages and machine-readable routes → readers and toolsSite → publicNoneWould carry any page in content/
Font request → Google FontsBuild → Google FontsNoneNo. The request names a font family and weight, and no page's words
Avatar → readerBrowser → GitHubNoneNo. The request carries the reader's IP address and user agent and, with referrerpolicy="no-referrer", no page address. The username in it is already on the page (Public)
"View on GitHub" linkSite → GitHubGitHub's own access rulesPoints at the page's source in the repository named in gitConfig

Every crossing carries everything in content/. That is why no private project content may go there until its ADR is approved (AGENTS.md §6.1).

On this page

4 min read