React App : 🇹🇭 Thai Keyboard Trainer

Sabai Thai (สบาย) : suite complète pour apprendre le thaï — phonétique, tons, clavier, vocabulaire, grammaire, gamification et tuteur IA. PWA installable, offline, sync multi-appareils.

Le projet a pas mal évolué depuis la première version. Ce n’était au départ qu’un entraîneur de clavier thaï : c’est aujourd’hui une app complète, Sabai Thai (สบาย), avec phonétique, tons, vocabulaire, grammaire, gamification et tuteur IA — le tout installable en PWA.

Nouveau lien :
👉 https://thai.domainelibre.com/

Le constat de départ

Apprendre le thaï, c’est déjà un défi. Y ajouter un clavier totalement différent du QWERTY/AZERTY, et beaucoup abandonnent avant de taper une phrase correcte. La plupart des outils se concentrent sur la lecture ou le vocabulaire — très peu entraînent la frappe réelle, encore moins en lien avec la disposition physique du clavier.

Ce que c’est devenu

Une suite d’apprentissage gamifiée organisée en 5 sections : Home, Typing, Sounds, Words, More. Elle parle le thaï à voix haute, synchronise la progression entre appareils, et peut appeler un tuteur IA pour expliquer les erreurs. Toujours accessible en une ou deux tapes.

Les 4 sections d’apprentissage

🔤 Sounds — Phonétique & tons
  • Voyelles thaïes, positions, paires courtes/longues, illustrées
  • 44 consonnes triées par classe (haute, moyenne, basse)
  • Arbre de décision interactif pour les règles de ton + grille classe × condition
  • Classification des syllabes vivantes/mortes
  • Carrousel de l’alphabet + mode lecture
⌨️ Typing — Clavier
  • Leçons sur la disposition Kedmanee, rangée par rangée
  • Clavier visuel avec surbrillance en temps réel de la touche à presser
  • Challenge de frappe chronométré (10 mots)
  • Mode exploration libre + dictée
  • Clavier virtuel à l’écran, support mobile complet
📚 Words — Vocabulaire
  • 1 300+ mots répartis en 25+ catégories
  • Flashcards, phrases, quiz de lecture
  • Répétition espacée (SRS) — les mots reviennent au bon moment
  • Révision rapide des leçons récentes
🔢 More — Grammaire & extras
  • Classificateurs (ลักษณนาม) — le système de mots-compteurs thaï
  • L’heure à la thaïe (ตี, โมง, ทุ่ม)
  • XP, niveaux, streaks quotidiens, missions et badges

Gamification & comptes

Jouable instantanément en invité, sans mur de connexion — une session est créée automatiquement. Un compte optionnel permet de synchroniser la progression entre appareils, avec classement, abonnements et fil d’activité. XP, niveaux, streaks, cœurs, missions quotidiennes, badges, confettis à chaque level-up.

Tuteur IA (optionnel)

Un endpoint dédié explique pourquoi une réponse était fausse, et génère (avec mise en cache) des phrases d’exemple. Basé sur l’API OpenAI — l’app fonctionne normalement sans clé configurée, seules les fonctions IA se désactivent proprement.

Architecture

Sabai Thai architecture: browser PWA, nginx, React SPA, Node API, OpenAI

Le front reste une SPA React 19 + Vite, servie en statique par nginx. Nouveauté : un petit backend Node/Express (server/) gère l’authentification, la sync de progression, le social et les endpoints IA — accessible uniquement via le reverse proxy nginx, jamais exposé directement.

Déploiement

docker-compose monte toute la stack : nginx sert le front buildé et reverse-proxy /api/ vers le conteneur Node. Le dossier server/data est monté en volume pour persister comptes, progression et cache IA entre les redémarrages.

Le déploiement continu tourne sur un runner GitHub Actions auto-hébergé : à chaque push sur main, le runner pull le code, rebuild et relance les conteneurs. Le runner ouvre une connexion sortante vers GitHub — aucun port entrant à ouvrir sur pfSense, aucun forward WAN. Un Cloudflare Tunnel peut exposer l’app sans dépendre d’un accès SSH entrant.

Stack technique

  • React 19 + Vite 7 — frontend
  • Node.js / Express — API backend
  • API OpenAI pour les explications d’erreurs et exemples générés
  • nginx — hébergement statique + reverse proxy
  • Docker / Docker Compose pour le déploiement
  • PWA installable, fonctionne hors ligne
  • CSS vanilla, pas de framework UI

Licence MIT. Le code est structuré pour rester lisible même côté data : le lexique (1 300+ mots), les règles de ton, les classificateurs et les leçons de clavier vivent dans des fichiers JSON/JS séparés, avec un guide dédié pour tout LLM appelé à générer de nouveaux exercices.

👉 Tester l’outil :
https://thai.domainelibre.com/