SOP: deploying a site change
Every marketing site deploys the same way. Pushing to main is a live production deploy —
treat it accordingly.
flowchart TD A[Make the change on the staging branch] --> B[Push staging] B --> C[Cloudflare Pages builds a preview<br/>site-name.pages.dev] C --> D{Preview looks right?<br/>Forms tested if touched?} D -- No --> A D -- Yes --> E{Customer-facing change?} E -- Yes --> F[Get explicit owner approval] E -- "Internal/trivial" --> G F --> G[Merge staging into main and push] G --> H[Cloudflare builds and deploys PRODUCTION] H --> I[Spot-check the live site]The rules
Section titled “The rules”- Two branches only:
main+staging. Never create feature/fix/throwaway branches — they drift and cause mistakes. Delete strays on sight.mainis the source of truth;stagingis always a clean copy of it plus the change being verified. - Verify on the preview first (
*.pages.dev), or locally withnpm run build && npm run preview. Never push tomainunverified. - Production pushes are approval-gated. “Push” or “deploy to staging” never implies production. When in doubt, ask.
- Cloudflare runs
npm run build(outputdist/,NODE_VERSION=20). Never commitdist/ornode_modules/. - Env-var changes need a redeploy. Cloudflare Pages Functions only bind new env vars on a fresh deployment — push an empty commit if there’s nothing else to ship.
Verb glossary (so nobody miscommunicates)
Section titled “Verb glossary (so nobody miscommunicates)”| You say | It means |
|---|---|
| ”push” / “push live” | Commit, push, and deploy per this SOP |
| ”deploy” | Deploy only — the code is already pushed. If the environment is ambiguous, ask; never assume production. |
After deploying
Section titled “After deploying”- Spot-check the live page you changed.
- If the quote form was touched: submit a test lead end-to-end (email + Podium text + dashboard lead), then delete the test lead from the dashboard.