Specifica Integrazione — Homesteria

Documento tecnico per integrare questa piattaforma di prenotazioni nell'app homesteria.it. Copia la specifica markdown e incollala nella chat dell'altra app, oppure scarica il PDF dello scheletro.

# SPECIFICA INTEGRAZIONE — Piattaforma Prenotazioni Homesteria

## OBIETTIVO
Integrare nella app homesteria.it il sistema di prenotazioni (ristorante, cooking class, wine tasting, gruppi) con pagamenti Stripe, notifiche WhatsApp/Telegram/Email, calendario Google, recensioni, chat visitatori e pannello admin completo. Conformità AI Act Art. 50.

---

## 1. ENTITÀ (da creare in base44/entities/)

### Booking
type (enum: restaurant|cooking_class|wine_tasting, required) · date (date, required) · time (string) · guests (number, required) · name (string, required) · email (string, required) · phone (string) · notes (string) · allergens (string) · status (enum: confirmed|pending|cancelled, default confirmed) · language (enum: italiano|english|español) · newsletter (boolean, default false) · payment_method (enum: pay_now|guarantee) · price_per_person (number) · is_partner (boolean, default false) · payment_link_sent (boolean, default false)

### GroupBooking
experience_type (enum: cooking_class|wine_tasting, required) · date (date, required) · time (string, required) · name (string, required) · email (string, required) · guests (number, default 1) · status (enum: pending|confirmed|cancelled, default pending) · share_token (string) · session_id (string) · notes (string)

### Experience
type (enum: cooking_class|wine_tasting, required) · title (string, required) · title_en · title_es · description (string, required) · description_en · description_es · subtitle · subtitle_en · subtitle_es · price · price_en · price_es · image_url · includes (array string) · includes_en (array) · includes_es (array) · active (boolean, default true)

### MenuItem
course (enum: Antipasto|Primo|Secondo|Dolce, required) · name (string, required) · name_en · name_es · description · price (string) · allergens · image_url · day_of_week (enum: lunedì..domenica, required) · menu_type (enum: base|top|vegetariano|bambino, default base, required) · active (boolean, default true)

### Availability
date (date, required) · type (enum: restaurant|cooking_class|wine_tasting, required) · max_guests (number) · blocked (boolean, default false) · note (string)

### Review
name (string, required) · email (string, required) · rating (number, required) · text (string, required) · experience_type (enum: restaurant|cooking_class|wine_tasting) · approved (boolean, default false) · ai_generated (boolean, default false)

### Contact
name (required) · email (required) · message (required) · status (enum: new|replied|archived, default new) · notes

### Partner
name (required) · type (enum: hotel|guest_house|b&b|casa_vacanza|appartamento) · active (boolean, default true)

### Newsletter
email (required) · subscribed (boolean, default true)

### GalleryImage
url (required) · caption · order (number, default 0) · active (boolean, default true)

### ChatSession
visitor_name · visitor_email · ip · country · city · user_agent · status (enum: active|closed, default active) · unread_count (number, default 0)

### ChatMessage
session_id (required) · role (enum: visitor|admin, required) · text (required)

---

## 2. FUNZIONI BACKEND (base44/functions/<name>/entry.ts)

### sendPaymentLink
Stripe checkout: mode "payment" per pay_now (amount = price_per_person × guests, sconto 10%), mode "setup" per guarantee (registrazione carta senza addebito). Invia email conferma via Resend a cliente + info@homesteria.it. Aggiorna booking.payment_link_sent=true. Secret: STRIPE_SECRET_KEY, RESEND_API_KEY.

### createCheckoutSession
Stripe checkout generico. Input: amount_cents, label, description, booking_id, success_url, cancel_url. Min €0.50. Secret: STRIPE_SECRET_KEY.

### notifyNewBooking
Notifica Telegram allo staff (bot 8479125373, chat 7662459721) con dettagli prenotazione. Hardcoded bot token + chat id.

### notifyWhatsApp
Notifica WhatsApp allo staff (+393513443378) via Twilio quando nuovo visitatore apre chat. Secrets: TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_WHATSAPP_FROM.

### sendBookingEmails
Email cliente + admin + struttura partner (se is_partner) via Resend. Segnala prenotazione "in attesa di conferma manuale". Secret: RESEND_API_KEY.

### fetchInstagramPosts
Recupera post Instagram via Graph API. Secrets: INSTAGRAM_BUSINESS_ACCOUNT_ID, INSTAGRAM_ACCESS_TOKEN.

### generateReviews
Genera ~2000 recensioni multilingua (IT/EN/ES/FR/DE/ZH/AR/RU) per restaurant/cooking_class/wine_tasting con rating 5, approved=true, ai_generated=true. bulkCreate su Review.

### syncBookingToCalendar
Sincronizza nuova Booking su Google Calendar (evento 3h, ora da booking.time o default 17:00/10:00). Richiede connettore googlecalendar autorizzato.

---

## 3. PAGINE (src/pages/)

Home · Restaurant · RestaurantMenu · Experiences · CookingClass · WineTasting · BookingForm · GroupPreBooking · Gallery · Reviews · HowToReach · TableMap · Admin · AdminLogin · ContentAdmin · MenuManager · AIRegistry · Privacy · IntegrationSpec (questa)

### Layout
Header con LanguageSelector (IT/EN/ES) + currency. Font Georgia serif. Palette: bianco/#0a0a0a + accento #c9a96e (oro). Admin senza header (dashboard scura).

---

## 4. SECRET / INTEGRAZIONI DA CONFIGURARE
- STRIPE_SECRET_KEY (pagamenti)
- RESEND_API_KEY (email)
- TWILIO_ACCOUNT_SID + TWILIO_AUTH_TOKEN + TWILIO_WHATSAPP_FROM (WhatsApp)
- TELEGRAM_BOT_TOKEN (8479125373:AAF...) + TELEGRAM_CHAT_ID (7662459721) — attualmente hardcoded
- INSTAGRAM_BUSINESS_ACCOUNT_ID + INSTAGRAM_ACCESS_TOKEN
- Connettore Google Calendar (OAuth) per syncBookingToCalendar

---

## 5. REGOLE BUSINESS

### Prezzi
- Cooking Class "Pasta & Cantucci": €100/persona · altre: €120/persona
- Wine Tasting: €150/persona
- Home Restaurant: menu prezzo fisso (vedi MenuItem.price)
- pay_now: sconto 10% sul totale (price_per_person × guests)
- guarantee: carta registrata, importo saldato in loco, no-show = addebito pieno senza sconto

### Gruppi (GroupBooking)
- Minimo 10 partecipanti per conferma
- Max 10 posti per richiesta singola
- Link condivisibile /GroupPreBooking?token=XXX
- Progress bar partecipanti real-time (subscribe)
- Email conferma a cliente + admin alla registrazione
- Stato pending → confirmed quando gruppo completo

### Prenotazioni (Booking)
- Stato default confirmed (ristorante) o pending (esperienze)
- Admin conferma manualmente → invia sendPaymentLink
- Newsletter: se flag true, crea record Newsletter
- Partner: se is_partner, email aggiuntiva alla struttura
- Lingua: italiano/english/español per cooking class

### Conformità AI Act Art. 50
- AIRegistry page (/ai-registry) elenca 3 agenti: Chat benvenuto, Generatore recensioni AI, Notifiche WhatsApp
- AIContentBadge su contenuto generato AI
- Disclaimer chatbot visibile in ChatWidget

### Chat Visitatori
- ChatWidget floating su tutte le pagine pubbliche
- ChatSession + ChatMessage real-time (subscribe)
- AdminChat in pannello admin per rispondere
- notifyWhatsApp allo staff alla prima apertura
- Geo-lookup IP/country/city

### Admin (Admin.jsx)
- Login hardcoded (configurare credenziali)
- Tab: Dashboard (statistiche + grafici recharts) · Prenotazioni (filtri status/type/date) · Calendario · Chat · Recensioni · Disponibilità · Partner · Contatti
- Azioni: conferma/rifiuta/cancella prenotazione, invia link pagamento, approva recensione, blocca date
📋 Come usarlo: Apri l'app homesteria.it nel builder Base44 → incolla la specifica markdown nella chat → chiedi all'AI di creare entità, funzioni e pagine come descritto. Per i secret, configurali in Settings → Secrets della nuova app.