Caso di studio · Prodotto proprio · pre-lancio
EscapaYa
Marketplace di prenotazioni alberghiere a ore, con API, pagamenti e notifiche.
Il problema
Ci sono hotel con camere disponibili che hanno una presenza digitale quasi inesistente.
Come rendiamo semplice trovare e prenotare alcune ore?
EscapaYa unisce prenotazioni a ore, pagamenti, geolocalizzazione e notifiche. Il backend collega queste operazioni all’app Flutter e ai processi in background.
Contesto
Un prodotto proprio, costruito dall’inizio alla fine: app, sito, API, pagamenti e notifiche. È in fase di pre-lancio: questa pagina racconta le decisioni, senza metriche pubbliche.
Il mio ruolo
Prodotto, architettura e codice: definire l’ambito, progettare l’architettura e costruire backend, app e sito.
Vincoli
- Tentativi e idempotenza nelle operazioni critiche.
- Disponibilità a ore, più precisa di una prenotazione per notte.
- Pagamenti e notifiche collegati tramite API e processi asincroni.
- Mobile first: la prenotazione avviene dal telefono.
Architettura
Schema esplicativo basato sullo stack del prodotto. I flussi mostrano come si collegano API, dati, code e notifiche. Tocca un componente per capire la sua funzione.
App · Flutter
- Che cosa risolve
- L’app di prenotazioni per Android e iOS.
- Perché esiste
- Un solo codice per entrambe le piattaforme. Una prenotazione a ore si fa dal telefono, spesso il giorno stesso.
- Quale alternativa c’era
- Due app native: il doppio del lavoro per un piccolo team.
Web · Next.js
- Che cosa risolve
- Il sito pubblico: ricerca, schede degli hotel e pagine per i motori di ricerca.
- Perché esiste
- Chi cerca un hotel a ore arriva da Google: le pagine devono essere accessibili ai motori di ricerca.
- Quale alternativa c’era
- Una SPA senza rendering sul server: invisibile ai motori di ricerca.
Edge · Cloudflare
- Che cosa risolve
- La porta d’ingresso: cache, TLS e una prima protezione dagli abusi.
- Perché esiste
- Immagini e pagine vicine all’utente, senza caricare il server con ciò che non cambia.
- Quale alternativa c’era
- Servire tutto dal server di origine.
API · NestJS
- Che cosa risolve
- Un punto d’ingresso per app e sito: autenticazione, validazione e regole di ogni richiesta.
- Perché esiste
- Moduli chiari all’interno di un’unica applicazione: si distribuisce e si gestisce come una sola unità.
- Quale alternativa c’era
- Microservizi dal primo giorno: troppa gestione per un prodotto in fase di pre-lancio.
Prenotazioni · NestJS modules
- Che cosa risolve
- Il dominio: hotel, camere, disponibilità a ore e prenotazioni.
- Perché esiste
- Qui vive la regola più delicata: impedire che due persone prenotino la stessa camera allo stesso orario.
- Quale alternativa c’era
- Logica nelle procedure del database: difficile da testare e modificare.
Database · PostgreSQL · Prisma
- Che cosa risolve
- La fonte di verità: hotel, camere e prenotazioni.
- Perché esiste
- Transazioni e vincoli per impedire prenotazioni duplicate.
- Quale alternativa c’era
- Un database NoSQL: più flessibile, senza le garanzie richieste da una prenotazione.
Cache · Redis
- Che cosa risolve
- Le informazioni consultate spesso e poco variabili: disponibilità recente e sessioni.
- Perché esiste
- Risponde velocemente senza interrogare il database a ogni ricerca.
- Quale alternativa c’era
- Interrogare sempre il database.
File · Object storage
- Che cosa risolve
- Foto di hotel e camere.
- Perché esiste
- I file grandi restano fuori dal database e vengono serviti dall’edge.
- Quale alternativa c’era
- Salvarli sul server: non scala e complica ogni rilascio.
Code · BullMQ
- Che cosa risolve
- Il lavoro che non entra nella richiesta: conferme, promemoria e scadenze.
- Perché esiste
- Nessuno deve aspettare l’invio di un messaggio; se qualcosa fallisce, il sistema riprova.
- Quale alternativa c’era
- Cron con polling o un broker separato. BullMQ riutilizza Redis, già presente.
Notifiche · FCM · WhatsApp
- Che cosa risolve
- Avvisi all’utente e all’hotel.
- Perché esiste
- Una prenotazione a ore è immediata: l’hotel deve saperlo subito.
- Quale alternativa c’era
- Solo email: arriva tardi e nessuno la legge in tempo.
Pagamenti · Payment provider
- Che cosa risolve
- Il pagamento della prenotazione tramite un fornitore di pagamenti.
- Perché esiste
- Il denaro viene gestito da un fornitore certificato; l’API salva soltanto lo stato del pagamento.
- Quale alternativa c’era
- Pagare in hotel: più ostacoli e più prenotazioni senza arrivo.
Risultati
Pre-lancio. Nessuna metrica pubblica per ora: i dati reali verranno aggiunti quando saranno disponibili.