Skip to content

Client delivery: intake → launch

This is the full path a client takes through the system, and the steps Ahmed runs to deliver their site.

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.

This is already live — nothing to set up per client:

  • Cloudflare wildcard DNS*.sitecrate.ca CNAME → apex-loadbalancer.netlify.com. Any new client or staging subdomain routes automatically; zero DNS changes per client.
  • Template repositecrate-presence, the Tier 1 starting point.
  • Staging Supabase schemastaging.projects is live and exposed via PostgREST; staging builds read/write there, prod never sees the data.

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.

Terminal window
git clone git@github.com:asabryy/sitecrate-presence.git sitecrate-{slug}-presence
cd sitecrate-{slug}-presence
git 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.
Terminal window
npm run build # verify zero errors
netlify init # creates and links a new Netlify site
netlify deploy --prod --build # client sites use manual CLI deploy — no CI/CD

Netlify dashboard → Domain management → add {slug}.sitecrate.ca. SSL auto-provisions because the wildcard DNS is already live.

admin.sitecrate.ca → project → Detail panel → slug field → Set .sitecrate.ca. This writes https://{slug}.sitecrate.ca to preview_url.

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).

EnvironmentURLSupabase schema
Productionsitecrate.ca / admin.sitecrate.capublic
Stagingstaging.sitecrate.ca / staging-admin.sitecrate.castaging

Staging deploys automatically on every PR push — but only if lint + build pass first. See Development & CI/CD.

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.