Vai al contenuto
Sviluppo

online

Fumitabi

Super-app per imparare il giapponese parlato, pensata per diventare operativi prima e durante un viaggio.

https://app.fumitabi.com

Il problema

Diventare operativi in giapponese parlato prima e durante un viaggio richiede più fronti insieme: capire e rispondere a voce, ricordare nel tempo quello che si impara, leggere, scrivere a mano, seguire la grammatica. Le app li trattano come prodotti separati.

Cosa ho costruito

Fumitabi li integra in un unico Learning Engine. Il corso è una visual novel in cinquecento episodi, con scelte, missioni e vocaboli agganciati al dialogo, e intorno ci sono le conversazioni con personaggi AI su trentasei scenari (ordinare, chiedere aiuto, un’emergenza), parlate a voce nel browser con riconoscimento e sintesi; il ripasso spaziato; la scrittura a mano di kana e kanji con verifica dei tratti; trecento letture graduate per livello JLPT; un grammar lab da diciannove sezioni (particelle, contatori, keigo, pitch accent); l’import di video da YouTube con sottotitoli sincronizzati e furigana; un dizionario da oltre 165.000 voci. È una PWA: funziona offline, con una coda di sincronizzazione su IndexedDB.

Cosa c’è dentro

Il giapponese scritto non separa le parole: l’analisi morfologica passa da SudachiPy, non da un tokenizzatore a spazi. Le chiamate AI passano da un budget giornaliero per utente, prenotato in modo atomico con uno script Lua su Redis: se Redis non risponde, il sistema rifiuta invece di concedere chiamate non contabilizzate. La misura del cantiere:

Cosa Quanto
Righe di Python 80.000
Righe di TypeScript 65.000
Endpoint API 227
Migrazioni di schema 47
Test, fra backend e frontend 3.149

La parte difficile

Correggere la scrittura a mano senza un modello addestrato apposta. La verifica è geometria pura: i tratti dell’utente, campionati punto per punto, confrontati coi tracciati SVG di KanjiVG, 11.661 caratteri. Il caso che rompe tutto è il tratto fuso: due tratti scritti in uno che una distanza ingenua giudica «quasi giusti». Il rilevatore che li riconosce è stato calibrato sui kanji del livello N5, e la taratura sta scritta nel codice insieme ai suoi risultati sul set di prova: prima dell’ipotesi «tratto saltato», un’omissione su otto passava per buona; dopo, nessuna.

Stack

  • Python 3.12
  • FastAPI
  • SQLAlchemy 2 async
  • Postgres
  • Redis
  • ARQ
  • Claude API
  • SudachiPy
  • React 19
  • TypeScript
  • Vite
  • Tailwind 4
  • TanStack Query
  • PWA (Workbox)