Release Process
import { Steps, Aside } from ‘@astrojs/starlight/components’;
Promotion Pipeline
feature/* ──PR──► develop ──PR──► staging ──PR──► main │ │ │ Preview Staging Production (Vercel) staging.brettjohnson.xyz brettjohnson.xyzStandard Feature Release
git checkout develop && git pull origin developgit checkout -b feature/my-featuregit commit -m "feat(www): add speaking services grid"git push -u origin feature/my-feature-
Open PR → develop
Requirements before merge:
- All CI checks pass (lint, type-check, test, build)
- Vercel preview deploy is functional
-
Promote to staging (PR:
develop → staging)Staging CI adds:
- Playwright E2E test suite
- Lighthouse audit (scores must be ≥ 90)
-
Promote to production (PR:
staging → main)On merge:
- Full CI runs
semantic-releasedetermines version from commit history- GitHub Release created
- Vercel deploys to
brettjohnson.xyz
Hotfix Release
git checkout main && git pull origin maingit checkout -b hotfix/broken-booking-formgit commit -m "fix(api): correct Zod schema for budget field"git push -u origin hotfix/broken-booking-form# Open PR: hotfix → main# Open PR: hotfix → developEmergency Rollback
Option 1: Vercel Instant Rollback (preferred, < 60s)
- Vercel dashboard → Deployments
- Find last known-good deployment
- Click “Promote to Production”
Option 2: Git Revert
git checkout maingit revert <bad-commit-hash> --no-editgit push origin mainPre-Launch Checklist (v1.0.0)
- Brett has approved all copy
- All 8 milestones complete in ROADMAP.md
- Lighthouse ≥ 90 on all pages (mobile + desktop)
-
securityheaders.comgrade: A+ - All forms tested end-to-end
- Media kit download works (email receipt + signed URL)
- Calendly embed loads on
/contact -
sitemap.xmlandrobots.txtverified - Domain cutover confirmed with Cloudflare
See Deployment Runbook for step-by-step DNS cutover instructions.