Approfondimento Tecnico — Sistema Calendario ICS

Analisi completa del sistema di sincronizzazione basato su file ICS, utilizzato per gestire la disponibilità delle camere dell’Agriturismo La Bertorella.

Il problema di partenza

L’Agriturismo La Bertorella utilizza Booking.com per ricevere una parte delle prenotazioni. Tuttavia, Booking non mette a disposizione un’API completamente aperta per leggere in tempo reale la disponibilità delle camere.

Questo crea un problema concreto:
come evitare che un utente invii una richiesta di prenotazione in un giorno già occupato?

Era necessario trovare un modo per sincronizzare il sito con le prenotazioni già presenti su Booking, senza:
• strumenti server-side costosi;
• plugin di terze parti;
• dipendenze esterne;
• manutenzione complicata per il cliente.

La soluzione: sincronizzazione tramite file ICS

Booking.com permette l’esportazione delle prenotazioni tramite file .ics, lo stesso formato utilizzato da Google Calendar, Apple Calendar e Outlook.

Questi file vengono aggiornati automaticamente da Booking ad ogni nuova prenotazione o cancellazione.

Il sito utilizza questi file per:

Snippet di codice

// Inizializza i calendari con le date non disponibili
function setupCalendars() {
  flatpickr("#checkin", {
    dateFormat: "d/m/Y",
    altInput: true,
    altFormat: "l, d F Y",
    locale: "it",
    minDate: "today",
    disable: bookedDates
  });

  flatpickr("#checkout", {
    dateFormat: "d/m/Y",
    altInput: true,
    altFormat: "l, d F Y",
    locale: "it",
    minDate: "today",
    disable: bookedDates
  });
}
// Setup completo al caricamento pagina
document.addEventListener("DOMContentLoaded", async () => {
  await loadBookedDates();  // Scarica dal repo GitHub
  setupCalendars();         // Inizializza Flatpickr
});

Perché ospitare i file ICS su GitHub?

I file .ics vengono esportati da Booking tramite un link pubblico. Per utilizzarli nel sito serviva un luogo stabile, affidabile e accessibile via HTTPS.

La scelta più efficace è stata:
creare un repository GitHub dedicato ai file ICS.

Vantaggi:

Architettura del sistema

Il sistema si basa su una pipeline semplice, stabile e scalabile.

1. Booking.com → Esporta file ICS
Ogni camera ha un link ICS generato da Booking.

2. GitHub Actions → Scarica e aggiorna i file ICS
Un workflow automatico li scarica ogni ora e li salva nel repository.

3. Il sito → Legge i file ICS da GitHub
La pagina prenotazioni effettua una richiesta fetch ai file ospitati nel repo.

4. Flatpickr → Oscura le date prenotate
Le prenotazioni vengono convertite in un array di date disabilitate.

Flusso di lavoro

  1. 1. GitHub Actions scarica i file ICS aggiornati.
  2. 2. I file vengono salvati nella cartella /ics del repository.
  3. 3. Il sito, quando si apre la pagina prenotazioni, fa una richiesta ai file nel repo.
  4. 4. Le date presenti negli eventi ICS vengono parse e trasformate in formato leggibile da Flatpickr.
  5. 5. Il calendario si aggiorna automaticamente, oscurando le date impossibili da prenotare.

Sicurezza

I file ICS non contengono dati sensibili: solo date e numero di prenotazioni. Per questo possono essere ospitati in un repository pubblico.

Inoltre:
• nessuna informazione del cliente viene esposta
• nessuna API privata viene utilizzata
• tutto avviene lato client con massima trasparenza

Possibili sviluppi futuri

← Torna alla pagina del progetto