// Internal — Do Not Share

48-Hour Upgrade — Fulfillment SOP

Owner: Delivery Lead

Version: 1.0 — May 2026

Goal: Ship every 48h engagement on time, consistent quality, zero scope creep.

0. Definitions

  • T0 — the moment the kickoff checklist is 100% complete. The 48-hour clock starts here, not at contract signature.
  • Build window — T0 → T0 + 48h. Two contiguous business days.
  • Polish window — one 4-hour revision block within 5 business days of delivery.
  • Tier 01 / 02 / 03 — Launch Page ($2.4k) / Marketing Site ($4.8k) / Devtool Hub ($8.5k).

1. Pipeline Stages

Lead → Qualify → Scope Call → Contract → Kickoff (T0) →
Build (48h) → QA → Deliver → Polish (4h) → Handover → 14-day Warranty

Every stage has a defined entry condition, exit condition, owner, and artifact.

2. Stage Details

2.1 Qualify (≤ 24h after inbound)

  • Owner: Founder / sales
  • Entry: New row in leads table or /check scan with email captured.
  • Auto-reply fires via lead-auto-reply.
  • Score: budget tier present? AI/devtool/agent ICP? Live URL?
  • If hot (tier_02+ and ICP match), trigger lead-hot-notification.
  • Exit: Lead tagged qualified or disqualified.

2.2 Scope Call (30 min, Cal.com)

  • 5 min — confirm ICP fit, current pain.
  • 10 min — walk the readiness report (score + top 3 gaps).
  • 10 min — propose tier + name a kickoff date.
  • 5 min — answer pricing/process Qs; send contract link before hangup.
  • Exit: Contract sent or explicit no.

2.3 Contract & Payment

PayPal checkout at /checkout. No design work begins before payment clears for tier_01/02. Tier_03 may start at 50% deposit. Exit: PayPal webhook → orders row.

2.4 Kickoff — Pre-T0 Checklist

The 48-hour clock does NOT start until every blocking box below is checked. Single biggest predictor of on-time delivery.

#ItemSourceBlocking?
1Final copy (hero, sections, FAQ, footer)Client Google DocYes
2Brand assets (logo SVG, hexes, fonts)Client uploadYes
33–5 reference sitesScope call notesYes
4Hosting target + DNS access (or staging consent)ClientYes
5Domain decision (final or temporary)ClientNo (warn)
6Analytics + form destinationsClientNo
7Legal pages (or use template)ClientNo

Send the Kickoff Pack email the moment payment clears. Chase missing items every 24h. Do not start building partial scope — that is how 48h slips to 96h. Exit: checklist complete → orders.kickoff_at = now() → T0 starts.

2.5 Build Window — Phase A (Hours 0–6): Architecture

  • Create repo from grow-template-tier-{01|02|03}.
  • Draft route map and head() metadata for every route.
  • Stub llms.txt, robots.txt, sitemap.xml, rss.xml.
  • JSON-LD: Organization, WebSite, Service minimum; add Product, FAQPage, BreadcrumbList per tier.
  • Checkpoint: bun run build is green.

Phase B (Hours 6–24): Design + Build

  • Hero + 1 hero variant (A/B switch, off by default).
  • Section order: hero → social proof → core value → features → pricing/CTA → FAQ → footer.
  • Copy lives in route files or src/content/, never inline.
  • Semantic tokens only. No hex in components.
  • Checkpoint at hour 24: every section visible desktop + mobile, no Lorem.

Phase C (Hours 24–40): Agent-Readiness Pass

This is the differentiator. Do not skip.

  • Single <h1> per route, semantic section/article/nav.
  • JSON-LD validates with zero errors.
  • llms.txt summarizes site purpose + key URLs.
  • OpenGraph 1200×630 per route; twitter:card = summary_large_image.
  • Canonical tag on every route.
  • sitemap.xml includes every public route with lastmod.
  • Lighthouse mobile: SEO ≥ 95, A11y ≥ 95, Perf ≥ 85.
  • Internal /check score ≥ 85 on staged URL.

Phase D (Hours 40–48): QA + Deploy

  • bun run build — zero warnings.
  • Click every CTA, form, external link (new tab + rel="noopener").
  • Test forms end-to-end: Supabase row + confirmation email + hot-lead ping.
  • Real-device test: iPhone Safari + Android Chrome.
  • Deploy to client host. Verify DNS, SSL, www redirect.
  • Verify analytics fires on production.
  • Exit: Live URL, all green, orders.delivered_at logged.

2.6 Delivery Email (T0 + 48h sharp)

  • Live URL.
  • GitHub repo invite.
  • Loom walkthrough ≤ 5 min: edit copy, deploy, forms, analytics.
  • Polish Form (Typeform/Cal) — deadline: 5 business days.
  • Warranty terms (14 days, genuine bugs only).

2.7 Polish Window (one 4-hour block)

Collect ALL revision notes in writing BEFORE the block starts. No live "while you're in there" additions. Out of scope (quote separately): new sections, new routes, copy rewrites > 30%, new integrations, new design directions. Exit: client sign-off OR auto-close at day 5 of silence.

2.8 14-Day Warranty

Free: genuine bugs, broken links, regressions caused by us. Not free: new requests, content changes, third-party breakage. Log every fix in orders.warranty_log.

3. Quality Bars (non-negotiable)

A build cannot ship unless ALL are true:

  • bun run build passes, zero TS errors.
  • Internal /check score ≥ 85.
  • Lighthouse mobile: SEO ≥ 95, A11y ≥ 95, Perf ≥ 85.
  • No console.error in production.
  • Every route: unique <title> and meta description < 160 chars.
  • Every image has alt. Every input has <label>.
  • No localhost, lorem, placeholder, TODO in shipped HTML.

4. Roles & RACI

ActivityFounderBuilderOps
Qualify leadA/RC
Scope callA/RC
Contract + invoiceAR
Kickoff packACR
Build (48h)CA/R
QA passAR
DeployCA/R
Delivery emailACR
Polish blockCA/R
WarrantyCA/R

R = responsible, A = accountable, C = consulted.

5. Tooling — Where Things Live

ConcernTool / Location
Leads, orders, scansSupabase (leads, orders, scans)
PaymentsPayPal — /checkout
CallsCal.com — cal.com/grow-contact/intro
EmailServer routes under /lovable/email/*
Internal templatesgrow-template-tier-{01|02|03} repos
Site QA/check + Lighthouse CI
DeploysClient hosting; we hold no prod secrets

6. Failure Modes & Mitigations

FailureCauseMitigation
48h slipsStarted without full kickoff packRefuse to start T0; document gating items
Polish balloonsNo written revision listForce Typeform submission before block
Client ghosts mid-buildNo async checkpointSend hour-24 preview link + Loom
Warranty abuse'Bug' is a new featureRefer to written warranty terms
Copy rewrites loopCopy not signed off at kickoffMark copy FINAL in writing before T0
Lighthouse regresses on deployClient host config differsDeploy then re-run Lighthouse on prod

7. Continuous Improvement

After every project: 15-minute retro logged in retros/YYYY-MM-DD-{client}.md. Anything that slipped goes into either the kickoff checklist (client input), the QA checklist (build miss), or this SOP (process gap). Bump the version number at the top whenever the process changes.

Source: docs/sop-48h-upgrade.md

This page is noindex and not linked from public nav.