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