---
title: Getting started
description: Install the workspace, run the checks, and start a reference site locally.
---

Launch is a plain pnpm workspace. You need Node 24 (the version is in `.nvmrc`) and the pnpm version pinned in the root `package.json`.

```bash
git clone https://github.com/patronage/launch.git
cd launch
pnpm install
pnpm verify
```

`pnpm verify` is the full gate: a frozen install, then lint, typecheck and tests across the workspace. Run it before you open a pull request. There are no GitHub Actions; Cloudflare Workers Builds runs the same command before it deploys.

## Run a reference site

Each reference seeds the same demo content. Each app's README has the details.

**Headless WordPress.** WordPress in Docker, and the vinext front-end in local workerd:

```bash
pnpm --filter cms-wordpress-headless run setup   # WordPress, demo content and .env.local
pnpm --filter web-wordpress dev                  # http://localhost:3000
```

**Payload.** One app on local D1 and R2. `vite dev` does not work with Payload yet, so build and preview:

```bash
cd apps/payload
cp .env.example .env                        # then set PAYLOAD_SECRET in .env
cp .env .dev.vars                           # the Worker reads its secrets from .dev.vars
pnpm payload migrate
pnpm seed
pnpm build && pnpm preview                  # http://localhost:4173/admin
```

**Traditional WordPress.** A Timber theme renders the site, in Docker:

```bash
pnpm --filter cms-wordpress-timber run setup   # http://localhost:8090
```

## Check a change in the browser

`pnpm verify` checks dependencies, lint, types and tests, not that a page looks right. Before you open a pull request that changes pages, sections, forms or the admin, drive the change in a real browser and keep the screenshots. The repo's `launch-verify` agent skill does this for the Payload app and the headless WordPress front-end:

```bash
node .agents/skills/launch-verify/scripts/verify.ts --help
```

## Run these docs

```bash
pnpm --filter docs-site dev     # http://localhost:4321
pnpm --filter docs-site build   # static site in apps/docs-site/dist
```

## Dependencies

Versions are pinned exactly, and pnpm only installs versions older than the `minimumReleaseAge` in `pnpm-workspace.yaml`. Update them with the `deps:*` scripts in the root `package.json`, which read the same window.

## Rules for contributors

The repo is public, so everything in it must be fit to publish. The short version, from `AGENTS.md`:

- No third-party plugin or vendor code. WordPress plugins and themes come in through Composer; only Patronage's own `patronage-*` code is committed.
- No client references, anywhere. Demo content is invented.
- No Wrangler config files and no GitHub Actions. See [Deploying to Workers](/deploy).
- Shared UI takes plain props and knows nothing about any CMS.
- A pull request that changes what a reader of these docs would run, deploy or decide updates these docs in the same pull request. Spike notes and decision records publish themselves; everything else is a page under `apps/docs-site/docs`.
