Decisions
The choices made so far for Launch, the records behind them, and the ones still open.
Every choice the rest of the repo must follow is an architecture decision record (ADR) in docs/adr. The records in this section are published from there each time the site builds, so they always match the repo. A record that changes an earlier one supersedes it rather than editing it.
Made
| Area | Decision |
|---|---|
| Repo | One public monorepo with no vendor code and no client references. See ADR 0001. |
| Hosting | Every front-end and the MCP server run on Cloudflare Workers. |
| Front-end framework | vinext, Cloudflare’s Vite-based implementation of the Next.js App Router. See ADR 0005. |
| Worker config | cloudflare.config.ts and the cf CLI. No Wrangler config files in the repo. See ADR 0003. |
| CI and deploys | Cloudflare Workers Builds, with a Preview per branch. No GitHub Actions; run pnpm verify before opening a pull request. See ADR 0004. |
| Monorepo tooling | Plain pnpm workspaces, no Turborepo. Exact versions, and a minimum release age before a version installs. See ADR 0002. |
| WordPress | Two separate installs: headless over WPGraphQL, and a traditional Timber theme. They share their fields, post types and seed. See ADR 0006 and ADR 0015. |
| WordPress fields | Field groups in PHP with Extended ACF on Secure Custom Fields, post types with Extended CPTs. See ADR 0010. |
| WordPress plugins | Installed by Composer and never committed. Only Patronage’s own patronage-* code is in the repo. |
| WordPress deploys | One deploy kit, wp-deploy, pushes a packaged commit to the host. See ADR 0013 and Deploying WordPress. |
| Payload | One app, using the Local API. D1 is the database by default, with Postgres through Hyperdrive kept as an option. See ADR 0007 and Payload. |
| Shared UI | Plain props from a CMS-neutral content model, on shadcn/ui and Tailwind 4. Each CMS has an adapter; rich text stays CMS-specific. See ADR 0008, ADR 0009 and Shared UI. |
| Access | Every CMS admin and API is behind Cloudflare Access. Front-ends read with a service token, which can only read. See ADR 0011. |
| MCP | One MCP gateway Worker per site, behind Access, with a WordPress and a Payload connector. Every write waits for a person to approve it. See ADR 0014 and MCP server. |
| Logging | Each site’s logs are files in one R2 bucket: Workers through Logpush, WordPress through a Basin Pipelines stream. Optional and off until configured. Reading and acting on the logs is outside Launch. See ADR 0016 and Logging. |
| Docs | This site, built with Blume. Research notes and decision records publish themselves from the repo’s docs/ folder. |
Open
- D1 against Postgres through Hyperdrive, measured on deployed Workers.
- KV against Workers Cache for page caching, measured on a real zone.
- Getting
vite devworking for the Payload app. - Email delivery and redirect confirmations for Payload forms.