verticals

hospitality prearrival

playbook/verticals/hospitality-prearrival.md

Vertical Template — Hospitality / Pre-Arrival Upsell

Premier template vertical Atelier. Distillé du sprint PreArrival exécuté manuellement le 2026-05-16 (Masia Can Pares dogfood + LPB sequencing expertise).

Usage : quand une nouvelle idée match ce vertical à > 80%, S4 reuse direct sans génération AI — instantané. Pour les idées partiellement matchées, l'agent fork ce template et adapte les sections marquées [CUSTOMIZE].

Quand utiliser ce template

Match si l'idée brute contient ≥ 4 des 7 critères :

  1. ICP = "owner-operator" ou "revenue manager" d'un boutique hotel / guest house / villa rental
  2. Pain = revenue manqué entre booking et check-in (ou variantes pre-stay)
  3. Geography = Mediterranean, Europe Sud, ou marchés leisure premium
  4. Pricing wedge = outcome-based ou commission-based (alignement vendeur/acheteur)
  5. Stack côté client = PMS standard (Mews, Cloudbeds, Smoobu, Lodgify, Hostaway)
  6. Use case = séquence multi-touchpoint avec personnalisation guest
  7. Mention "upsell", "ancillary revenue", "pre-arrival", "guest experience pre-stay"

Sinon → utiliser un autre vertical, ou fork sans verticals/ template.


1. ICP narrow canonique

Owner-operator OU revenue manager
d'un boutique hotel indépendant / guest house / villa rental
5–30 chambres
ADR 150–600€
Mediterranean leisure markets (priorité 1 : Espagne ; secondaire : Portugal/Italie/France-Sud/Grèce/Croatie)
Avec une réservation arrivant entre J+7 et J+30

Sourcing prospects (pour S6 Outreach) :

  • VibeProspecting MCP : filter "hotel" / "boutique" + size 5-30 employees + country IN (ES, PT, IT, FR, GR, HR)
  • LinkedIn Sales Nav : title ("owner" OR "founder" OR "general manager" OR "revenue manager") + industry "Hospitality" + company size 1-50
  • Annuaires : Booking.com "Boutique hotel" filter + scrape contact info (ou via Apollo)
  • Réseau warm-intro : peer hotels Sitges/Barcelona (Masia network), curators wine (Decantalo network)

Count estimé : ~60 000 propriétés atteignables EU South. Beachhead réaliste 3 ans : 1 500 (2,5% pénétration).


2. Pain points canoniques (à reformuler par idée)

  1. 15-25% du stay revenue laissé sur la table entre booking confirmation et check-in
  2. Guest en pic émotionnel (vient de payer) mais host muet par peur de "harceler"
  3. Pas de personnalisation par profil guest (couples vs familles vs business vs longue durée)
  4. PMS standard envoie 1 email confirmation puis se tait (Mews, Cloudbeds, Smoobu)
  5. Pas multilingue cohérent (templates EN-only ou trad bricolée)
  6. Pas connecté au paiement : owner doit chase la CB par WhatsApp pour chaque upsell
  7. Pas de tracking : owner sait pas quel email a converti, quel touchpoint marche

3. Pricing pattern qui marche

Modèle : Base + Commission outcome-based.

199€/mois base
+ 10% commission sur revenue upsell incrémental (via Stripe Connect application_fee)

Pourquoi ça marche :

  • Anchor à 199€ couvre les costs fixes Atelier (Supabase, Resend, etc.)
  • Commission 10% aligne incentive vendeur/acheteur (si rien généré, owner perd 199€ max)
  • À l'échelle Masia : 280€ upsell/booking × 40 bookings/mois = 11 200€/mo → owner paie 199€ + 1 120€ commission = 1 319€/mois pour 11 200€ de gains. ROI 8,5x = pas de friction d'achat.

Variantes :

  • Free 12 mois pour les "ambassadeurs viraux" (premiers 20 owners du beachhead)
  • Pro 599€/mois flat (sans commission) pour les owners qui détestent les rev-share

Anti-patterns à éviter :

  • "Contact sales" pour pricing → friction max sur cette ICP (owners value transparence)
  • Annual discount > 20% → signal pricing mensuel trop haut
  • Tiers "Starter / Pro / Enterprise" → pas notre ICP (boutique single-property)

4. Les 3 features v1 canoniques

Feature 1 — Booking sync (1 PMS adapter en v0)

User story : En tant qu'owner, quand j'ai une nouvelle réservation sur mon PMS, je veux qu'elle soit ingérée automatiquement avec le profil guest pour que la séquence pre-arrival se déclenche sans action de ma part.

AC canoniques :

  • AC1 : Connect PMS via OAuth ou API key en < 60 sec
  • AC2 : Ingestion futur bookings au connect (arrival_date > now)
  • AC3 : Webhook < 30 sec + fallback polling cron 15 min
  • AC4 : Update/pause sur modification ou cancellation < 30 sec
  • AC5 : Storage EU-only (Supabase EU-West), RGPD owner consent

Adapters v0 : Smoobu (le plus simple, API REST + webhooks officiels). v2 : Mews, Cloudbeds, Lodgify, Hostaway.

Code stub : lib/adapters/pms/smoobu.ts qui implémente BookingProvider interface.

Feature 2 — AI Sequence Runner

User story : En tant qu'owner, quand un booking est sync-é, je veux que la séquence pre-arrival 12-touchpoint se déclenche automatiquement avec chaque message AI-personnalisé dans la langue du guest.

AC canoniques :

  • AC1 : 12 touchpoints planifiés (D-30, D-25, D-21, D-18, D-14, D-10, D-7, D-5, D-3, D-2, D-1, D-0)
  • AC2 : Personnalisation guest-level (nom, party_size, room_type, dates) + contextual (météo arrival_date via OpenWeather + events locaux par city)
  • AC3 : Multilingue EN/ES/FR/DE/IT auto-detect via nationalité
  • AC4 : Approval template ONCE au onboarding (preview email-par-email, edits) → autopilot après
  • AC5 : Resend send avec tracking pixel + unsubscribe footer
  • AC6 : Pause séquence + alert owner si guest répond
  • AC7 : Cancel/modif booking → re-schedule recalculé

Touchpoints canoniques (la "Mediterranean warm voice" qui converti chez Masia) :

  • D-30 : Welcome video (60 sec) du host + "your stay starts soon"
  • D-21 : Concierge guide local (best beaches, food, secret spots)
  • D-18 : Airport transfer offer (Item 1)
  • D-14 : Experiences cart (wine tasting, private chef, spa)
  • D-10 : Room upgrade nudge (only if availability + ADR fit)
  • D-7 : Sunday brunch suggestion (Item 3)
  • D-5 : Pre-stock grocery option
  • D-3 : Wine welcome pack offer (Item 2)
  • D-2 : Weather forecast + packing tip
  • D-1 : Arrival logistics + check-in instructions
  • D-0 : "We're ready for you" + door code
  • (D+1 et au-delà = out of scope v1)

Code stub : lib/sequence-runner.ts + Inngest job sequence.tick qui tourne toutes les 30 min

Feature 3 — Upsell Catalog + Stripe Checkout embedded

User story : En tant qu'owner, quand j'onboarde, je veux configurer mon catalog d'upsells avec prix pour que chaque email touchpoint puisse embed un Stripe Checkout link qui débite directement le guest sans manipulation.

AC canoniques :

  • AC1 : 3-20 items créables UI (titre, description, prix EUR, image, touchpoint préféré)
  • AC2 : Auto-create Stripe Products + Prices via API
  • AC3 : Checkout Session unique par booking-item (preauthorized email, success_url custom, metadata booking_id)
  • AC4 : 90/10 split via Stripe Connect application_fee
  • AC5 : Dedup re-click → page "déjà payé"
  • AC6 : Retry-link auto si payment fail (webhook payment_intent.payment_failed)
  • AC7 : Dashboard owner : € upsell généré + top items convertissant

Items canoniques (à partir du benchmark Masia) :

ItemPrix €Touchpoint préféréConvert rate Masia
Airport transfer (Mercedes Vito, 5 pax)89-129D-767%
Welcome wine pack (DO Penedès, 6 btl)45-89D-350%
Private brunch chef (4 pax, 90 min)120-180D-125%
Pre-stocked groceries (basic kit)65-150D-535%
Spa massage in-room (60 min)95-150D-1018%
Wine tasting tour (half-day)120-200D-1422%

5. Out of scope v1 (canonique pour hospitality vertical)

  1. Multiple PMS connectors simultanés (ship 1 adapter à la fois)
  2. Custom sequence builder (changer touchpoints UI)
  3. Multi-property management (1 owner → N hôtels)
  4. WhatsApp / SMS channels (email only)
  5. Voice notes / personalized video par booking
  6. Loyalty / repeat guest profile
  7. Channel manager direct connect (Booking.com / Airbnb)
  8. In-stay touchpoints (J0 → checkout)
  9. Post-stay survey / feedback collection
  10. Subscription upsells (membership / wine club récurrent)
  11. Per-segment templates (couples vs familles vs business)
  12. Trademark white-label / agency mode

6. Design tokens canoniques

Ref primaire : Mercury × Linear blend (cf. playbook/taste.md).

Palette canonique hospitality :

{
  "background": "#F8F5F0",    // cream / sand Mediterranean
  "foreground": "#1A1A1A",
  "muted": "#6F6A63",
  "muted_background": "#EFEAE3",
  "border": "#E4DDD3",
  "accent_primary": "#1F3A5F",      // navy expertise hôtelière
  "accent_secondary": "#B8612D",    // terracotta chaleureux
  "accent_success": "#5A7F3E",      // olive (Mediterranean)
  "accent_destructive": "#A8332D"
}

Typo canonique :

  • Wordmark + h1 + display numerals (€ upsell généré) : Reckless Neue (fallback Domain Display, Georgia)
  • UI : Inter
  • Mono : JetBrains Mono

Motion canonique : cubic-bezier(0.32, 0.72, 0, 1), 250ms, signature anim "cards fade-in stagger 60ms" au load du dashboard (sentiment livre d'or qui s'ouvre).


7. Wireframes canoniques (5 écrans)

Wireframes ASCII complets dans runs/2026-05-16-prearrival/04-spec.md sections "Écran 1-5". Réutilisables tels quels pour toute nouvelle idée hospitality. Adapter le copy/labels mais garder la structure :

  1. Login : magic link only, wordmark + 1 input email + 1 CTA
  2. Onboarding 3 steps : Connect PMS / Configure upsell catalog / Preview & approve sequence
  3. Main view : 3 KPI cards (€ upsell généré / bookings autopilot / reply rate) + liste arrivées avec sequence progress dot-bar + top upsell items
  4. Settings : PMS Connection + Brand voice & language + Upsell catalog + Billing (Stripe Connect status) + Danger zone
  5. Stripe Checkout email view : warm voice signed by host + 1 product card + Stripe Checkout button → Stripe hosted page test 4242

8. Outreach script canonique (S6)

Sourcing : VibeProspecting MCP match-business sur filtres ICP.

Template email :

Subject: [optimisé par signal récent prospect] — e.g. "Saw your Cap d'Antibes feature on Condé Nast"

Hi {first_name},

{2 lignes sur le signal récent prospect — Condé Nast feature, recent post, job change, award, etc.}

I run Masia Can Pares (Sitges, 8 rooms ADR ~250€) — and like you, I was leaving 15-25% of stay revenue on the table between booking and check-in.

I built {product_name} for myself first. Last 6 months it generated €68k of upsell from 240 bookings on autopilot — guests buy wine packs, private brunches, airport transfers in 1 click from a sequence of pre-arrival emails.

15 min this week to show you the live numbers on your own data?

— Martin
{product_url}

Variations par segment :

  • Owner-direct (5-15 rooms) : pitch direct CB + 30-day PoC at 0€
  • Revenue manager (15-30 rooms) : pitch board-credible ROI + benchmark report
  • Villa/finca rental : pitch high-ADR upsell potential (private chef, wine)

Sequence v0 : 1 email + 1 LinkedIn DM 5 jours après si pas de réponse + 1 final 10 jours après (3-touch séquence).


9. Build-in-public templates (S6)

X thread 12 tweets canonique :

T1: I built a tool to monetize the 30 days between "booked" and "check-in" at my own hotel.
    Last 6 months: €68k of upsell from 240 bookings on autopilot.
    Here's how (and how you can use it on your hotel) ↓

T2: The problem: boutique hotels leave 15-25% of stay revenue on the table after booking.
    Guest is dreaming. Host is silent. Nobody charges anything until check-in.

T3-T8: The 12-touchpoint sequence (D-30 to D-1) with example screenshots

T9: The numbers (Masia data): 67% conversion airport transfers, 50% wine packs, 25% private brunch

T10: How I built it: Next.js + Supabase + Stripe Connect + Resend + Claude API. ~10 days.

T11: It's now {product_name}.com — 199€/mo + 10% commission. Free for boutique hotels < 15 rooms for first 12 months.

T12: Link to landing + CTA

LinkedIn post 1200 char : version narrative orientée founder credibility (LPB sortie + Masia dogfood + AI builder).

Vidéo verticale script 75 sec :

  • 0-10s : pain (guest émotionnel + host muet)
  • 10-50s : product walkthrough (screen recording + voiceover Martin)
  • 50-75s : numbers (€68k) + CTA

10. Anti-patterns spécifiques hospitality

  1. Templates email "corporate" ("Dear guest, we are pleased to inform you...") → 0 conversion. La voix DOIT être personnelle, comme si le host l'avait écrit.
  2. CTA "Visit our website to book" au lieu d'un Stripe Checkout direct → conversion 5x plus basse.
  3. Pas de météo dans la séquence → opportunité manquée de personnalisation gratuite ("24°C sunny ☀️ — parfait pour brunch terrasse").
  4. Sequence trop dense (> 14 touchpoints) → unsubscribe rate explose. 12 est le sweet spot Masia.
  5. AI personalization sans guardrails → hallucinations ("your stay at {hotel_name} starts in {wrong_date}"). Toujours validate les facts avant send.
  6. Pas de unsubscribe footer → RGPD violation + spam folder garanti.
  7. Stripe Checkout custom UI au lieu de Stripe hosted page → conversion -30% + complexité PCI.
  8. Single-language template "translated" → écrasement des nuances. Native templates par langue obligatoire.
  9. Pas de pause-on-reply → spam le guest qui essaie de te dire quelque chose. Tue la trust.
  10. Pricing par chambre au lieu de par property → friction sur les owners avec 5-12 chambres (segment majoritaire boutique).

11. Compounding outputs (à enrichir après chaque sprint hospitality)

Quand un nouveau sprint hospitality-prearrival se termine, mettre à jour ce fichier avec :

  • Nouveaux benchmarks de conversion par touchpoint (ajout à la table section 4)
  • Nouveaux items canoniques découverts qui marchent
  • Anti-patterns nouveaux identifiés (section 10)
  • Variants outreach par segment qui ont marché (section 8)
  • Templates copy email qui ont sur-performé (section 4 touchpoints)
  • Adapter PMS nouveau ajouté (section 4 feature 1)
  • Refs visuelles nouvelles identifiées (section 6)

C'est le moat data propriétaire Martin : à chaque sprint, le template devient meilleur, et un concurrent qui voudrait copier devrait courir tous les sprints précédents pour rattraper.


12. État de ce template

🟢 v0.1 — distillé du sprint PreArrival 2026-05-16 (S1-S4 manuels)

À enrichir après :

  • S5 PreArrival (premier vrai code → benchmarks d'implémentation)
  • S6 PreArrival (premier vrai outreach → conversion rate emails)
  • S7 PreArrival J30 (verdict + premier KPI vraiment mesuré)
  • 2e sprint hospitality (à définir) → confirme la généralisation du template