Startup · Co-fondateur et CTOrecapro.ai
recapro.ai · comptes rendus de réunion par IA, sans fournisseur d'IA tiers
recapro.ai produit des comptes rendus de réunion par IA sans passer par un fournisseur d'IA tiers. Co-fondateur et CTO, je suis l'architecte et le principal développeur de la plateforme, du mobile jusqu'à l'inférence. 227 organisations inscrites en septembre 2026. Cité dans Les Échos en avril 2026.
Équipe : les co-fondateurs ; produit mené en parallèle de mes missions.
L'architecture
- Application mobile React Native offline-first : une réunion s'enregistre sans réseau et se synchronise ensuite.
- Application de bureau Tauri, API Fastify et workers sur une file de jobs dans Postgres.
- Une seule source de vérité : le schéma PostgreSQL génère les types de l'API, et les deux applications consomment le contrat OpenAPI qui en découle : le typage tient de bout en bout, pour qu'une incohérence entre la base, l'API et les écrans casse la compilation avant d'atteindre la production.
IA auto-hébergée
Transcription, séparation des locuteurs et LLM auto-hébergés sur du matériel Nvidia.
- Réunions de plusieurs heures résumées en un seul appel, sans résumé en cascade qui perd des détails : le budget de fenêtre est calculé avant l'appel.
- Boucles de génération traitées par le réglage de l'échantillonnage, plutôt que par une régénération qui les aurait cachées.
- J'ai supprimé un format de sortie que le modèle ratait en production, au lieu de durcir le parseur.
RAG « chat avec ses réunions », filtré par les droits d'accès
J'ai écarté un produit RAG clé en main : il ne filtrait pas les résultats selon les droits de l'utilisateur, et c'est la partie difficile.
- Recherche hybride, vectorielle et plein texte. Le filtre d'accès s'applique dans la requête SQL, avant la limite de résultats : personne ne voit un extrait qui ne lui appartient pas.
- Quand la recherche ne trouve rien, le modèle n'est pas appelé : l'assistant le dit au lieu d'inventer.
- Évaluation où une réponse inventée compte à part d'un refus à tort, pour qu'une baisse des refus ne cache pas des hallucinations.
Réunions bloquées en attente de résumé
Cinquante-cinq réunions restaient bloquées « en attente de résumé ». Un mécanisme de rattrapage était déjà écrit. Je l'ai jeté pour une correction de quatre lignes : le résumé démarre à la fin de la transcription, et l'état bloquant a disparu des deux applications, y compris sur les versions déjà installées.
Exploitation
- Tests de bout en bout obligatoires avant chaque fusion, sur chaque plateforme.
- Alertes de production versionnées et relues avec le code, pour qu'elles évoluent avec lui. Une box qui se fige est signalée même quand son processus continue de répondre.
- Mobile, bureau, API et box on-premise se mettent à jour à des rythmes différents : migrations additives uniquement, et la CI bloque un changement natif sans version majeure.
Une box on-premise pour les clients qui refusent le cloud
Installeur pour matériel Nvidia : LLM, transcription et séparation des locuteurs sur le matériel du client. Chaque étape vérifie l'état réel au lieu de se fier à un fichier, et l'inférence n'est exposée qu'après la preuve que le contrôle d'accès répond. L'installeur a été vérifié sur une box de test.
Stack technique
EnvironnementTypeScript · React Native · Expo · PowerSync · Tauri · Fastify · PostgreSQL · Supabase · Kubernetes · vLLM · whisper.cpp · pyannote
Mobile et bureauReact Native / Expo · PowerSync (offline-first) · Tauri
BackendFastify · file de jobs PostgreSQL · Supabase · contrat OpenAPI généré
IAvLLM · whisper.cpp · pyannote · pgvector · Vercel AI SDK
InfraKubernetes (Helm) · Grafana · Cloudflare · matériel Nvidia
LangagesTypeScript · SQL