← Tutti i progettiCase study · 02

Atlas

Un travel planner con AI che trasforma una destinazione e qualche preferenza in un itinerario giorno per giorno, con dati di volo reali alle spalle.

Ruolo

Full Stack Developer

Tipo

Progetto personale

Anno

2024

Categoria

Sviluppo Web · Integrazione AI

React 19Java Spring BootPostgreSQLGroqOpenAIAmadeus APIGoogle OAuthSupabaseTailwind CSSViteDocker
La dashboard di Atlas mostrata su un mockup di laptop
Panoramica

Atlas è una piattaforma full-stack per pianificare viaggi che ho progettato e costruito dall'inizio alla fine. Scegli una destinazione, imposti date e preferenze e Atlas genera un itinerario completo con l'AI, poi ci sovrappone dati di volo reali perché il piano sia qualcosa che puoi davvero prenotare.

Ho seguito tutto il prodotto: il front-end React, la REST API in Java Spring Boot, il database PostgreSQL su Supabase, l'autenticazione con JWT e Google OAuth e la pipeline AI. È nato come un modo per capire fin dove potessi spingere gli LLM dentro un'applicazione vera, ed è diventato il progetto in cui ho imparato di più sulla performance.

La sfida

Pianificare un viaggio è frammentato: i voli su un sito, le idee sparse tra blog e mappe, e nessun posto che trasformi un'idea vaga in un piano concreto. L'obiettivo era costruire quel posto. La parte difficile è stata rendere la generazione AI abbastanza veloce da sembrare una funzionalità di prodotto e non una demo.

01

Il primo stack AI impiegava oltre cinque minuti per generare un singolo itinerario

02

I dati di volo dovevano essere reali, tramite l'API Amadeus, con il suo flusso di autenticazione e i suoi rate limit

03

L'accesso doveva funzionare sia con email e password sia con Google OAuth, su un progetto portato avanti da sola e senza budget

Processo

Come è nato

Panoramica delle schermate principali di Atlas
La dashboard di Atlas con i viaggi salvati
La schermata del generatore di itinerari di Atlas
01

Progettare il flusso

Ho mappato il percorso prima di scrivere codice: accesso, scelta della destinazione, regolazione delle preferenze, generazione, rifinitura. Ogni schermata risponde a una domanda sola, così il passaggio AI non sembra mai una scatola nera.

02

Costruire l'API e il modello dati

Il back-end Spring Boot espone una REST API per utenti, viaggi e itinerari, con PostgreSQL su Supabase. Le ricerche voli tramite Amadeus vivono in un servizio a parte, isolate dalle chiamate AI, così ogni integrazione può cambiare senza toccare l'altra.

03

Rendere veloce l'AI

La prima versione girava in Python con Ollama e un modello Mistral locale. Funzionava, ma un itinerario richiedeva più di cinque minuti. Ho spostato l'inferenza su Groq e OpenAI e ho rivisto i prompt di conseguenza, portando il tempo di risposta a pochi secondi.

Decisioni chiave

Le scelte che hanno definito il prodotto

Groq e OpenAI al posto di un modello locale

Perché

L'inferenza locale era gratuita ma troppo lenta per un flusso interattivo. I modelli ospitati hanno reso la generazione quasi istantanea e mi hanno permesso di scegliere il modello giusto per ogni passaggio.

Compromesso

Ora l'app dipende da provider esterni e paga a richiesta.

JWT più Google OAuth

Perché

Email e password con JWT mantengono la API stateless, mentre Google OAuth toglie attrito a chi vuole solo provare l'app.

Compromesso

Due strade di accesso significano il doppio dei casi limite da gestire e testare.

Voli reali dall'API Amadeus

Perché

Un itinerario è utile solo se puoi agirci. I dati di volo in tempo reale rendono il piano prenotabile invece che un elenco di ipotesi.

Compromesso

Un'integrazione in più da mantenere, con rate limit e un'autenticazione propria.

Risultati

Che cosa è cambiato

5 min → secondi

Generazione AI dell'itinerario, prima e dopo il passaggio a Groq e OpenAI

2

Metodi di accesso: email e password con JWT, e Google OAuth

Reali

Dati di volo dall'API Amadeus dentro ogni piano

Galleria
La schermata di accesso di Atlas
La pagina Services di Atlas, con il titolo Adventure in grande e una griglia di fotografie di paesaggi
La pagina Adventure di Atlas, con il form per generare un itinerario da destinazione, giorni, budget e interessi
Che cosa ho imparato

La performance è una funzionalità di prodotto. Un'attesa di cinque minuti faceva sembrare l'AI rotta anche quando il risultato era buono; pochi secondi hanno reso lo stesso risultato immediato.

Tenere ogni servizio di terze parti dietro il proprio livello ha ripagato nel momento in cui ho cambiato provider AI. La prossima volta definirei la forma dei dati dell'itinerario prima di scrivere il primo prompt, così front-end e modello vanno d'accordo dal primo giorno.