Tutti i progetti
Non più sugli store · registrazioni con contenuti di esempioCaso di studio

Criluma Viaggi

Un’agenzia di viaggi in tasca: le sue offerte, la ricerca di una vacanza, prenotazione e pagamento, e un appuntamento con un consulente.

Ruolo
Sviluppatore Flutter principale: pagamenti, accesso con Google, Facebook e Apple, appuntamenti, notifiche push, la migrazione a null safety e il rilascio della 2.0
Cliente
Criluma Viaggi, agenzia di viaggi
Periodo
2018–2022 (ultimo rilascio 2.0.1, novembre 2021)
Piattaforme
iOS e Android da un’unica codebase Flutter
  • Flutter
  • Dart
  • BLoC
  • RxDart
  • Firebase Auth
  • Cloud Messaging
  • Google Sign-In
  • Facebook Login
  • Sign in with Apple
  • Stripe
  • Nexi
  • MyBank

Il prodotto

Criluma Viaggi è un’agenzia di viaggi marchigiana, e la sua app metteva l’agenzia in tasca al cliente: le offerte del momento, una ricerca tra le vacanze vendute dal suo sistema di prenotazione (volo più hotel, o solo hotel) e una prenotazione fatta dal telefono, dal preventivo ai dati dei viaggiatori, fino all’assicurazione e al pagamento.

I clienti potevano anche prenotare un incontro con uno dei consulenti di viaggio dell’agenzia, in agenzia o in videochiamata. Sono stato lo sviluppatore principale dell’app, su iOS e Android da un’unica codebase Flutter, fino alla versione 2.0.1 di novembre 2021.

183
dei 222 commit nel repository dell’app sono miei
18k
righe di Dart nell’ultimo rilascio
3
integrazioni di pagamento negli anni: Stripe, Nexi e MyBank
4
modi per accedere: l’account dell’agenzia, Google, Facebook e Apple

Tour guidato

L’app in azione

Scegli una registrazione, o salta direttamente a un capitolo.

Cercare una vacanza, primo fotogramma
0:00 / 1:17

Registrate dall’ultimo rilascio dell’app in formato smartphone, con la ricerca e la prenotazione in-app riattivate com’erano nella versione 1.6. Hotel, prezzi e banche sono inventati; le pagine della banca sono disegnate dalla demo.

Cosa fa

Da un’offerta in vetrina a una vacanza pagata

01

Le offerte in vetrina

La home è la vetrina dell’agenzia: un carosello di offerte, ognuna con la destinazione, l’hotel e le sue stelle, le date e il prezzo. Un’offerta si apre con le sue foto, cosa è incluso e un modulo che invia all’agenzia una domanda in merito.

02

Una ricerca che segue ciò che è in vendita

Volo più hotel, solo hotel o ricerca libera. Destinazione, mese e aeroporto di partenza si restringono a vicenda: dopo ogni scelta il server risponde con i paesi, le regioni, i mesi e gli aeroporti che hanno ancora partenze.

03

Hotel, voli e camere

I risultati si ordinano per prezzo, categoria o tipologia. Un hotel si apre con le sue foto, il tour operator, i voli di andata e ritorno e le camere disponibili per il gruppo; si possono aggiungere camere e cambiare voli e date, e il totale si aggiorna.

04

Dal preventivo alla prenotazione

Il preventivo mette su un’unica pagina voli, soggiorno e assicurazione. Alla conferma l’app chiede i dati di ogni viaggiatore di ogni camera (titolo, nome, telefono, data di nascita e codice fiscale), poi l’assicurazione facoltativa, le condizioni e un riepilogo con i consensi richiesti dal contratto.

05

Pagare con MyBank

Il checkout nel codice dell’ultimo rilascio paga con bonifico MyBank: l’app apre la pagina di pagamento dell’agenzia, il cliente sceglie la sua banca, accede e lì autorizza il bonifico, poi torna nell’app con la vacanza pagata. Le versioni precedenti accettavano carte tramite Stripe, e ho realizzato anche un checkout con carta su Nexi.

06

Un consulente, in agenzia o in video

Un cliente che ha effettuato l’accesso trova i suoi dati già compilati: sceglie un giorno, un orario e l’argomento dell’incontro, e un consulente da incontrare in agenzia o in videochiamata. Per l’accesso si usa l’account CriluMy dell’agenzia, oppure Google, Facebook e Apple.

Sotto il cofano

Come è stato realizzato

Dialogare con un sistema di prenotazione viaggi

Tutto arriva dal server di prenotazione dell’agenzia, un web service ASP.NET le cui richieste incapsulano i campi in una stringa JSON dentro un JSON, e le cui risposte fanno lo stesso. L’app le trasforma in modelli tipizzati e BLoC su stream RxDart: la ricerca tiene allineati destinazioni, mesi e aeroporti, e la prenotazione porta gruppo, camere, voli e preventivo da una schermata all’altra.

Pagamenti, e un plugin

Per i pagamenti con carta di Nexi ho scritto nexi_payment, un plugin Flutter sopra gli SDK Android e iOS di Nexi, pubblicato su pub.dev a giugno 2020; lo mantengo tuttora. Nell’app sono arrivate prima le carte tramite Stripe e poi Nexi, quindi MyBank tramite GestPay (2020–2021), con l’app che apre la pagina di pagamento dell’agenzia in una web view e legge l’esito dall’indirizzo a cui la pagina ritorna.

Gli account, e stare al passo con Flutter

Un accesso CriluMy viene verificato dal server dell’agenzia e replicato in Firebase Auth; Google, Facebook e Apple passano da Firebase e vengono associati all’account CriluMy del cliente tramite nome utente o e-mail, oppure ne aprono uno nuovo. Il progetto è nato su una beta di Flutter nel 2018 e ha seguito Flutter fino alla 2.x: il nuovo embedding Android nel 2020, la sound null safety per la 2.0 nel 2021.

Registrare un’app uscita dagli store

L’app è vera. Le vacanze sono inventate.

L’app non è più sugli store, ma l’agenzia è in attività, e il suo sistema di prenotazione, le sue offerte e i suoi clienti le appartengono. Per questo le registrazioni usano una copia dell’ultimo rilascio che funziona in autonomia, con un sostituto per tutto ciò che c’è dietro.

  1. 1

    L’ultimo rilascio, compilato per il browser

    La versione 2.0.1, compilata per il web con Flutter 2.10, di qualche mese più recente dell’app, a cui si fa credere di girare su un iPhone. La ricerca e la prenotazione in-app sono riattivate com’erano nella 1.6, dopo aver corretto i pochi errori di null safety in quelle schermate.

  2. 2

    Un server di prenotazione dentro la pagina

    A ogni richiesta dell’app risponde, nella pagina, un sostituto che parla il formato del web service, a partire da un catalogo inventato: nove hotel dalla Sardegna alle Maldive, due tour operator, voli da cinque aeroporti, camere e preventivi. L’accesso gira sul Firebase in memoria usato nei test.

  3. 3

    Immagini disegnate, persone inventate

    Le fotografie dei fornitori restano fuori: uno script disegna ogni spiaggia, piscina e camera, i ritratti dei consulenti e i loghi dei tour operator. I consulenti, il cliente e le banche sono inventati, e le pagine della banca sono disegnate dalla demo.

  4. 4

    Registrata offline

    Lo script di registrazione blocca qualsiasi richiesta diretta fuori dalla macchina, così una ripresa non può raggiungere i sistemi dell’agenzia.

Il logo, l’interfaccia e le sue icone sono quelli dell’app. Offerte, hotel, prezzi, voli, consulenti, cliente, banche e immagini sono contenuti di esempio creati per questo portfolio.

Hotel

Qui non c’è una demo da provare: l’agenzia è in attività, quindi questa pagina mostra registrazioni con contenuti di esempio.

Ogni schermata

La raccolta completa degli screenshot

  • OfferteUn carosello di offerte con prezzo, hotel e date.
  • OffertaFoto, prezzo a persona, trattamento, aeroporto di partenza e date.
  • Hotel e serviziL’hotel, le sue stelle e cosa include l’offerta.
  • Chiedi all’agenziaUna richiesta sull’offerta, inviata all’agenzia.
  • RicercaVolo + soggiorno, solo soggiorno o ricerca libera.
  • DestinazioniPrima i paesi, poi le regioni.
  • PartenzaI mesi con partenze disponibili.
  • RisultatiHotel con date e prezzo, ordinati per prezzo, categoria o tipologia.
  • HotelFoto, tour operator, stelle e date.
  • Voli e camereVoli di andata e ritorno, le camere e il loro trattamento.
  • PreventivoVoli, soggiorno e assicurazione, prima della prenotazione.
  • ViaggiatoriOgni viaggiatore di ogni camera: titolo, nome, telefono, data di nascita e codice fiscale.
  • Data di nascitaSi sceglie da un calendario.
  • Assicurazione e condizioniL’assicurazione facoltativa e le condizioni contrattuali.
  • CheckoutIl riepilogo della prenotazione, i consensi e il totale.
  • MyBankIl cliente sceglie la sua banca (pagina disegnata dalla demo).
  • PagatoDi nuovo nell’app: pagamento effettuato, con una conferma via e-mail in arrivo.
  • AppuntamentoI dati del cliente, già compilati, e il giorno e l’ora.
  • ConsulentiIn agenzia o in videochiamata (consulenti inventati).
  • AccessoL’account CriluMy dell’agenzia.
  • RegistrazioneNome, e-mail, un nome utente e una password.

Prossimo caso di studio

TEPY →