Le butin · Lingot n°4

Franchement Ça Va,l’app qui fait le point sur le moral avec humour

Une app de prévention en santé mentale qui mise sur l’humour bienveillant.

Client
Client non cité
Période
juillet à septembre 2026
Rôle
Développeur full-stack, de la conception à la publication sur les stores
Type
Application mobile iOS et Android, API et back-office web
Statut
En production
Illustration : une roue de douze humeurs, une humeur cochée, un sourire au stylo

Le butin :Une application de santé mentale menée de la roue des humeurs jusqu’au chiffrement du journal et à la mise en production sur iOS et Android.

Sommaire du dossier
  1. Le repérage Contexte
  2. La cible Le problème
  3. Le plan La solution
  4. L’exécution Ce que j’ai réalisé
  5. Le matériel Stack technique
  6. Les imprévus Défis techniques
  7. Le bilan Résultats
  8. Pièces à conviction Captures et schémas

Le repérage · Contexte

Un client m’a confié la réalisation complète d’une application de santé mentale grand public, sous la marque FilouTech, de l’architecture à la publication sur les stores : l’application mobile, l’API, le back-office et l’infrastructure. Cinq lots, livrés entre juillet et septembre 2026.

La cible · Le problème

Prendre soin de son moral au quotidien reste intimidant, parfois culpabilisant. Le pari du produit : dédramatiser par l’humour pour qu’on ait envie de faire le point chaque jour, sans se sentir jugé ni « diagnostiqué ».

Utiliser l’humour sur un sujet pareil impose une règle absolue : savoir le couper net quand quelqu’un va mal.

Le défi était donc éthique autant que technique. Un humour jamais moqueur, et un garde-fou qui bascule vers un message rassurant et de vraies ressources dès qu’un signal de détresse apparaît.

Le plan · La solution

Chaque jour, l’utilisateur choisit son humeur sur une roue de douze humeurs, puis une carte « Je vis » qui décrit sa situation. Le serveur lui renvoie une touche d’humour adaptée (une phrase, une punchline ou un GIF), puis une Carte Action : une petite mission simple. La valider rapporte des SmileCoins et alimente un journal privé, avec l’historique et les tendances d’humeur. Jamais un diagnostic.

Le garde-fou veille en permanence, côté serveur. Si un signal sensible est détecté, l’humour est désactivé et l’utilisateur arrive sur un message rassurant et un espace d’orientation, « Franchement Ça Va Pas ». Des notifications rythment la journée, dont la question du soir : « As-tu ri aujourd’hui ? ». L’équipe du client édite tous les contenus depuis un back-office.

Application FlutteriOS et Android, mode hors ligneÉquipe du clientdans le navigateurServeur VPS · Docker ComposeCaddyHTTPS automatiqueAPI Node.jsExpress, TypeScript, PrismaGarde-foucoupe l’humour en cas de détressePostgreSQLjournal chiffréPlanificateurnotificationsBack-officeNext.jsService d’IAtouche d’humourNotifications pushFirebase Cloud MessagingIntégration continueGitHub ActionsHTTPSHTTPSpush
Application FlutteriOS et Android, hors ligneÉquipe du clientnavigateurServeur VPS · Docker ComposeCaddyHTTPS automatiqueAPI Node.jsExpress, TypeScript, PrismaBack-officeNext.jsGarde-foucoupe l’humourPostgreSQLjournal chiffréPlanificateurnotificationsService d’IAtouche d’humourNotifications pushFirebase Cloud MessagingIntégration continueGitHub Actionspush
Schéma d’architecture de Franchement Ça Va : application Flutter et back-office derrière Caddy, API Node.js avec garde-fou, PostgreSQL, planificateur de notifications, sur un serveur Docker Compose

L’exécution · Ce que j’ai réalisé

  • L’API : Node.js, Express et TypeScript strict, architecture en couches (routes, contrôleurs, cas d’usage, dépôts), validation systématique des entrées, schéma PostgreSQL et migrations réversibles avec Prisma.
  • L’authentification : comptes e-mail, connexion Google et Apple vérifiée côté serveur, jetons courts et renouvellement avec détection de rejeu, verrouillage contre la force brute, limitation de débit.
  • Le parcours principal : roue des humeurs, cartes « Je vis », touche d’humour générée via l’API OpenAI derrière une abstraction, avec un repli qui fonctionne sans réseau.
  • Le garde-fou : détection côté serveur à partir du référentiel et des textes libres, protégée par un corpus de cas de test rejoué à chaque exécution.
  • Le journal et les SmileCoins : Carte Action choisie par le serveur, récompense idempotente, journal chiffré et paginé, tendances d’humeur descriptives.
  • Les notifications : planificateur côté serveur, quatre notifications, respect du consentement, une seule notification de chaque type par jour.
  • L’application Flutter : onboarding et consentements, tout le parcours, journal, espace d’orientation, quatre états gérés sur chaque écran (chargement, vide, erreur, contenu) et fonctionnement hors ligne.
  • Le RGPD : chiffrement du journal au repos, isolation stricte par utilisateur, export des données, droit à l’effacement avec purge planifiée.
  • Le back-office Next.js : édition de tous les contenus, gestion des utilisateurs, statistiques agrégées et anonymes.
  • La production : Docker Compose sur un VPS, reverse-proxy Caddy avec HTTPS automatique, intégration continue GitHub Actions, builds signés, démarches de conformité des stores jusqu’à l’approbation d’Apple.

Le matériel · Stack technique

  • Mobile : Flutter, Dart, Riverpod, GoRouter, Dio, Firebase Cloud Messaging.
  • API : Node.js, Express 5, TypeScript, Zod, Prisma, PostgreSQL 16.
  • Back-office : Next.js et TypeScript, jetons en cookies httpOnly derrière un proxy serveur.
  • Services : API OpenAI pour la touche d’humour, stockage compatible S3 pour les médias, Sentry pour le suivi des erreurs.
  • Infrastructure : VPS sous Ubuntu, Docker Compose, Caddy, GitHub Actions.

Les imprévus · Défis techniques

  1. Incident n°1 : le garde-fou, règle d’or du produit

    Imprévu. L’humour doit disparaître dès qu’une personne exprime une détresse. Cette décision ne peut pas être laissée à l’application mobile.

    Parade. Une détection entièrement côté serveur, sur deux sources : les drapeaux du référentiel et l’analyse des textes libres. Elle a été restructurée par familles de formulations après plusieurs passes de recette, puis verrouillée par un corpus permanent de 984 cas, testés dans les deux sens : ce qui doit couper l’humour, et ce qui ne doit surtout pas le couper. Quand un signal est détecté, aucun appel à l’IA n’est émis.

    Ce que j’en retiens. Une détection par mots-clés reste un filet, jamais un diagnostic. Corriger seulement les phrases remontées ne suffit pas : il faut traiter la famille entière et la protéger par des tests.

  2. Incident n°2 : des données de santé mentale à protéger

    Imprévu. Le journal contient des données personnelles sensibles. Elles ne doivent fuiter ni en clair, ni d’un compte à l’autre.

    Parade. Chiffrement applicatif AES-256-GCM derrière un point d’accès unique, qui exige toujours l’identifiant de l’utilisateur. L’API refuse de démarrer sans sa clé. L’effacement est câblé dans le schéma : suppression différée de 30 jours, puis purge planifiée en cascade.

    Ce que j’en retiens. La sécurité se conçoit dans le modèle de données, pas en surcouche.

  3. Incident n°3 : un historique qui disparaît sans erreur

    Imprévu. En recette, supprimer la dernière entrée affichée du journal rendait toute la suite de l’historique inaccessible. Aucune erreur, et des tests au vert : le faux dépôt utilisé dans les tests ignorait le curseur de pagination.

    Parade. Le curseur porte désormais sa propre clé de tri, encodée, et ne dépend plus de l’existence de la ligne qui l’a produit. Un curseur illisible ou forgé est rejeté proprement.

    Ce que j’en retiens. Un test vert ne prouve rien si le double de test ne reproduit pas la contrainte réelle.

  4. Incident n°4 : trois applications sur un seul serveur

    Imprévu. Livrer l’API, le back-office et la base sur un seul VPS, avec HTTPS, des migrations sûres et des tâches planifiées, sans jamais réinitialiser la base.

    Parade. Docker Compose avec une base non exposée, des migrations appliquées au démarrage, le back-office qui parle à l’API par le réseau interne, Caddy en façade. Le fonctionnement sur une seule instance est assumé et documenté.

    Ce que j’en retiens. Une infrastructure simple et honnête sur ses limites vaut mieux qu’une architecture distribuée prématurée.

Le bilan · Résultats

  • Les cinq lots prévus sont livrés : socle et authentification, humeurs et humour, action et journal, sécurité et back-office, recette et publication.
  • En production depuis septembre 2026 : application iOS approuvée par Apple, application Android publiée sur Google Play, API et back-office en ligne.
  • Environ 616 tests au vert au moment de la publication, et un corpus de 984 cas pour le garde-fou.
  • Plus de 100 utilisateurs.

Pièces à conviction · Captures et schémas

Votre projet est le prochain coup.

Monter le prochain coup