Quando si dà allo studente
Il sito direct booking non fa parte dell’onboarding base: è un modulo aggiuntivo che si attiva per lo studente che vuole vendere in diretta. Si affronta dopo che le fondamenta sono a posto, perché ne riusa i pezzi:- PMS collegato (KrossBooking o altro): il sito legge appartamenti e disponibilità dallo stesso adapter PMS, quindi il PMS va collegato prima.
- Stripe attivo: il checkout del sito usa la stessa chiave Stripe dell’agente Conduit (una sola credenziale nel Vault).
- Conduit / smart check-in (opzionali): se lo studente li ha già, si agganciano al sito come embed.
Due domini, due cose diverse: stay. e book.
Non confondere i due sottodomini:
stay.{brand}.com= sito di prenotazione diretta (questa pagina): vetrina + motore di prenotazione + checkout Stripe. Serve a vendere il soggiorno senza OTA.book.{brand}.com= guest portal / self check-in: il portale che l’ospite già prenotato usa per l’accesso (istruzioni, apertura porta smart-lock, extra). È il front-end dello smart check-in, vedi Smart check-in e la skillsmart-checkin-mcp.
Regola d’oro: si forka, non si scaffolda
Ogni sito studente parte da un fork del template canonicoftaiano100-dot/cosmica-booking (live: stay.cosmicarentals.com), mai da create-next-app. Il template porta già PMS adapter, i18n, tema, Stripe, health endpoint, ricostruirli a mano introduce bug che il template ha già risolto.
Stack (dal template)
- Next.js (App Router) + next-intl per le lingue (tipico
it, en; aggiungide/frse servono i mercati). - Tema in Tailwind (palette + font dello studente).
- PMS adapter agnostico dietro un unico contratto
PmsAdapter: KrossBooking, Hostaway, Smoobu, Hostify, Lodgify, Hostfully, Guesty. Con caching + coalescing + retry backoff su ogni adapter (difensivo, obbligatorio). - Stripe per i pagamenti (vedi sotto).
- Opzionali: embed chatbot Conduit, smart check-in (Shelly/SwitchBot), CRM GHL, esperienze GetYourGuide.
Come si costruisce (fasi)
1
Intake
Raccogli tutto con lo studente: brand/dominio/colori, paese+valuta, lingue, lista appartamenti, PMS, Stripe (single o multi-owner), CRM, smart-lock, AI inbox, analytics. Usa la checklist della skill.
2
Stack decision
Blocca i moduli in base all’intake (quale PMS adapter, valuta, locale, Stripe single vs Connect, smart check-in sì/no, Conduit sì/no).
3
Fork del template
Copia
cosmica-booking, rm -rf .git .next .vercel node_modules && git init, rebrand (colori, font, asset, testi, footer, sitemap), npm install, .env.local con solo le env che lo studente ha davvero. Grep zero-residui del brand vecchio prima del primo commit.4
PMS adapter + pagamenti + moduli
Collega il PMS, Stripe, e i moduli opzionali scelti. Non rimuovere i moduli baseline anche se non usati.
5
Deploy + dominio
Deploy su Vercel (git push). Dominio: convenzione
stay.{brand}.com per il sito di prenotazione (Cosmica usa stay. per il booking e book. per il guest portal/accesso). Aggiungi il dominio su Vercel + record DNS.6
Verifica
npm run dev renderizza la home; il flusso di prenotazione arriva fino al checkout Stripe; le pagine appartamento leggono i dati dal PMS.Pagamenti
- Single owner → account Stripe standard (una
sk/pk). - Multi-owner (più proprietari con payout separati) → Stripe Connect (un connected account per proprietario,
application_fee_amountper prenotazione). - La chiave Stripe è la stessa usata dall’agente Conduit per gli extra: una credenziale sola nel Vault (
stripe_key_<token>). Vedi Stripe.
Fonti: skill
direct-booking-engine (workflow 10 fasi + lezioni L1-L8), repo ftaiano100-dot/cosmica-booking, memoria project_direct_booking_skill, project_cosmica_domain_migration.Stripe
Chiave unica per checkout + extra Conduit
Personalizzazione studente
Branding, dominio, dati per-studente
Fonti ufficiali
- Stripe (checkout/pagamenti): https://docs.stripe.com
- PMS (dati appartamenti/prenotazioni): Hostaway https://api.hostaway.com/documentation · KrossBooking v5 non pubblica (richiedere a Kross)
- Next.js (framework del template): https://nextjs.org/docs