Skip to content

Decisions

Each decision has its own page: the decision, its status, and a link to the reference page that explains the mechanism it produced.

ADRDecisionStatus
001Use the internal JSON:API of Patreon, not the official OAuth APIAccepted
002Send each request from the runner, never from the service workerAccepted
003The runner replies with data; the service worker writes the cacheAccepted
004The service worker keeps no state between messagesAccepted
005Do not open a hidden tabAccepted
006Dexie for data, Cache API for bytes, no referrer for mediaAccepted
007hls.js for HLS; an iframe and a CSP list for other playersAccepted
008Do Safari after Chrome and Firefox are stableAccepted
009A harness browser with a profile that keeps the sessionAccepted
010One message for each page; no chunking. A message is 25 to 42 KBAccepted (2026-08-30)
011Gopher does not make moneyAccepted (2026-08-30)
012A side panel, not a popup; the tab uses the same panel codeAccepted (2026-08-30)
013No offscreen document; use a patreon.com tab that is openAccepted (2026-08-30)
014CSS that we wrote, not Tailwind or shadcn/uiSuperseded by ADR-017 (2026-08-31)
015Gopher limits its own requests, and a test proves the limitsAccepted (2026-08-30)
016Catalogs that we wrote for the panel, _locales/ for the manifestAccepted (2026-08-30)
017Tailwind CSS 4 with shadcn/ui for the whole panelAccepted (2026-08-31)
018The Aqua registry gives the components, the palette, and the faceAccepted (2026-08-31)
019The documentation is a public site in this repository, with memory.md for stateAccepted (2026-09-02)