Yacht & Tours nasce da un problema molto tipico delle piattaforme di prenotazione. Barche, date, prezzi, disponibilità, pagamenti. Nulla di nuovo. Quello che di solito non regge è il modo in cui questi elementi vengono messi insieme quando il sistema cresce e il traffico diventa imprevedibile.
Ho costruito la piattaforma utilizzando Elixir e il framework Phoenix, con LiveView a gestire gran parte dell’interfaccia. La scelta non è stata dettata dall’hype, ma dall’aderenza al problema: il dominio è per natura altamente concorrente, stateful e in tempo reale. Il modello di concorrenza di Elixir e l’isolamento dei processi di Phoenix rendono molto più semplice mantenere il sistema reattivo sotto carico.
Il frontend è in gran parte server-driven. LiveView permette all’interfaccia di aggiornarsi istantaneamente quando cambiano i filtri, i prezzi vengono ricalcolati o la disponibilità varia, senza dipendere da uno stato client pesante o da continue chiamate API. Risultati di ricerca, calendari e flussi di prenotazione reagiscono in tempo reale mantenendo il client leggero.
Ricerca, disponibilità e pricing sono trattati come infrastruttura centrale, non come funzionalità secondarie. Invece di interrogare il database a ogni richiesta, la piattaforma utilizza una cache in-memory ETS per consultazioni ad alta velocità. Le barche vengono indicizzate in memoria per filtrare per posizione, capacità, dotazioni, disponibilità e prezzo, permettendo ricerche complesse anche con una flotta in crescita.
La logica di pricing è volutamente centralizzata. Regole stagionali, prezzi base, sconti, costi obbligatori ed extra vengono risolti attraverso lo stesso percorso di calcolo. Questo evita un problema comune nelle piattaforme di prenotazione, dove i prezzi mostrati in ricerca, nei preventivi e nelle prenotazioni finali non coincidono perché calcolati in punti diversi del sistema.
Il datastore principale è MongoDB, scelto per la sua flessibilità nella gestione di documenti complessi e annidati come barche, regole di prezzo, extra e metadati di prenotazione. MongoDB funge da fonte di verità, mentre ETS viene utilizzato come livello ottimizzato per la lettura. Le scritture vanno al database; le letture per ricerca e filtri avvengono in memoria. Le modifiche vengono propagate quasi in tempo reale.
Disponibilità e prenotazioni seguono un ciclo di vita chiaro. Gli stati delle prenotazioni passano in modo prevedibile dalla richiesta alla conferma fino al pagamento, e la disponibilità viene derivata dalle prenotazioni accettate e pagate. Questo previene le doppie prenotazioni senza affidarsi a lock fragili o a job schedulati in ritardo.
Il comportamento in tempo reale è un requisito di primo livello in tutta la piattaforma. Richieste di prenotazione, messaggi, cambi di stato e aggiornamenti di disponibilità vengono consegnati immediatamente agli utenti coinvolti. Questo riduce i tempi di risposta, evita race condition ed elimina la necessità di continui refresh manuali.
I pagamenti sono integrati direttamente nel flusso tramite Stripe, con supporto alla generazione e archiviazione automatica delle fatture. In questo modo le operazioni finanziarie restano coerenti e tracciabili, senza dover ricorrere a strumenti esterni o processi manuali.
Il sistema è pensato per convivere con software esterni, non per sostituirli. Molte barche sono gestite tramite strumenti di terze parti, per questo Yacht & Tours include la sincronizzazione con il sistema di booking MMK. Annunci importati, disponibilità e aggiornamenti restano allineati, evitando che la piattaforma mostri dati obsoleti.
Nel complesso, Yacht & Tours è volutamente convenzionale in ciò che offre e dichiaratamente opinionata nel modo in cui è costruita. È una piattaforma di prenotazione standard implementata con un’architettura moderna e real-time, una chiara separazione tra percorsi di lettura e scrittura, e scelte infrastrutturali che privilegiano correttezza, performance e manutenibilità nel lungo periodo.