Full Stack2026

Joule Zero Point

Gioco di carte strategico cyberpunk full-stack, con un assistente in gioco che risponde citando le carte reali del database.

Vue 3Node.jsMongoDBAI Assistant
Screenshot di Joule Zero Point
Problema

Il problema: un assistente che parla di dati tuoi non può ricordarseli

Un gioco di carte vive di dettagli esatti: costo, statistiche, effetto, interazioni fra carte. Un assistente che risponde a queste domande andando a memoria produce risposte plausibili e sbagliate, che in un gioco competitivo valgono meno di nessuna risposta. E c'è un secondo problema, meno visibile: un progetto nato come esame, ma pubblicato online con registrazione, ha utenti veri, quindi obblighi veri.

  • Domande su dati precisi: un valore ricordato male è una risposta sbagliata detta con sicurezza
  • Il catalogo cambia: le risposte devono seguire il database, non una descrizione congelata nel prompt
  • Un progetto dimostrativo con utenti registrati tratta comunque dati personali reali
  • Autenticazione, recupero password e verifica dell'indirizzo email da costruire, non da simulare
  • Un gioco da tavolo digitale deve poter uscire dal browser: mazzi da stampare e da usare al tavolo
  • Serve un'interfaccia che regga sul telefono, dove si gioca davvero, non solo su desktop
Soluzione

La soluzione: l'assistente interroga il database, non la propria memoria

Il Terminale Zero Point riceve la domanda e, quando serve un dato, chiama uno strumento di ricerca sul database delle carte con i filtri che ha estratto dalla domanda: tipo, costo, statistiche, ordinamento. Sintetizza poi la risposta sui risultati veri, in streaming, restando dentro il personaggio. Se una carta non esiste, non la inventa: non la trova.

  • Tool calling su MongoDB con filtri strutturati (tipo, costo, statistiche, ordinamento, limite), non ricerca a memoria
  • Risposte in streaming con Claude Haiku 4.5, un solo giro di strumento per turno: cercare e poi rispondere, non ciclare
  • Errori distinti per classe tipizzata dell'SDK invece che per testo, così il giocatore legge un messaggio diverso per saturazione, autenticazione e rete
  • Identità completa: JWT, verifica dell'indirizzo email, gestione dell'alias, recupero password
  • Difese applicate e non dichiarate: helmet, sanitizzazione delle query, protezione dall'inquinamento dei parametri, rate limiting, validazione degli input
  • Export dei mazzi in PDF e in kit per il tavolo generati nel browser, senza passare dal server
  • PWA con nginx che serve le pagine e inoltra le API: stessa origine, header di cache corretti
  • Cancellazione dell'account su richiesta che rimuove davvero tutto, conversazioni comprese, e ritira i voti dai mazzi altrui
  • Cancellazione automatica degli account inattivi da 24 mesi, con il lavoro periodico registrato nel codice e non nel crontab dell'host
  • 73 test automatici sul backend, dai servizi alle rotte protette
Architettura

Flusso ad alto livello

Domanda del giocatoreTerminale Zero PointTool call con filtriDatabase carte (MongoDB)Claude Haiku 4.5Risposta in streaming
Cosa dimostra

Competenze dimostrate

  • Prodotto full-stack completo dal login al deploy: Vue 3 PWA, Node.js + Express 5, MongoDB
  • Tool calling su dati proprietari strutturati, con la scelta di far interrogare il database invece di descriverlo nel prompt
  • Streaming di risposte AI verso il browser e gestione degli errori per classe, non per messaggio
  • Sicurezza applicativa come impostazione predefinita: header, sanitizzazione, rate limiting, validazione
  • Autenticazione JWT con verifica dell'indirizzo email e recupero password realmente funzionanti
  • Generazione di PDF e archivi lato client, per non far dipendere dal server una funzione che non ne ha bisogno
  • Deploy su infrastruttura propria con nginx come reverse proxy e pagine e API sulla stessa origine
  • Conservazione dei dati trattata come parte del prodotto: retention applicata, cancellazione completa, informativa allineata al codice
Replicabilità

Come questo approccio può aiutare un team

Il punto riutilizzabile è la scelta di far interrogare al modello un database strutturato invece di riassumerglielo nel prompt. Quando i dati hanno campi e valori precisi, un catalogo prodotti, un listino, uno scadenzario, una ricerca per filtri dà risposte verificabili e resta corretta quando i dati cambiano, mentre un contesto incollato nel prompt invecchia il giorno dopo. È l'approccio complementare al recupero semantico su documenti: quello serve quando l'informazione è in un testo, questo quando è in una tabella.

  • Assistente su catalogo prodotti con filtri reali su prezzo, disponibilità e caratteristiche
  • Interrogazione in linguaggio naturale di un listino o di un tariffario che cambia spesso
  • Supporto interno su dati gestionali: ordini, scadenze, stato delle pratiche
  • Consultazione di regolamenti e configurazioni tecniche dove il valore esatto conta
  • Assistente per community di prodotto, che risponde citando i dati ufficiali e non il sentito dire

Hai dati strutturati che vorresti poter interrogare a voce, con risposte verificabili invece che plausibili? Posso aiutarti a costruirlo.

Parliamo del tuo workflow

Documentazione tecnica completa

README, configurazione e istruzioni di setup su GitHub.

README su GitHub