Mirobody
The canonical registry of human health — roughly two thousand standardized indicators, clinical and lifestyle, resolved into one language.
Un espace confidentiel pour parler de ce que tu ressens, sans jugement et sans compte, et être orienté·e vers un professionnel quand tu en as besoin. Pensé pour le Gabon.
Translation pending
HealthTypeScript · CSSGitHub @Nelge-3DOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
YURA, compagne d'écoute émotionnelle pensée pour le Gabon : conversation en streaming et mode vocal mains libres (Next.js, Gemma 4).
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Tu peux en parler. YURA est une compagne d'écoute émotionnelle pensée pour le Gabon : un espace pour poser ce que l'on ressent, sans jugement et sans compte, à l'écrit ou à voix haute, avec une orientation vers des professionnels quand c'est nécessaire.
En ligne : https://yura-rust.vercel.app
Prototype présenté au Concours Art Numérique · Gabon 2026. YURA ne remplace pas un professionnel de santé. En cas de danger immédiat : 1300.
| Accueil (mobile) | Conversation | Mode vocal |
|---|---|---|
| Accueil (ordinateur) | Professionnels |
|---|---|
| Élément | Choix |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack), React 19, TypeScript strict |
| Modèle de conversation | Gemma 4 26B (gemma-4-26b-a4b-it) via l'API Gemini, réflexion désactivée ; secours automatique sur Gemini 2.5 Flash |
| Voix | Web Speech API (défaut) ou Gemini TTS ; reconnaissance vocale Web Speech (fr-FR) |
| Orbe du mode vocal | Three.js (shader WebGL) |
| Hébergement | Vercel, avec Vercel Web Analytics (sans cookie) |
Aucune base de données : l'historique et le résumé sont stockés dans le navigateur (localStorage).
/api/chat.{"emotion": …}, {"exercice": …}) ne s'affichent jamais, même un instant. Les tirets longs deviennent des virgules.En cas d'échec, aucun message d'erreur n'est sauvegardé : un bouton « Réessayer » apparaît.
Mesures du 27 octobre 2026 sur une conversation simulée de 30 messages (Gemma 4 26B, niveau gratuit).
| Mesure | Résultat |
|---|---|
| Premier mot affiché (médiane) | 1,15 s |
| Premier son (lecture automatique) | ~2,0 s |
| Taille d'une requête (tokens d'entrée) | plafonne vers 2 600 |
| Balises cachées visibles | 0 |
Taille des requêtes avant et après l'allègement du prompt et le résumé :
| Messages dans la conversation | Avant | Après |
|---|---|---|
| 2 | 4 814 | 1 487 |
| 20 | 5 472 | 2 145 |
| 60 | 6 941 | 2 248 |
| Modèle | Requêtes/min | Tokens/min |
|---|---|---|
| Gemma 4 26B | 30 | 16 000 |
| Gemini 2.5 Flash (secours) | 5 | 250 000 |
| Gemini 3.8 Flash TTS | 3 | 10 000 |
Avec ~2 500 tokens par requête, Gemma tient environ 6 messages par minute ; au-delà, la bascule sur Flash prend le relais. Gemini TTS en gratuit est trop limité pour une conversation entière : la voix du navigateur est donc utilisée par défaut.
Prérequis : Node.js 22.18 ou plus récent (24 recommandé, nécessaire pour npm test), et une clé API Gemini (AI Studio).
npm install
Crée un fichier .env.local à la racine (voir .env.example) :
GEMINI_API_KEY=ta_cle_api
Puis :
npm run dev
Ouvre http://localhost:3000.
npm test
44 tests unitaires (Node test runner, sans dépendance) : filtre des balises, découpage en phrases, nettoyage du texte avant lecture, résumé, écho du micro, conversion audio.
| Variable | Obligatoire | Défaut | Rôle |
|---|---|---|---|
GEMINI_API_KEY | oui | Clé de l'API Gemini (conversation, résumé, voix Gemini) | |
LLM_MODEL | non | gemma-4-26b-a4b-it | Modèle de conversation (option : gemma-4-31b-it) |
LLM_FALLBACK_MODEL | non | gemini-2.5-flash | Modèle de secours |
NEXT_PUBLIC_TTS_PROVIDER | non | webspeech | webspeech, auto (Gemini si configuré) ou gemini |
GEMINI_TTS_MODEL | non | Modèle Gemini TTS, ex. gemini-3.8-flash-lite-tts | |
GEMINI_TTS_VOICE | non | Voix Gemini TTS, ex. Vindemiatrix | |
TTS_DAILY_CHAR_LIMIT | non | 15000 | Plafond de caractères lus par jour et par utilisateur |
NEXT_PUBLIC_FEEDBACK_URL | non | Webhook Google Sheets pour l'avis de fin de conversation (voir docs/setup-feedback.md) |
Sur Vercel, seule GEMINI_API_KEY est indispensable : les autres ont des valeurs par défaut.
Le projet est relié à Vercel : chaque push sur main déploie la production.
app/
page.tsx accueil
chat/ conversation
teleconsultation/ page Professionnels
about/, privacy/ À propos, Confidentialité
dev/voices/ comparaison des voix (développement uniquement)
api/chat/ réponse en streaming (Gemma 4 + secours)
api/summary/ résumé des échanges anciens
api/tts/ voix Gemini (un bloc ou streaming)
components/
ChatWindow.tsx interface de conversation
voice/ mode vocal et orbe lumineux
site/ en-tête, pied de page, icônes
lib/
llm/ appel du modèle, filtre des balises, fenêtre et résumé
tts/ lecteur vocal, découpage en phrases, nettoyage du texte
voice/ reconnaissance vocale, filtre d'écho
yuraSystemPrompt.ts personnalité et règles de sécurité de YURA