# R3 — Client onboarding, signed to live

**The executable form of `docs/DEPLOYMENT.md`.** That document explains the SOP; this one is the checklist you tick while doing it, per client, with the hour boxes that feed the kill-criterion ledger.

**Copy per client** → `clients/<client_id>/ONBOARDING-YYYY-MM-DD.md`.

**Target: ≤ 2 weeks, and a falling hour count.** `docs/SPEC.md` D4 sets the trajectory: pilot 1 ≈ 25h, pilot 3 ≤ 12h, post-template ≤ 8h. If pilot 3 is not meaningfully cheaper than pilot 1, the template library is not working and that is the finding — report it, don't absorb it.

| Client | | `client_id` | | Vertical | | Market | |
|---|---|---|---|---|---|---|---|
| Tier | | Started | | Target live | | Template version | |

---

## Stage 0 — Preconditions [—]

☐ Signed pilot agreement on file — price, tier, **minute cap stated**, month-to-month, recording disclosure, rollback promise
☐ Intake form complete and **owner-confirmed in writing**
☐ Vertical template exists for this business. *If not: that is `C-17`, 6h, and it happens before onboarding — never improvise a first-of-vertical config on a live client*
☐ Market recording policy acknowledged by the owner (`docs/SECURITY.md` §2)
☐ Language(s) requested are in the **LIVE** column of `docs/COMPATIBILITY.md` — if they asked for Bangla, this is where you say no, honestly, and offer English + WhatsApp text

**Intake must cover:** legal name + greeting name · hours (incl. weekend pattern and holidays) · address and landmark · services/menu with prices · booking rules — durations, buffers, staff · **escalation phone + staffed hours, captured separately from opening hours** · owner's WhatsApp for alerts · calendar in use, or "none" → the O5 path · tone/voice preference.

Hours: ______

## Stage 1 — Number provisioning [1–2h]

| Market | Path |
|---|---|
| **US** | Buy a local number in their area code (~$2/mo). Client sets **conditional forwarding**: busy / no-answer-after-N-rings / after-hours → our number. Their number is untouched (D6) |
| **BD** | **WhatsApp Business Calling** on their WhatsApp Business number. Forwarding from a GP/Robi line only if the client accepts the international charges — say the cost out loud before they agree |
| **Gulf** | WhatsApp Business Calling only. **No UAE VoIP numbers** — regulatory, non-negotiable |

☐ Number acquired / WhatsApp entry point ready
☐ **Forwarding activation code recorded in the client runbook**
☐ **Deactivation code recorded — this is the rollback plan, not a footnote**
☐ Both codes **tested**, not just written down

Hours: ______

## Stage 2 — Platform configuration [3–5h, from template]

☐ Cloned the vertical template into a client-named workspace — **never configured from scratch**
☐ Template version recorded: __________
☐ Knowledge pack filled from the intake. **Owner-confirmed facts only** — no scraping their old site for prices
☐ **Searched the resolved prompt for `{{`** — zero placeholders survive
☐ Voice + language set; language restricted to the LIVE column
☐ Business-hours schedule set, correct weekend pattern (BD: Fri · Gulf: Fri–Sat · US: Sat–Sun) + holidays
☐ **Staffed hours set separately from opening hours** — they differ, and this is the most-missed field
☐ Recording/transcript policy set per market
☐ Escalation targets configured (D8), all four triggers present
☐ Config exported back to `clients/<client_id>/config/` (portability rule, `docs/API_CONTRACT.md` §6)

Hours: ______

## Stage 3 — Integrations [2–4h]

☐ Calendar connected — **platform-native tool first** (`docs/API_CONTRACT.md` §2 pattern 1). If you end up on pattern 3, write down why in the runbook
☐ Lead webhook per §3, standard payload, correct destination
☐ Daily-summary flow — **parameterize the shared n8n flow, do not fork it.** A bespoke flow per client is how a 2h/month client becomes a 10h/month client
☐ Test booking sent end-to-end and **verified at the client's side, in their calendar, by you looking at it**
☐ Test lead verified at the client's destination
☐ Confirmation message received on a real handset
☐ Credentials in the vault as `p13/<client_id>/<system>` — **none in prompt text**

Hours: ______

## Stage 4 — QA gate [4h]

☐ Full 20-call script run on the client instance → `qa/20-call-script.md`
☐ **All-pass sheet filed** at `clients/<client_id>/qa/YYYY-MM-DD.md`
☐ Owner listened to ≥ 3 calls and **approved voice and tone in writing** (a WhatsApp message counts)

> **No pass, no go-live. No exceptions, including client impatience** (`docs/DEPLOYMENT.md` Stage 4). A client pushing to launch early is asking you to put an untested assistant in front of their customers under their name.

Hours: ______

## Stage 5 — Go-live [1–2h, quiet weekday morning]

☐ **`runbooks/R4-go-live-gate.md` walked top to bottom, every box**
☐ Forwarding activated / WhatsApp entry point published
☐ Two live smoke calls from an outside line: one booking, one human transfer — both clean
☐ **Rollback rehearsed by the owner** — *they* dial the deactivation code, see calls revert, re-activate. They must experience undoing this alone in 30 seconds
☐ One-page handover delivered (`C-15`): what she does, the minute cap, how to reach us, how to pause her, the rollback code
☐ Owner **says back** how to pause it and how to reach us

Hours: ______

## Stage 6 — Watch week [30m/day × 5]

☐ Day 1 — **every** transcript reviewed, not a sample · fixes same day
☐ Day 2 ☐ Day 3 ☐ Day 4 ☐ Day 5
☐ End-of-week wins summary to the owner — *"this is the first retention conversation, whether or not it feels like one"*
☐ Week-1 findings folded back into the **template**, not just this client's config. A gap found here exists in every future clone

Hours: ______

---

## Close-out

☐ **Total setup hours: ______ h** → `docs/PROGRESS.md` hours ledger. This is the kill-criterion baseline for this client
☐ Compared against the previous pilot: ______ h. **Falling?** ☐ yes ☐ no → if no, say so plainly in PROGRESS findings
☐ `clients/<client_id>/RUNBOOK.md` complete — *"if a runbook is current, a competent stranger can service the client"*
☐ `docs/FEATURES.md` rows flipped to ✅ with this client as evidence, **same day**
☐ `docs/PROGRESS.md` go-live line added with date
☐ Week-1 review slots blocked in the calendar
☐ Margin ledger row opened in `docs/PROGRESS.md`

## Rollback — any time, any reason [≤ 30 min]

1. Dial the forwarding deactivation code (US/BD), or unpublish the WhatsApp call entry → **calls flow exactly as before us, immediately**.
2. Pause the platform agent — stops minute spend. Keep the number ≥ 30 days in case they come back.
3. Data handling per `docs/SECURITY.md` §5. Offer exports.
4. **Log the reason in `docs/PROGRESS.md`.** Churn reasons are P8-gate evidence — treat them as findings, not embarrassments.
