Implementation inventory
The app builds the full client + advisor experience. The CRM pipeline, custom fields, outbound workflows, and the calculation webhook connection are specified below for manual configuration. Outbound workflows stay disabled until you approve them.
What was built (in this app)
- Four-step mobile-friendly intake at
/7-figure-readiness: profile, dated business snapshot, 27-item owner self-assessment, confirmation. - Owner scorecard with stable keys (
offer_01_owner…ceo_mindset_03_owner); blank = unknown, 0 valid. - Advisor dashboard at
/advisor: separate advisor scores + private evidence per item, verified-items counter (out of 27). - Scoring engine: 9 area averages, overall readiness %, top-3 gaps ranked lowest-first with tie-break in canonical order, "Optimization priorities" label when all ≥ 3.
- Revenue model: monthly pace, gap, wins, held, bookings, qualified leads, paid spend, capacity-shortfall flag, "Needs input" guardrails.
- 90-day plan: three editable sprints, advisor first-sprint confirm/override with reason, sales-path selection, plan approval.
- Client-facing report at
/report/$assessmentId— excludes private evidence and advisor-only notes. - Authenticated calculation endpoint at
/api/readiness/calculate(the external calculation service contract). - Local demo store preserves dated assessments per contact so returning clients keep earlier baselines.
What requires manual configuration (in your sub-account)
- Pipeline "7-Figure Readiness" with stages: New Intake → Advisor Review → Plan Approved → Kickoff Booked → Active Program → Completed.
- Custom fields on the contact/opportunity (see field list below).
- Intake form mapped from the four steps to the custom fields, posting to the create-contact + create-opportunity action.
- Workflows (intake submitted, advisor review completed, plan approved, kickoff booked) — kept in draft/disabled until approved.
- Calculation webhook connection (Make / n8n / server-side) calling
/api/readiness/calculate. - Secret
VULPINE_GAZE_CALC_SECRETstored server-side via the secrets tool; the caller sends it asAuthorization: Bearer ….
Custom field list (create on the opportunity)
| Field key | Type | Notes |
|---|---|---|
| assessment_id | Text | Unique per submission; dedupe key |
| baseline_month | Text | YYYY-MM |
| business_type | Dropdown | Coach | Local Service |
| stage | Pipeline stage | Mirrors pipeline |
| monthly_recognized_revenue | Number | blank = unknown |
| monthly_cash_collected | Number | |
| avg_net_revenue_per_win | Number | |
| active_clients | Number | |
| unique_leads | Number | |
| qualified_leads | Number | |
| booked_appointments | Number | |
| held_appointments | Number | |
| wins | Number | |
| monthly_recurring_revenue | Number | separate from payment plans |
| max_sustainable_new_starts | Number | capacity ceiling |
| annual_revenue_goal | Number | |
| area_score_* (×9) | Number | offer … ceo_mindset |
| overall_readiness_pct | Number | 0–100 |
| top_three_gaps | Text | JSON array |
| revenue_outputs | Text | JSON; wins/held/bookings/leads/spend |
| capacity_shortfall | Boolean | |
| funnel_flags | Text | JSON; advisor review only |
| advisor_evidence_* (×27) | Text | PRIVATE — not on client report |
| advisor_notes | Text | PRIVATE |
| approval_version | Number | increment on approve |
| requires_reapproval | Boolean | |
| sales_path | Dropdown | 5 options |
| sprint_1/2/3_* | Text/Date | gap, deliverable, owner, due, kpi, baseline, target |
Calculation webhook contract
Native workflows cannot reliably validate/rank 9 scores or run the revenue model, so an authenticated Make/n8n/server endpoint calls:
POST /api/readiness/calculate
Authorization: Bearer <VULPINE_GAZE_CALC_SECRET>
Content-Type: application/json
{
"assessmentId": "VGA-...",
"scorecard": {
"ownerScores": { "offer_01_owner": 3, ... },
"advisorScores": { "offer_01_advisor": 3, ... },
"advisorEvidence": { "offer_01_evidence": "Reviewed 3 paid pilots...", ... }
},
"baseline": { "monthlyRecognizedRevenue": 60000, "avgNetRevenuePerWin": 8000, ... },
"scenario": { "annualRecognizedRevenueTarget": 1000000,
"closeRate": 0.25, "showRate": 0.75,
"qualifiedLeadToBookingRate": 0.5,
"maxSustainableNewStartsPerMonth": 7 }
}Response (200, or 422 when review incomplete / input missing):
{
"assessmentId": "VGA-...",
"ok": true,
"scoring": {
"overallReadiness": 58.3,
"areas": [ { "area": "sales", "score": 0, "rounded": 0 }, ... ],
"topThreeGaps": [ { "rank": 1, "area": "sales", "firstAction": "...", "suggestedKpi": "...", "suggestedRole": "Sales Lead" }, ... ],
"isOptimization": false, "verifiedItems": 27, "totalItems": 27, "valid": true, "issues": []
},
"revenueOutputs": { "monthlyRevenuePace": 83333, "newWinsRequired": 8,
"heldAppointments": 32, "bookings": 43, "qualifiedLeads": 86,
"capacityShortfall": true },
"funnelFlags": []
}Idempotency: dedupe on assessmentId + approvalVersion. The response header X-Dedupe-Key carries{assessmentId}::calc.
Workflow specs (keep disabled until approved)
- Intake submitted. Trigger: form submission. Actions: create/match contact → create one opportunity (dedupe on assessment_id) → assign advisor → create one review task (attach funnel flags) → send intake confirmation only via an eligible, consented channel.
- Advisor review completed. Trigger: advisor marks review done. Actions: call calculation webhook → validate 27 scores+evidence → write back 9 area scores, readiness %, top-3 gaps, revenue outputs → keep opportunity in Advisor Review until plan approved. On failure: log assessment_id, surface error to advisor, block the results message.
- Plan approved. Trigger: approval_version increments. Actions: move to Plan Approved → send one client summary + kickoff booking link via eligible channels (dated baseline, top-3, first sprint, KPI target; exclude private evidence). If scores/evidence change after approval, set requires_reapproval before resending.
- Kickoff booked. Trigger: kickoff booking confirmed. Actions: move to Kickoff Booked → assign internal kickoff checklist → schedule internal review tasks at days 30/60/90 from the confirmed start date.
Every action dedupes on assessmentId + action/approvalVersion. Respect channel consent, opt-outs, and DND. Failed calculations log the assessment ID and block the results message until resolved.
Acceptance tests (verified in-app)
- Scores of 0 count as valid; blank/fractional/out-of-range do not.
- Sales 0, Messaging 1, Visibility 2, others 3–4 → returns Sales, Messaging, Visibility in that order.
- Ties follow canonical category order.
- $1M target, $20K MRR, $8K/win, 25% close, 75% show, 50% booking → 8 wins, 32 held, 43 bookings, 86 qualified leads; capacity 7 → shortfall.
- Replayed submission/approval sends no duplicate message and creates no duplicate task.
- Opted-out contact receives no message through the opted-out channel.
- Returning client can start a new assessment; earlier baseline stays accessible.
- Client-facing report contains no private advisor evidence.
Sandbox test procedure
- Dummy coaching business — open
/7-figure-readiness: owner "Pat Coach", email pat@coachdemo.test, business "Apex Leadership Coaching", type Coach, baseline last month. Enter $60K recognized revenue, $8K net/win, 4 active clients, 200 unique leads, 100 qualified, 50 booked, 38 held, 9 wins, $5K MRR, capacity 7. Self-score all 27. - Open
/advisor, open the record. Leave 2 evidence notes blank → confirm it stays in Advisor Review and verified count < 27. - Fill all 27 advisor scores: set Sales 0, Messaging 1, Visibility 2, all others 3–4, with nonblank evidence → verify top-3 = Sales, Messaging, Visibility.
- Revenue model: target $1M, planned MRR $20K, net/win $8K, close 25%, show 75%, booking 50%, capacity 7 → verify 8 wins / 32 held / 43 bookings / 86 leads + capacity shortfall.
- Confirm first sprint priority, pick "Coach · premium offer requiring diagnosis", fill the three sprints → approve plan → verify stage moves to Plan Approved and approval_version increments.
- Open
/report/$assessmentId→ verify it shows baseline, top-3, first sprint, KPI, and NO private evidence. - Dummy local service business — repeat as "Sam's Plumbing", type Local Service, baseline last month, with a referral funnel. Pick the "Local Service" sales path. Verify the report renders the local-service steps.
- Re-submit the same contact → verify a new assessment_id is created and the earlier baseline is still listed.
- Toggle a communication preference off and replay an approval → verify no duplicate message/task is created.
- Only after all pass: enable the four workflows one at a time, starting with Intake submitted.
Workflows remaining disabled
- Intake submitted (outbound confirmation)
- Advisor review completed (writeback + results message)
- Plan approved (client summary + kickoff link)
- Kickoff booked (checklist + day 30/60/90 review tasks)
These remain draft/disabled until you approve them in the sub-account. The app-side calculation, scoring, plan, and report all work now in the preview.

