@elitedcs/ghl-mcp 3.70.0 → 3.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/README.md +8 -5
- package/dist/capture-helper.js +10 -1
- package/dist/index.js +7479 -1552
- package/guide/guide.html +2 -1
- package/package.json +2 -2
- package/skills/blueprint/SKILL.md +2 -0
- package/skills/blueprint/examples/medspa-approval-view.md +58 -53
- package/skills/blueprint/examples/medspa-brief.json +70 -8
- package/skills/blueprint/examples/medspa-build-plan.json +1435 -123
- package/skills/blueprint/examples/medspa-dry-run-report.md +2 -0
- package/skills/blueprint/examples/sample-approval-view.md +20 -61
- package/skills/blueprint/examples/sample-brief.json +95 -7
- package/skills/blueprint/examples/sample-build-plan.json +1448 -119
- package/skills/blueprint/examples/validate-plan.cjs +195 -13
- package/skills/blueprint/presets/clinic-launch-a2p.preset.json +1 -0
- package/skills/blueprint/presets/clinic.md +60 -0
- package/skills/blueprint/presets/clinic.preset.json +1737 -0
- package/skills/blueprint/presets/coach.md +58 -0
- package/skills/blueprint/presets/coach.preset.json +1723 -0
- package/skills/blueprint/presets/ecommerce.md +54 -0
- package/skills/blueprint/presets/ecommerce.preset.json +1287 -0
- package/skills/blueprint/presets/generic-client.md +49 -27
- package/skills/blueprint/presets/generic-client.preset.json +1552 -122
- package/skills/blueprint/presets/local-service.md +58 -0
- package/skills/blueprint/presets/local-service.preset.json +1733 -0
- package/skills/blueprint/presets/med-spa.md +47 -48
- package/skills/blueprint/presets/med-spa.preset.json +1557 -111
- package/skills/blueprint/references/brief-schema.md +48 -1
- package/skills/blueprint/references/build-plan-schema.md +66 -5
- package/skills/blueprint/references/copy-guide.md +167 -0
- package/skills/blueprint/references/intake-question-set.md +64 -3
- package/skills/blueprint/references/preset-format.md +97 -51
- package/templates/action-schemas.json +12 -0
|
@@ -1,59 +1,58 @@
|
|
|
1
1
|
# Preset: Med Spa (default)
|
|
2
2
|
|
|
3
|
-
**File:** `med-spa.preset.json` · **id:** `med_spa` · **version:**
|
|
4
|
-
**Source:** ghl-command showcase Modules 0-7 + the proven Bliss Med Spa / Lux Bio Therapy builds.
|
|
5
|
-
**Status:** Live-validated 2026-06-25 — `validate_build_plan` valid (48 refs, 0 dead) and
|
|
6
|
-
`apply_build_plan` dry_run clean (40 objects, 28 actions auto-built, 0 need-content,
|
|
7
|
-
0 manual action steps, every trigger auto-built). See `examples/medspa-dry-run-report.md`.
|
|
3
|
+
**File:** `med-spa.preset.json` · **id:** `med_spa` · **version:** 2.0.0 · **default:** yes
|
|
4
|
+
**Source:** ghl-command showcase Modules 0-7 + the proven Bliss Med Spa / Lux Bio Therapy builds; v2 depth per the owner review of 2026-08-26 (every workflow must do real work; nurture never under 30 days; copy to the Gary V / Hormozi standard in references/copy-guide.md).
|
|
8
5
|
|
|
9
6
|
## When it is selected
|
|
10
|
-
The default reference preset, and the routing target for med-spa / aesthetics business
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
22
|
-
- **1 intake form** — first/last/email/phone (phone required) + Service Interest (mapped to the custom field).
|
|
23
|
-
- **1 funnel** — Free Assessment opt-in (→ form, with the A2P-compliant consent block) + Thank You (booking CTA).* Page content filled from `funnel-page-content-template.md`.
|
|
24
|
-
- **5 emails + 3 SMS** — welcome, education nurture, consult reminder*, no-show*, win-back; speed-to-lead / consult-reminder / no-show texts (SMS only when `channels.sms`).
|
|
25
|
-
- **5 workflows** — Speed-to-Lead (form_submission), Lead Nurture (contact_tag), Replied → Stop & Route (customer_reply), New Patient Onboarding* (appointment confirmed; appointment-relative reminder via `wait_appointment`), No-Show Win-back* (appointment noshow; `find_opportunity` branch → found: move opp back + text; notFound: win-back email).
|
|
26
|
-
- **Handoffs (conditional)** — add-staff* (team only), calendar-connect, A2P, Stripe, email-domain.
|
|
7
|
+
The default reference preset, and the routing target for med-spa / aesthetics business types (`selectors.businessTypes`) and the `med_spa` / `medspa` / `aesthetics` / `injectables` aliases. A brief whose `business_type` matches no preset resolves here.
|
|
8
|
+
|
|
9
|
+
## What it builds (skeleton, v2 depth)
|
|
10
|
+
- **Users** — one per `brief.team.staff[]` entry. Every alert, task and assignment step points at a `userRef`; in the skeleton that is the role placeholder `user.owner`, resolved at fill time from `team.notifyName` (alerts) and `team.callsName` (tasks, assignment). No staff yet → the steps stay, pointed at `user.__pending__`, and the build reports them as waiting.
|
|
11
|
+
- **1 pipeline** — "Patient Journey": New Lead → Contacted → Consult Booked* → Showed* → Treated → Member / Rebooked → Lost. Overridden by `goal.salesStages` when the brief supplies them.
|
|
12
|
+
- **6 custom fields** — Lead Source, Service Interest, Top Concern, Appointment Date*, Consult Deposit Paid*, Estimated Lifetime Value.
|
|
13
|
+
- **24 tags** — source, lifecycle, the hand-off trigger tags (`nurture-start`, `winback-start`, `missed-call`, `no-show`), and interest tags mirrored from the interest field.
|
|
14
|
+
- **4 custom values** — business_name, business_phone, owner_first_name, booking_link. Every message reads business name / phone / signature / links from these, so the copy stays right when details change.
|
|
15
|
+
- **1 calendar** — Consultation (round_robin, Mon-Fri 9-17 default, 30-minute slots, `teamMemberRefs` → the plan users).*
|
|
16
|
+
- **1 intake form + 1 funnel** — "New Client Inquiry" (first/last/email/phone required + Service Interest) and a Free Skin Assessment opt-in page with the A2P consent block, plus a Thank You page with the booking widget.
|
|
17
|
+
- **15 email + 17 SMS templates** — complete, send-ready copy written to `references/copy-guide.md`. The build stage rewrites every one from the real brief (offer, pain points, objections, prices, lead magnet) and keeps the cadence, the single CTA and the merge fields.
|
|
18
|
+
- **8 workflows, 32 customer touches** — see the table.
|
|
27
19
|
|
|
28
20
|
\* conditional on `goal.bookingNeeded == true`.
|
|
29
21
|
|
|
30
|
-
##
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- **
|
|
44
|
-
|
|
22
|
+
## Workflows
|
|
23
|
+
|
|
24
|
+
| Workflow | Trigger | Actions | Touches | Span of waits | Stops on reply |
|
|
25
|
+
|---|---|---|---|---|---|
|
|
26
|
+
| Speed to Lead | form_submission | 15 | 5 | 1.1 days | yes |
|
|
27
|
+
| Missed Call Text-Back | call_status (missed: no-answer/busy/voicemail) | 7 | 2 | 1 h | yes |
|
|
28
|
+
| Lead Nurture (30 days) | contact_tag (tag.nurture_start) | 28 | 11 | 31 days | yes |
|
|
29
|
+
| Replied - Stop & Route | customer_reply | 9 | 0 | instant | no |
|
|
30
|
+
| Win-back (30 days) | contact_tag (tag.winback_start) | 13 | 5 | 31 days | yes |
|
|
31
|
+
| Consult Booked - Confirm & Move | appointment (confirmed) | 8 | 2 | instant | no |
|
|
32
|
+
| Consult Reminders | appointment (confirmed) | 5 | 3 | instant | no |
|
|
33
|
+
| No-Show Rescue | appointment (noshow) | 14 | 4 | 7 days | yes |
|
|
34
|
+
|
|
35
|
+
- **Speed to Lead** (15 actions): instant text + email, opportunity card, the contact assigned to whoever takes calls, alert to a real person, a call task due today, a 2nd touch at 20 minutes, a 3rd at 3 hours, a 4th and 5th by the next day, then the hand-off tag `nurture-start` as the last action.
|
|
36
|
+
- **Lead Nurture** (28 actions, 11 touches, 31 days of waits): give, give, ask. Ends with `lifecycle-lapsed` + the `winback-start` hand-off.
|
|
37
|
+
- **Win-back** (13 actions, 5 touches, 31 days of waits): one reason to come back per message, then `lifecycle-lost`.
|
|
38
|
+
- **Replied - Stop & Route**: the exit workflow. Pulls the contact out of every sequence, notes it, marks contacted, alerts a person and creates a 15-minute reply task.
|
|
39
|
+
- **Missed Call Text-Back**: `call_status` trigger scoped to no-answer / busy / voicemail, inbound. Text within seconds, tag, alert, call-back task, one more text an hour later.
|
|
40
|
+
- **Consultation → Confirm & Move, Reminders, No-Show Rescue**: booking stops every sequence and moves (or creates) the opportunity; reminders at 24 h and 2 h; a no-show gets a same-day call task, text and email, two more touches, then hands off to Win-back and moves the card back to Contacted.
|
|
41
|
+
|
|
42
|
+
### Why sequences hand off with a tag, not add_to_workflow
|
|
43
|
+
Every hand-off is `add_contact_tag` + a `contact_tag` trigger. Both halves are live-proven shapes captured from working GHL workflows (`templates/action-schemas.json`). `add_to_workflow` has no captured native shape there and has not been proven at runtime, so a preset may not use it. Each sequence removes its own trigger tag as its first action so a later hand-off can start it again.
|
|
45
44
|
|
|
46
45
|
## How the brief shapes it
|
|
47
46
|
| Brief signal | Effect |
|
|
48
47
|
|---|---|
|
|
49
|
-
| `goal.salesStages` present | replaces the default pipeline stages |
|
|
50
|
-
| `goal.bookingNeeded == false` | drops the calendar,
|
|
51
|
-
| `channels.sms == true` | keeps SMS
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
| `
|
|
55
|
-
| `business.name`, `offer.*`, `audience.*`, `extended.*` | fill object names
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
| `goal.salesStages` present | replaces the default pipeline stages (workflow stage refs are mapped to the nearest equivalent) |
|
|
49
|
+
| `goal.bookingNeeded == false` | drops the calendar, booking stage/tag/fields, the three appointment workflows and the calendar handoffs |
|
|
50
|
+
| `channels.sms == true` | keeps SMS templates, the send_sms actions, Missed Call Text-Back and the A2P gating; otherwise they drop (the email-only nurture still spans 31 days) |
|
|
51
|
+
| staff answers present | fills `users`; every `userRef` resolves to a real person |
|
|
52
|
+
| staff empty | every `userRef` → `user.__pending__`; the steps stay; `handoff.add_staff` holds those workflows DRAFT |
|
|
53
|
+
| `flags` | `needs_a2p` / `stripe_not_connected` / `calendar_oauth_needed` / `email_domain_needed` add the matching handoff |
|
|
54
|
+
| `business.name`, `offer.*`, `audience.*`, `extended.*` | fill object names, custom values and ground every template rewrite |
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
## Copy notes
|
|
58
|
+
Written for the fear that drives every med-spa lead: looking "done". The through-line is "refreshed, not overdone": treat less first, adjust at two weeks, written plan with prices before anything happens. Texts ask one-word questions (lines / volume / texture; mornings / afternoons; YES / later). Price is handled head-on on day 14, cost of waiting on day 20, and the decision sheet on day 27. No client results are claimed; the build stage adds real ones only if the brief supplies them.
|