Qu'est-ce que PolyGloChet ?
PolyGloChet est une application de messagerie bilingue conçue pour faciliter l'apprentissage du français et du khmer entre deux personnes distantes. Chaque message envoyé est automatiquement analysé, corrigé et traduit dans les trois langues par Gemini AI — sans interrompre la conversation.
Correction grammaticale en temps réel
Dès que l'utilisateur commence à taper, un debounce d'une seconde déclenche une analyse Gemini :
- Détection automatique de la langue du message (FR, EN ou KH)
- Suggestion de correction affichée dans une popup inline avant l'envoi
- Explication pédagogique : Gemini justifie chaque modification dans la langue natale de l'auteur
- L'utilisateur peut accepter la correction (texte remplacé automatiquement), la refuser ou l'ignorer
- Si la phrase est correcte, Gemini répond simplement "Parfait !" avec un encouragement
Leçons granulaires — une entrée par faute
Contrairement à une correction globale, PolyGloChet décompose chaque message en autant de leçons qu'il y a de fautes :
- Exemple : "je veut manger du riz a la maison" → 2 leçons distinctes : "veut → veux" et "a → à"
- Chaque leçon contient : l'original, la version corrigée, et l'explication grammaticale
- Les leçons sont générées dans la langue natale de l'auteur (français pour Chet, khmer pour Lys)
- Une leçon n'est générée que si une vraie faute est détectée — pas de bruit inutile
Historique des corrections (GCS)
Toutes les leçons sont persistées dans Google Cloud Storage (chat/lessons.json) au moment de l'envoi du message :
- Indépendant de la suggestion : les leçons sont sauvegardées qu'on accepte ou refuse la correction
- Consultable à tout moment via le panel 📖 dans l'application ou via la démo portfolio
- Chaque entrée conserve : l'auteur, la langue, l'original, la correction, l'explication et la date
- Ordre antichronologique (plus récent en premier)
Traductions trilingues automatiques
Chaque message est traduit en français, anglais et khmer par Gemini dès l'envoi :
- Affichage des 3 traductions sous chaque bulle de message
- Flag de langue (🇫🇷 🇬🇧 🇰🇭) indiquant la langue originale du message
- Si la suggestion a déjà fourni les traductions, elles sont réutilisées — pas d'appel Gemini double
- Traduction absente pour les messages trop courts (< 2 caractères)
Reconnaissance vocale (VAD)
L'envoi vocal repose sur une pipeline de détection d'activité vocale entièrement côté client :
- Silero VAD v5 via ONNX Runtime Web — détection de début/fin de parole sans serveur
- Trois états visuels : ⏳ initialisation ONNX, 🔴 écoute active (pulsant), 🟢 voix détectée (pulsant)
- Segments < 0.8s filtrés (évite les bruits courts parasites)
- Audio capturé en base64 → envoyé à Gemini (
geminiTranscribeAndTranslate) → texte + traductions
- Badge 🎤 affiché sur les bulles de messages vocaux
Coffre multimédia
Les images et vidéos partagées dans le chat sont stockées dans Google Cloud Storage dans le même format que le coffre (YYYY/MM/DD/filename) :
- Compression automatique côté client (WebP/JPEG, max 2048px via Canvas API)
- Signed URLs pour upload et téléchargement sécurisé (expiration 1h, cache Map)
- Les images partagées apparaissent automatiquement dans le coffre photo — pas de synchronisation nécessaire
- Semaphore (max 3 requêtes concurrentes) pour éviter la saturation des signed URLs
Actions sur les messages
Une barre d'actions apparaît sur sélection d'un message :
- Copier : copie le texte original + toutes les traductions dans le presse-papiers
- TTS (Text-To-Speech) : lecture à voix haute via Web Speech API en 🇫🇷 fr-FR, 🇬🇧 en-US ou 🇰🇭 km-KH
- Supprimer : uniquement par l'auteur du message (vérifié côté backend)
Navigation et interface
- Navigation historique : boutons ← → pour consulter les messages des jours précédents
- Double horloge : heure de Paris (Europe/Paris) et de Phnom Penh (Asia/Phnom_Penh) sous chaque bulle
- Polling toutes les 8s pour les messages du jour (nouveaux messages de l'autre côté)
- Interface bilingue FR + Khmer dans toute l'UI
- PWA installable : fonctionne hors-ligne, icône sur l'écran d'accueil
Architecture technique
- Frontend : SvelteKit 5 + Svelte 5 runes (
$state, $derived, $effect) + TypeScript
- Backend : Nuxt 3 / Nitro sur Vercel (serverless)
- Stockage : Google Cloud Storage — messages
chat/YYYY/MM/DD.json, leçons chat/lessons.json
- AI : Vertex AI Gemini 2.5 Flash — traduction, correction, transcription audio
- Auth : Google Identity Services (FedCM) — JWT vérifié stateless côté backend
- VAD : @ricky0123/vad-web + onnxruntime-web (Silero VAD v5)