Caso di studio · Prodotto proprio · pre-lancio

EscapaYa

Marketplace di prenotazioni alberghiere a ore, con API, pagamenti e notifiche.

  • NestJS
  • PostgreSQL
  • Prisma
  • Redis
  • BullMQ
  • Flutter
  • Next.js
  • Cloudflare
Visita escapaya.com ↗

Il problema

Ci sono hotel con camere disponibili che hanno una presenza digitale quasi inesistente.

Come rendiamo semplice trovare e prenotare alcune ore?

Ricardo

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.