Client delivery: intake → launch
This is the full path a client takes through the system, and the steps Ahmed runs to deliver their site.
The pipeline at a glance
Section titled “The pipeline at a glance”intake form ──▶ Build Brief ──▶ clone template ──▶ build ──▶ deploy preview (client) (admin) (sitecrate-presence) (Claude Code) ({slug}.sitecrate.ca) │ live domain ◀── approve ◀── review ◀── set preview_url ◀──────────────┘ (Netlify) (client) (client) (admin)The stage column on the project row tracks where the client is:
new → brief → building → review → live.
Pre-built infrastructure
Section titled “Pre-built infrastructure”This is already live — nothing to set up per client:
- Cloudflare wildcard DNS —
*.sitecrate.caCNAME →apex-loadbalancer.netlify.com. Any new client or staging subdomain routes automatically; zero DNS changes per client. - Template repo —
sitecrate-presence, the Tier 1 starting point. - Staging Supabase schema —
staging.projectsis live and exposed via PostgREST; staging builds read/write there, prod never sees the data.
Step-by-step
Section titled “Step-by-step”1 — Get the build brief
Section titled “1 — Get the build brief”In admin.sitecrate.ca → open the project → ⚡ Build brief. It copies the git
clone command, the Claude Code prompt (pre-filled with intake data), and the
preview URL.
2 — Clone and build
Section titled “2 — Clone and build”git clone git@github.com:asabryy/sitecrate-presence.git sitecrate-{slug}-presencecd sitecrate-{slug}-presencegit remote set-url origin git@github.com:asabryy/sitecrate-{slug}-presence.git# Create the GitHub repo first:# gh repo create asabryy/sitecrate-{slug}-presence --private# Then paste the Claude Code prompt — it fills client.config.js and builds the sections.3 — Deploy
Section titled “3 — Deploy”npm run build # verify zero errorsnetlify init # creates and links a new Netlify sitenetlify deploy --prod --build # client sites use manual CLI deploy — no CI/CD4 — Assign the preview subdomain
Section titled “4 — Assign the preview subdomain”Netlify dashboard → Domain management → add {slug}.sitecrate.ca. SSL
auto-provisions because the wildcard DNS is already live.
5 — Set the preview URL in the admin
Section titled “5 — Set the preview URL in the admin”admin.sitecrate.ca → project → Detail panel → slug field → Set .sitecrate.ca.
This writes https://{slug}.sitecrate.ca to preview_url.
6 — Client review → launch
Section titled “6 — Client review → launch”Move the stage to review → the review email auto-sends (requires the
preview URL to be set — otherwise the send is blocked with HTTP 400). The client
visits their status page, reviews, and either leaves feedback or approves.
To launch: swap the preview subdomain for the client’s real domain in the
Netlify dashboard, and move the stage to live (which fires the launch email).
Environments
Section titled “Environments”| Environment | URL | Supabase schema |
|---|---|---|
| Production | sitecrate.ca / admin.sitecrate.ca | public |
| Staging | staging.sitecrate.ca / staging-admin.sitecrate.ca | staging |
Staging deploys automatically on every PR push — but only if lint + build pass first. See Development & CI/CD.
The golden template rule
Section titled “The golden template rule”When building a client site, all client strings live in
src/client.config.js — nowhere else. See
sitecrate-presence for the full config shape, theming
model, and the pre-launch checklist.