IA · Voix · Mobile · 11/11

ChefMate

le projet « cuisineur »

Un chef culinaire IA conversationnel, 100% vocal et mains libres : il génère, adapte et guide vos recettes en temps réel, en cuisine, sans toucher l'écran.

Le parcours de cuisine guidé de ChefMate, étape par étape.
Le parcours de cuisine guidé de ChefMate, étape par étape.

Comment ça est né

ChefMate — que j'appelle « cuisineur » — est né d'un besoin très concret : cuisiner, c'est les mains pleines de farine, de sucre, de gras. On ne peut pas toucher un écran. L'idée : un assistant culinaire qu'on utilise à la voix, entièrement mains libres, qui génère une recette, s'adapte quand on change d'avis, et guide en temps réel.

C'est aussi une exploration technique de la voix temps réel : deux modes vocaux, dont un Gemini Live en WebSocket qui descend à ~100 ms. Le défi n'est pas seulement de faire une app de recettes, c'est de faire que la voix soit aussi fluide qu'un échange humain, en pleine cuisine.

Le contexte

On lui parle, il génère une recette ; on lui dit « plus d'eau » et il adapte ; on lui demande « étape suivante » et il la lit à voix haute. Mains libres, en direct. C'est un chef conversationnel, pas un livre de recettes qu'on consulte.

Le projet est hybride : une app web en React 19 et une app Android via Capacitor 8, sur une seule base de code. Le cœur, c'est la voix. Il y a deux modes : un mode « legacy » qui enchaîne reconnaissance vocale (Vosk), l'API et la synthèse (Edge TTS) — 20 à 40 secondes — et un mode Gemini Live en WebSocket temps réel qui descend à environ 100 millisecondes.

Le défi, c'est de rendre les deux modes indiscernables pour l'utilisateur : même flow de recette, mêmes commandes (suivant, précédent, timer, modifier), même retour audio. Seule la latence diffère. C'est cette exigence qui a structuré toute l'architecture : le mode et la latence sont isolés derrière un router, pour que le reste du code soit agnostique.

Le code des services dépasse les 8 000 lignes, organisé en six services voix (gestion Gemini Live, router de modes, orchestration TTS/STT, synthèse), plus un plugin de capture audio PCM 16 kHz fait maison pour la précision. Autour, il y a les timers, les favoris, le mode marché (recettes selon les produits de saison) et l'export.

Le point dur

Rendre deux modes vocaux indiscernables à l'usage

Le point dur, c'est l'indiscernabilité : le mode legacy (20-40 s) et le mode Gemini Live (~100 ms) doivent se comporter exactement pareil, même flow, mêmes commandes, même retour. Si l'utilisateur sent la différence, l'expérience est cassée. J'ai dû isoler la différence de latence derrière un router de modes, pour que le reste du système soit agnostique — et que les deux modes partagent le même flow de recette.

Le deuxième point dur, c'est la précision de la capture : en cuisine, il y a du bruit, et la reconnaissance dépend de la qualité du signal. J'ai fait un plugin de capture audio PCM 16 kHz maison, parce que la capture par défaut n'était pas assez précise. C'est un détail technique qui change toute la fiabilité de la voix.

Fonctionnalités

100% vocal, mains libres génère · adapte · guide

On parle, l'IA répond à voix haute. Pas d'écran à toucher en plein milieu d'une recette.

Deux modes vocaux 20-40 s → ~100 ms

Legacy (Vosk → Gemini → Edge TTS) et Gemini Live (WebSocket temps réel), avec l'objectif qu'ils se ressemblent à l'usage.

Commandes en cuisine suivant · précédent · timer · modifier

On avance dans la recette, on revient, on lance un timer, on change une quantité — tout par la voix.

Mode marché recettes saisonnières

Un mode « marché » qui propose des recettes selon les produits de saison disponibles.

8 214 lignes de services 6 services voix

Gestion Gemini Live, router de modes, orchestration TTS/STT, synthèse — plus un plugin de capture PCM 16 kHz maison.

Web + Android React 19 · Capacitor 8

Une seule base de code, servie en web et packagée en APK, avec timers, favoris et export.

Arbitrages techniques

Deux modes plutôt qu'un seul Le legacy est fiable et partout ; Gemini Live est ultra-réactif mais plus fragile. Contrepartie : Deux chemins à maintenir et à rendre indiscernables — c'est tout le router de modes.
Plugin PCM 16 kHz maison La capture par défaut n'était pas assez précise pour la reconnaissance en cuisine. Contrepartie : Un plugin natif à développer et à maintenir sur Capacitor.
Une seule base de code (web + Android) Capacitor permet de servir la même app en web et en APK, sans divergence. Contrepartie : Les contraintes web et native s'imbriquent ; certaines APIs diffèrent entre les deux.
Mains libres par la voix En cuisine, on ne touche pas l'écran ; c'est l'usage réel. Contrepartie : Tout doit passer par la voix, donc la fiabilité de la reconnaissance est critique.

Stack technique

FrontendReact 19 · TypeScript · Vite 7 · Tailwind 4
MobileCapacitor 8 · plugin PCM 16 kHz maison
VoixGemini Live (WebSocket) · Vosk · Edge TTS
Services6 services voix · router de modes
ExtrasFirebase auth · timers · favoris · export

En chiffres

0lignes de services
~100 mslatence Gemini Live
0services voix
0modes vocaux
16 kHzcapture PCM maison

Parcours du projet

  1. Base

    App web + Android, génération de recettes en vocal, commandes de base, micro natif.

  2. Deux modes vocaux

    Legacy (Vosk → Gemini → Edge TTS) puis Gemini Live WebSocket temps réel (~100 ms).

  3. Alignement

    Rendre les deux modes indiscernables à l'usage : même flow, mêmes commandes, même retour audio.

  4. Précision

    Plugin de capture PCM 16 kHz maison, timers, mode marché, favoris, export.

  5. Services

    6 services voix, 8 214 lignes, router de modes — une architecture complète.

Ce que ça a rendu

  • 01
    La voix en cuisine

    Un chef conversationnel 100% mains libres, qui s'adapte en direct — pas un écran à toucher.

  • 02
    Deux modes, un usage

    Legacy et Gemini Live indiscernables à l'usage ; seule la latence diffère.

  • 03
    Précision technique

    Un plugin PCM 16 kHz maison et un router de modes — la voix est fiable en conditions réelles.