Journal
7 min de lecture

Zéro serveur : pourquoi Souffle ne sait rien de vous

Pas de compte, pas de tracking, pas de backend. Comment et pourquoi Souffle fonctionne entièrement sur votre iPhone — et ce que ça change concrètement.

Souffle n'a pas de serveur. Pas de base de données distante, pas de système d'authentification, pas de compte utilisateur. Tu installes l'app, tu respires. Tes données restent sur ton iPhone. C'est tout.

Ce n'est pas un oubli. C'est un choix de design pris dès le premier jour, et maintenu à chaque décision depuis. Cet article explique pourquoi, ce que ça implique techniquement, et ce qu'on y perd.

Le choix

Quand j'ai commencé à concevoir Souffle, le réflexe naturel était de prévoir un backend. Un serveur pour stocker les profils, une base pour l'historique des sessions, une auth pour identifier les utilisateurs. C'est comme ça qu'on construit la majorité des apps.

Mais Souffle est une app de respiration. Tu ouvres, tu choisis un programme, tu respires cinq minutes, tu fermes. Qu'est-ce qu'un serveur apporterait ici ? Du sync entre appareils ? Personne dans la beta n'a demandé. Des statistiques globales ? Je n'en ai pas besoin. Un compte utilisateur ? Pour quoi faire — tu n'as pas de mot de passe à retenir pour respirer.

Chaque feature qui justifie un backend venait avec un coût disproportionné par rapport au bénéfice. Alors j'ai pris la direction inverse : SwiftData en local, point final.

Ce que "local" veut dire concrètement

Toute la persistance passe par SwiftData, le framework de stockage local d'Apple. L'historique de tes sessions, tes préférences, tes favoris — tout vit dans la sandbox de l'app sur ton iPhone.

Aucun appel réseau n'est émis par Souffle. Jamais. L'app fonctionne intégralement en mode avion. Pas de spinner "connexion en cours", pas d'écran "veuillez vous connecter", pas de dégradation quand tu es dans le métro ou en montagne. Tu ouvres, ça marche. C'est un argument UX autant que philosophique — une app de respiration qui te demande d'attendre un serveur, c'est un oxymore.

Côté tracking : zéro. Pas de Mixpanel, pas d'Amplitude, pas de Firebase Analytics, pas de Sentry, pas même de MetricKit. Aucun événement custom n'est envoyé à qui que ce soit. La seule donnée qui existe sur Souffle en dehors de ton téléphone, ce sont les métriques agrégées d'App Store Connect — qu'Apple collecte par défaut sur toutes les apps de l'App Store, de manière anonymisée, sans que le développeur puisse les désactiver, même si l'utilisateur peut, lui, refuser de partager via les réglages iOS. Je préfère le dire plutôt que prétendre un "zéro absolu" qui serait malhonnête.

Le revers honnête : sans crash reporting, je découvre les bugs en production via les retours utilisateurs ou les reviews App Store. C'est plus lent, mais c'est cohérent.

Et HealthKit ?

Souffle écrit les sessions de pleine conscience dans Apple Santé via HealthKit. Techniquement, les données quittent l'app. Il faut le dire.

Mais elles ne quittent pas ton écosystème. Les données Santé sont chiffrées sur l'appareil, et synchronisées via iCloud avec chiffrement de bout en bout dès que la double authentification Apple et le code d'appareil sont activés. Elles ne transitent jamais par un serveur Patolabs ni un serveur tiers. C'est l'extension naturelle du local : Apple Santé est ton coffre, pas le nôtre.

Et cette écriture est optionnelle. L'autorisation HealthKit est demandée au premier lancement, et tu peux la refuser. Souffle fonctionne exactement pareil sans.

Changement de téléphone

C'est la question qui revient le plus souvent quand tu dis "tout est local" : et si je change d'iPhone ?

Les données survivent via le backup standard d'iOS. Quand tu restaures un nouvel iPhone depuis un backup iCloud ou via Quick Start (migration directe iPhone vers iPhone), la sandbox de Souffle est incluse. Ton historique, tes préférences, tout est là.

Ce qui ne survit pas : une suppression de l'app suivie d'une réinstallation sans backup. Dans ce cas, les données locales sont perdues. C'est différent d'un sync CloudKit en temps réel — il n'y a pas de copie distante qui te sauve automatiquement.

On pourrait ajouter CloudKit pour du sync multi-device. Si la demande existe un jour, c'est une option — CloudKit privé fonctionne sans serveur Patolabs, les données restent dans le cloud personnel de l'utilisateur. Mais pour l'instant, personne ne l'a demandé. Et ajouter CloudKit voudrait dire exiger un compte iCloud actif, ce qui casse le principe "pas de compte".

Ce que ça coûte — ou plutôt, ce que ça ne coûte pas

Un backend minimal pour une app de ce type — hébergement, base de données managée, authentification, monitoring — coûte entre 120 et 870 € par an selon les paliers free-to-paid des services courants. Rien d'astronomique.

Mais le vrai coût n'est pas l'infra. C'est le temps. Un à deux jours par mois de maintenance backend — mises à jour, monitoring, incidents. Et surtout : la surface de conformité RGPD qui explose dès que tu stockes un email côté serveur. Registre de traitement, DPA avec chaque sous-traitant, procédure de droit d'accès et de suppression, politique de rétention. Pour un dev solo qui code le soir, c'est un second projet à temps partiel.

Avec Souffle, la conformité RGPD est triviale : on ne collecte pas de données personnelles. La politique de confidentialité tient en une page et dit essentiellement "on ne sait rien de vous". C'est libérateur.

Ce qu'on y perd

Soyons honnêtes sur les compromis.

Pas de sync entre appareils. Si tu as un iPhone et un iPad, tes sessions ne sont pas partagées. Chaque appareil vit sa vie.

Pas de features sociales. Pas de leaderboard, pas de défis entre amis, pas de "votre coach Souffle vous a manqué cette semaine" envoyé par notification push. Ce genre de features demande un serveur pour coordonner les utilisateurs entre eux.

Pas de personnalisation cloud. On ne peut pas adapter l'expérience en fonction d'un profil utilisateur côté serveur — pas de recommandations basées sur l'historique global, pas d'A/B testing intégré.

Pas de récupération sans backup. Si tu perds ton téléphone et que tu n'as pas de backup iCloud, tes données sont perdues. Il n'y a pas de "connectez-vous pour retrouver votre historique".

Ces compromis sont cohérents avec ce qu'est Souffle. Une app de respiration, c'est un outil personnel et silencieux. Pas un réseau social du bien-être. La solitude de l'expérience est une feature, pas un bug.

Pourquoi c'est un argument produit

"Aucune donnée ne quitte votre téléphone" n'est pas juste une posture technique. C'est un argument que les utilisateurs comprennent en une phrase, et qui les rassure instantanément.

Dans un monde où chaque app demande un compte, un email, une autorisation de tracking et un consentement cookies, le fait de ne rien demander est différenciant. Tu ouvres Souffle, tu respires. Pas de popup, pas de formulaire, pas de "accepter les conditions". Le premier écran est le programme de respiration, pas un écran de login.

Pour un dev indie sans budget marketing, c'est aussi un avantage compétitif. Les apps de méditation connues — Headspace, Calm, Petit Bambou — sont des produits SaaS avec abonnement mensuel. Elles ont besoin de comptes, de serveurs, de tracking pour mesurer la rétention et justifier le prix. Souffle n'a pas ce modèle. Pas d'abonnement, pas de compte, pas de serveur. Le coût marginal d'un utilisateur supplémentaire est zéro.

Ce n'est pas viable pour tout le monde. Un produit qui vise la croissance rapide a besoin de données, de metrics, de cohortes. Mais pour un projet indie dont l'objectif est d'aider des gens à respirer — pas de lever des fonds ou d'optimiser un funnel — c'est exactement le bon trade-off.

— Pato