Booking & Calendar CRO Engine β Packages all booking, scheduling, .ics download, and Google Calendar integration into a revenue-boosting system. Auto-detect industry β select matching pattern β generate calendar engine + booking UI + export logic. Integrates with cm-google-form (form β sheet) and cm-ads-tracker (conversion events). ALWAYS trigger for: booking, appointment, calendar, reminder, download ics, google calendar, add to calendar, book appointment, schedule, "create booking", "add scheduling", "appointment reminder system", "calendar CRO", "reduce no-show"
From cmnpx claudepluginhub tody-agent/codymaster --plugin cmThis skill is limited to using the following tools:
references/industry-patterns.mdtemplates/booking-form.csstemplates/booking-form.htmltemplates/calendar-engine.jstemplates/calendar-export.jstemplates/reminder-config.jsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Implements distributed tracing with Jaeger/Tempo for microservices, including Kubernetes/Docker setup and OpenTelemetry instrumentation (Python/Flask). Use for debugging latency, dependencies, and request flows.
Booking + Calendar Reminders = Replace expensive SMS/notification costs. Auto-detect industry β Ready-made patterns β Generate code β Increase revenue. Zero dependencies, works on any static site.
| Metric | Impact | Mechanism |
|---|---|---|
| No-show reduced 30-60% | Directly increases revenue | Calendar reminder replaces SMS, free |
| Conversion Rate +15-25% | "Add to Calendar" CTA = micro-commitment | User commits via action, not just form |
| LTV increases 2-3x | Appointments = continuous touchpoints | Brand exposure every time calendar opens |
| SMS/notification cost = 0 | Saves $0.05-0.10/message | Calendar notification is free forever |
| Organic referrals | Calendar events can be shared | "Invite a friend" via calendar |
| Trigger | Action |
|---|---|
| User says "booking", "appointment", "schedule" | Activate β start Phase 1 |
| User says "reminder", "calendar" | Activate β focus calendar export |
| User says "reduce no-show", "increase conversion" | Activate β focus ROI explanation |
| User says "download calendar", "download ics" | Jump to Phase 4 (calendar-export.js) |
| Detected booking form on website | Suggest this skill proactively |
Phase 1: DISCOVER β Auto-detect industry, scan existing forms/booking
Phase 2: SOCRATIC GATE β Ask 5-7 strategic questions
Phase 3: CONFIGURE β Select industry pattern + customize
Phase 4: BUILD β Generate calendar engine + UI + export
Phase 5: INTEGRATE β Wire to site + cm-google-form + cro-tracking
Phase 6: VERIFY β Test ICS, GCal, form submit, tracking events
Phase 7: REVENUE REPORT β Explain ROI to user per feature
π΄ Rule: NEVER skip Phase 1 & 2. Always scan first, ask second.
Goal: Understand the website's industry and existing booking/form infrastructure.
Scan the website to classify industry:
grep -ri "keywords\|description\|og:title" --include="*.html" --include="*.astro" .
grep -ri "service\|booking\|appointment" --include="*.html" --include="*.astro" .
Detection signals:
| Signal | Where to Find | Example |
|---|---|---|
| Meta keywords | <meta name="keywords"> | "obstetrics, ultrasound" β Healthcare:OB/GYN |
| Page titles | <title>, <h1> | "Dental Clinic" β Healthcare:Dental |
| Service lists | Service section content | "Haircut, coloring, perming" β Salon |
| Form fields | <select> options | "Prenatal exam, 5D ultrasound" β OB/GYN |
| Address/Maps | Google Maps embed | Location-based business |
grep -r "data-form-type\|onsubmit\|<form\|booking" --include="*.html" --include="*.astro" .
For each form found, extract:
| Info | How to Find |
|---|---|
| Form type | data-form-type or form class/id |
| Fields | <input name="...">, <select name="..."> |
| Calendar integration | google.com/calendar, .ics, VCALENDAR |
| Submit handler | onsubmit attribute or JS handler |
grep -r "VCALENDAR\|google.com/calendar\|\.ics\|VEVENT\|VALARM" --include="*.js" --include="*.html" .
## Discovery Report
**Industry detected:** [industry name] (confidence: HIGH/MEDIUM/LOW)
**Detection signals:** [list signals found]
**Existing forms:** [count] forms found
**Existing calendar:** [YES/NO] β [details if yes]
**Recommended pattern:** [industry-pattern key]
π΄ MANDATORY. Ask ALL in ONE message. Max 7 questions.
Ask user these questions, adapting language to their industry:
After receiving answers, explain back to user WHY each feature increases revenue. This is the "exceeding expectations" moment:
## π‘ Why Each Feature Drives Revenue:
1. **Calendar Reminder replaces SMS** β Saves ~$0.05-0.10/message.
If 100 appointments/month = saves $5-10/month, $60-120/year.
2. **"Add to Calendar" CTA** β Increases commitment 40%.
Research shows: users who add calendar events have 2.5x higher
show-up rate compared to form-only submissions.
3. **Google Maps in event** β Reduces "got lost" cancellations 25%.
Calendar event with location β 1 tap opens navigation β no drop-off.
4. **Preparation reminders** β Reduces cancellations/postponements 35%.
"Remember to fast for 8 hours" in reminder β patient prepares correctly
β no rescheduling needed β no lost revenue.
5. **Re-booking prompt** β Increases LTV 2x.
After 6 months auto-reminds "Time for your next check-up" β recurring revenue.
Goal: Load industry pattern + apply user customizations.
Read references/industry-patterns.md β find matching industry β load defaults.
Merge user answers from Phase 2 onto the industry defaults:
const config = {
...INDUSTRY_PATTERNS[detectedIndustry], // defaults
...userOverrides, // from Phase 2
// Computed fields
googleMapsUrl: userGoogleMapsUrl || buildMapsSearchUrl(clinicName, clinicAddress),
reminderAlarms: buildAlarmConfig(userReminderTiming),
calendarTitle: `${userServiceName} β ${clinicName}`,
};
| Setting | Source | Default |
|---|---|---|
| Industry pattern | Auto-detect + user confirm | From detection |
| Clinic/business name | User input | From <title> tag |
| Address | User input | From Google Maps embed or contact section |
| Google Maps link | User provides or auto-build | Search URL |
| Reminder content | Industry default + user override | From pattern |
| Reminder timing | User choice | 1 day + 2 hours before |
| Working hours | User input | Mon-Sat 8:00-17:00 |
| Services list | Scan existing <select> or user input | From form |
| Follow-up interval | Industry default + user override | From pattern |
| Form fields | Industry default + user additions | phone + name + date + service |
templates/calendar-engine.js)See
templates/calendar-engine.jsfor the full template.
Core BookingCalendarEngine class:
| Method | Purpose |
|---|---|
constructor(config) | Init with industry config |
generateSchedule(startDate, preferences) | Build appointment list from milestones/frequency |
getSmartDateChips() | Return next 5 smart date options (Today, Tomorrow, next available slots) |
getTimeSlots(date) | Return available time slots for a given date |
filterPastAppointments(appointments) | Remove past dates |
getNextAppointment() | Get the soonest upcoming appointment |
templates/calendar-export.js)See
templates/calendar-export.jsfor the full template.
| Function | Purpose |
|---|---|
buildGoogleCalUrl(event, config) | Generate Google Calendar deep link |
buildICSContent(events, config) | Generate RFC 5545 .ics content with VALARM |
triggerICSDownload(content, filename) | Trigger browser download |
addToGoogleCal(event) | Open GCal in new tab |
addAllToGoogleCal(events) | Batch add with confirmation |
downloadICS(event) | Download single event .ics |
downloadAllICS(events) | Download all events as single .ics |
detectDevice() | iOS β ICS, Android β GCal deep link |
buildCalendarCTA(event, config) | Generate post-submit calendar buttons HTML |
templates/booking-form.html)See
templates/booking-form.htmlfor markup templates.
3 form variants:
| Variant | Use Case |
|---|---|
bottom-sheet | Mobile-first popup (like existing BookingBottomSheet) |
inline | Embedded in page content |
standalone | Full-page booking form |
Required attributes:
<form data-form-type="booking"
data-industry="[INDUSTRY_KEY]"
onsubmit="window.submitBooking(event)">
<input type="hidden" name="url" value="">
<input type="hidden" name="industry" value="[INDUSTRY_KEY]">
<!-- form fields per industry config -->
<button type="submit">Confirm Booking</button>
</form>
<!-- Post-submit Calendar CTA (shown after successful submit) -->
<div class="booking-calendar-cta" id="booking-calendar-cta" hidden>
<p class="cta-title">π
Add to your calendar so you don't forget!</p>
<div class="cta-buttons">
<button onclick="addToGoogleCal()" class="btn-gcal">
<img src="gcal-icon" alt=""> Google Calendar
</button>
<button onclick="downloadICS()" class="btn-ics">
π₯ Download calendar file (.ics)
</button>
</div>
<p class="cta-benefit">π‘ Your calendar will automatically remind you 1 day before β completely free</p>
</div>
templates/booking-form.css)See
templates/booking-form.cssfor full styles.
Key components:
templates/reminder-config.js)See
templates/reminder-config.jsfor the full config object.
Each industry config:
{
key: 'obgyn',
name: 'OB/GYN',
icon: 'π₯',
frequency: 'milestone',
milestones: [...],
reminderAlarms: [
{ trigger: '-P1D', description: 'Appointment reminder for tomorrow' },
{ trigger: '-PT2H', description: 'Your appointment today at {time}' }
],
reminderContent: {
preparation: 'Bring your pregnancy record, latest test results',
arriveEarly: '15 minutes',
fasting: false,
bringDocuments: ['Pregnancy record', 'ID card', 'Insurance card'],
},
calendarTitleTemplate: '{service} β {clinicName}',
calendarDescTemplate: '{desc}\n\nπ {clinicName}\nπ {address}\nπ {phone}\nπΊοΈ {mapsUrl}',
workingHours: { start: '08:00', end: '17:00', days: [1,2,3,4,5,6] },
bookingFields: ['phone', 'name', 'date', 'timeSlot', 'service', 'note'],
conversionValue: 50,
followUp: { interval: 'per-milestone', promptText: 'Time for your next check-up' }
}
cm-google-formThe booking form uses the SAME submitToGoogleSheet() from cm-google-form skill, with extra fields:
// After cm-google-form success callback:
window.submitToGoogleSheet = function(event) {
// ... existing cm-google-form logic ...
// ADDITION: After success, show calendar CTA
.then(() => {
showCalendarCTA(formData); // from cm-booking-calendar skill
// Track calendar availability
dataLayer.push({
event: 'cro_booking_submit',
event_id: generateUUID(),
content_name: formData.service,
value: INDUSTRY_CONFIG.conversionValue,
currency: 'USD'
});
});
};
Google Sheet extra columns:
| Column | Value | Purpose |
|---|---|---|
| Timestamp | auto | Timestamp |
| (form fields) | from form | Core data |
| Page Source | url field | Attribution |
| Calendar Added | YES/NO | Track calendar adoption |
| Calendar Type | gcal/ics/none | Which calendar used |
cm-ads-trackerNew dataLayer events for booking:
// Event 1: Booking form submitted
dataLayer.push({
event: 'cro_booking_submit',
event_id: '[UUID]',
content_name: '[service_name]',
value: [conversion_value],
currency: 'USD',
booking_date: '[selected_date]',
booking_time: '[selected_time]',
industry: '[industry_key]'
});
// Event 2: Calendar added (Google Cal or ICS)
dataLayer.push({
event: 'cro_calendar_add',
event_id: '[UUID]',
content_name: '[service_name]',
calendar_type: 'gcal' | 'ics',
appointments_count: [number],
industry: '[industry_key]'
});
GTM Tags to create:
| Tag | Trigger | Platform |
|---|---|---|
| FB Lead | cro_booking_submit | Facebook Pixel |
| TikTok SubmitForm | cro_booking_submit | TikTok Pixel |
| Google Ads Lead | cro_booking_submit | Google Ads |
| GA4 booking_submit | cro_booking_submit | GA4 |
| GA4 calendar_add | cro_calendar_add | GA4 |
| # | Test Case | Expected | Status |
|---|---|---|---|
| 1 | Open booking form | Bottom sheet slides up | |
| 2 | Select date chip | Chip active + time slots appear | |
| 3 | Select time slot | Chip active + hidden input updated | |
| 4 | Submit valid form | Toast success β Calendar CTA appears | |
| 5 | Click "Google Calendar" | New tab with pre-filled GCal event | |
| 6 | Click "Download calendar file" | .ics file downloads | |
| 7 | Open .ics on iOS | Apple Calendar shows event with reminders | |
| 8 | Open .ics on Android | Calendar app shows event | |
| 9 | Check Google Sheet | New row with calendarAdded column | |
| 10 | Check GTM Preview | cro_booking_submit fires | |
| 11 | Check GTM Preview | cro_calendar_add fires on calendar click | |
| 12 | Submit invalid phone | Validation error toast | |
| 13 | Network offline | 3 retries β error toast with fallback | |
| 14 | Verify reminder alarms | Calendar shows reminder 1d + 2h before | |
| 15 | Verify Google Maps in event | Location link opens Maps correctly |
# Check calendar export works
node -e "const c = require('./calendar-export.js'); console.log(c.buildICSContent([{...}], config))"
# Validate ICS format
grep -c "BEGIN:VEVENT" test-output.ics
grep -c "VALARM" test-output.ics
π΄ This phase is what makes the skill exceed expectations.
After implementation, generate a revenue impact report for the user:
## π Revenue Impact Report
### Features Implemented:
| Feature | Impact | Mechanism |
|---------|--------|-----------|
| Calendar Reminder | Reduces no-show 30-60% | Auto-reminder, no cost |
| Google Maps in calendar | Reduces "got lost" cancellations 25% | One-tap navigation |
| Preparation reminder content | Reduces cancellations/postponements 35% | Patient prepares correctly |
| Post-submit CTA | Increases adoption 40% | Micro-commitment |
| Re-booking prompt | Increases LTV 2x | Recurring revenue |
### Estimated Monthly ROI:
Assuming [X] appointments/month, average service price $[Y]:
- **SMS/notification savings:** [X] Γ $0.05 = $[total]/month
- **No-show reduction:** [X] Γ 40% no-show Γ 50% reduction Γ $[Y] = $[total]/month
- **Re-booking increase:** [X] Γ 15% re-book Γ $[Y] = $[total]/month
- **Estimated total revenue increase:** $[grand total]/month
| β Don't | β Do |
|---|---|
| Hardcode clinic info | Use config object |
| Skip calendar CTA after form success | ALWAYS show calendar CTA |
| Only offer Google Calendar | Offer BOTH GCal + ICS download |
| Generic reminder "You have an appointment" | Industry-specific "Remember to fast..." |
| Same reminder timing all industries | Customize per industry needs |
| Skip Google Maps in event | ALWAYS include location |
| No tracking on calendar actions | Track cro_calendar_add event |
| Build from scratch | Use industry pattern as base |
| Skip Socratic Gate questions | ALWAYS ask Phase 2 questions |
| Forget mobile device detection | iOS β ICS, Android β GCal |
| File | Purpose |
|---|---|
templates/calendar-engine.js | Core booking/scheduling engine |
templates/calendar-export.js | ICS + Google Calendar export |
templates/booking-form.html | HTML form markup (3 variants) |
templates/booking-form.css | Booking form styles |
templates/reminder-config.js | 20 industry configurations |
| File | Purpose |
|---|---|
references/industry-patterns.md | Complete 20-industry pattern library |
| Need | Skill |
|---|---|
| Form β Google Sheet | @[skills/cm-google-form] |
| Conversion tracking | @[skills/cm-ads-tracker] |
| Form UI/UX design | @[skills/cm-ux-master] |
| SEO for booking pages | @[skills/cm-dockit] |
| Mobile booking UX | @[skills/cm-ux-master] |