Files
smb-online/playbooks/lead-to-customer.md
T
mivanchenko 156166b4e5 Add booking stack, client deploys, and back-office updates
- deploy/booking: shared Easy!Appointments stack with brand-matched
  wizard (flatpickr recolor, single-tenant provider hide, iframe
  auto-fit height reporter)
- deploy/clients: per-client isolated nginx compose stacks with
  _template scaffold, new-client.sh, and happynails live site
- deploy/backup: smb-db backup script
- n8n: booking-sync workflow; onboarding tweaks
- playbooks: lead-to-customer lifecycle + outreach
- templates: nail-studio landing previews
- backoffice: app/db/init/compose updates

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 16:10:15 +02:00

2.6 KiB

Playbook — Lead → Customer

The full lifecycle for turning a lead into a live, paying, bookable client. CRM lives at onboard.mivanchenko.de/crm. Booking is self-hosted (Easy!Appointments), embedded on the client's own site.

1. Lead exists

The lead is in the CRM Leads tab, status new — from outreach (see outreach.md) or an inbound form submission.

2. Reach out & qualify

Contact them (DM / call / walk-in). In the CRM, ✎-edit the lead's status: newcontactedqualified (interested) — or lost (dead).

3. Close the deal

On a short call, confirm scope (site + online booking), agree the setup fee + monthly (Tier-A pricing in tier-a-google.md), and note their services + opening hours.

4. Onboard → creates the customer (automated)

Click 📝 Onboarding-Formular in the CRM header (or go to onboard.mivanchenko.de). Fill: business name, owner, email, phone, niche, tier, domain = <slug>.mivanchenko.de, billing cycle, monthly fee → Submit.

This automatically:

  • creates the Client (C-xxxx, status onboarding) + Project in the CRM,
  • provisions their Easy!Appointments booking (service + provider, mapped to their C-id),
  • stores their booking embed URL in the client's stack_notes.

Then ✎-edit the original Lead → won.

5. Build & ship their site

  1. Copy the embed URL from the new client's stack_notes in the CRM.
  2. Clone a template/preview (templates/landing/…), rebrand it (name, colours, services, hours, photos), and wire the booking section to the client's EA.
  3. Ship the isolated stack:
    cd deploy/clients
    ./new-client.sh <slug> <slug>.mivanchenko.de <their-site-dir>
    
    → scp to the homelab → add the printed Caddy block + reload → docker compose up -d. Live at https://<slug>.mivanchenko.de (wildcard DNS + auto-TLS).

6. Tune their booking

In the EA backend (admin login — see .secrets/easyappointments.txt), set the provider's real services (duration / price) and working hours / timezone. Optionally hand the studio their provider login so they manage their own calendar.

7. Hand over & go live

  • Give them either their EA provider login (self-hosted calendar view) or the iCal feed …/crm/api/bookings.ics?client_id=C-xxxx&token=… to subscribe in Apple / Google Calendar.
  • A customer booking now flows: their site → EA → CRM bookings → your Telegram.
  • Set the Client → active.

8. Ongoing

Bookings auto-land in the CRM (source of truth); renewal reminders fire; bill monthly. Update status to churned if they leave (then docker compose down their stack to offboard).