Mirobody
인간 건강의 표준 레지스트리, 약 2천 개 임상·생활 지표를 하나의 언어로 정리
판단 없이 감정을 나눌 수 있는 비밀 공간, 필요 시 전문가와 연결됩니다. 가봉 전용
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.
건강TypeScript · CSSGitHub @Nelge-3D온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기YURA, compagne d'écoute émotionnelle pensée pour le Gabon : conversation en streaming et mode vocal mains libres (Next.js, Gemma 4).
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
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