



Le produit
Ash est un compagnon d'arrêt du tabac. Pas un compteur de cigarettes de plus : un programme qui s'adapte à la personne. À l'inscription, un test de Fagerström et un diagnostic comportemental déterminent une méthode — arrêt net, réduction progressive ou approche flexible — avec des limites quotidiennes qui décroissent dans le temps.
Ensuite, chaque cigarette se logue avec son déclencheur et l'intensité de l'envie. Ces données alimentent une détection de schémas qui finit par dire à l'utilisateur ce qu'il ne voyait pas : que ses envies arrivent surtout après le déjeuner, ou le vendredi soir. Quand l'envie devient trop forte, un bouton SOS lance un protocole de trois minutes — respiration guidée, mini-jeux de diversion, coach conversationnel.
Le reste du produit sert à rendre l'abstinence tangible : une timeline de récupération corporelle où les organes se débloquent, un compteur d'argent économisé, des niveaux, des badges et des séries. Trois langues : français, anglais, espagnol.
Le défi technique
C'est le projet où on est allés le plus loin hors du périmètre JavaScript. Une application d'arrêt du tabac se joue sur la friction : si logger une cigarette demande d'ouvrir l'application, de la déverrouiller et de naviguer, l'utilisateur ne le fera pas. Il fallait donc que l'action soit possible depuis l'écran d'accueil du téléphone, sur les deux plateformes.
Sur iOS, ça veut dire un widget WidgetKit écrit en Swift, avec des AppIntents qui rendent le bouton du widget réellement interactif — on incrémente le compteur sans jamais ouvrir l'application. Sur Android, deux widgets rendus en React. Et pour que l'application et les widgets partagent le même état, un App Group commun, plus un module Expo écrit en Kotlin pour proposer l'épinglage du widget directement depuis l'application.
Sous le capot
- Widgets natifs sur les deux plateformes — WidgetKit en Swift avec AppIntents interactifs côté iOS, widgets rendus en React côté Android, synchronisés via un App Group partagé.
- Module Expo sur mesure en Kotlin — expose l'API Android d'épinglage de widget pour transformer l'ajout en un seul geste.
- Trois fonctions serveur Deno — un coach IA dont le contexte contient l'état complet de l'utilisateur (jour du programme, série en cours, méthode, humeur récente, déclencheurs), un proxy de génération d'images qui garde la clé API hors du bundle, et un webhook d'abonnement signé.
- Sécurité au niveau des lignes — trois migrations successives sur les politiques Postgres, dont une qui corrige des clauses d'écriture manquantes.
- Résilience des données — à la réinstallation, les compteurs et badges sont fusionnés sans perte plutôt qu'écrasés, pour qu'un changement de téléphone ne remette jamais une série à zéro.
- Notifications contextuelles — quatorze catégories, contenu localisé et rotation des messages pour éviter l'effet répétition qui fait désinstaller.
- Tests A/B en production — deux variantes complètes de page d'abonnement et plusieurs parcours d'inscription, pilotés par les feature flags.
Aller plus loin
Un projet du même calibre ?
Décrivez-nous ce que vous voulez construire. On répond sous 24 h, et on vous propose un premier échange de 30 minutes sans engagement.