Skip to content

Deployment Runbook

import { Steps, Aside, Tabs, TabItem } from ‘@astrojs/starlight/components’;

Standard Deployment (Automated)

All deployments run automatically through Vercel + GitHub Actions. The pipeline is:

feature/* → develop → staging → main
│ │ │
Preview Staging Production

No manual intervention required for standard deployments.

Manual Deployment (Emergency)

1. Go to Vercel project → Deployments 2. Find the target deployment 3. Click "..." → "Redeploy" ```bash npm i -g vercel vercel --prod=false # staging vercel --prod # production ```

Rollback

Option 1: Vercel Instant Rollback (< 60 seconds)

  1. Vercel dashboard → Deployments
  2. Find last known-good deployment
  3. Click “Promote to Production”
  4. Verify: curl -I https://brettjohnson.xyz

Option 2: Git Revert

Terminal window
git checkout main
git revert <bad-commit-sha> --no-edit
git push origin main
# Triggers automatic redeploy + semantic-release PATCH bump

Post-Deployment Verification

Terminal window
# HTTP status check
curl -I https://brettjohnson.xyz
# All key pages
for page in "" "speaking" "consulting" "podcast" "media" "contact"; do
curl -s -o /dev/null -w "%{http_code} /$page\n" "https://brettjohnson.xyz/$page"
done
# API health
curl https://api.brettjohnson.xyz/api/status

Also check:

  • Sentry for new errors (wait 5 min post-deploy)
  • Vercel Analytics for anomalous error rates

DNS Cutover (Launch Day)

1. Confirm Vercel production deployment is ready and healthy
  1. In Cloudflare DNS, verify CNAME records point to Vercel

  2. Test DNS propagation from external network:

    Terminal window
    nslookup brettjohnson.xyz 8.8.8.8
  3. Verify HTTPS is working:

    Terminal window
    curl -I https://brettjohnson.xyz
  4. Confirm old holding page is no longer serving

DNS propagation is near-instant with Cloudflare (< 1 minute, proxied).

Pre-Launch Checklist

  • Brett has approved all copy
  • All 8 milestones complete in ROADMAP.md
  • Lighthouse ≥ 90 (all pages, mobile + desktop)
  • securityheaders.com grade: A+
  • Forms tested end-to-end (Supabase row + email + HubSpot)
  • Media kit download tested (email + signed URL)
  • Calendly embed loads on /contact
  • 404 page renders correctly
  • sitemap.xml and robots.txt valid
  • OG images render in Slack/Twitter preview
  • SSL certificate valid (brettjohnson.xyz + www.)
  • HSTS header present
  • Sentry receiving events
  • Plausible receiving pageviews
  • Uptime alert tested