← Retour05Projet
App Store · En review

Yuzu

yuzu-app.frBuild · 1 semaineExpoReact NativeSupabaseClaude Haiku
Problème

Les apps de productivité grand public sont vouvoyées et abstraites. Pour un cerveau TDAH FR, 'Préparer son CV' ne déclenche aucune action.

Solution

App iOS native qui te tutoie et décompose chaque tâche en micro-étapes physiques. 10 outils anti-paralysie, connexion Apple/Google en 1 tap.

Résultat

App soumise App Store. Site landing yuzu-app.fr live. Backend Supabase + Claude Haiku, build EAS prod déployé.

Aperçu

Yuzu — écran Découper, Magic ToDo
Yuzu — onglet Outils, 10 outils anti-paralysie
Yuzu — profil, streak, stats, trophées

Magic ToDo · Outils anti-paralysie · Profil & trophées

Le contexte

Yuzu est une app iOS native pensée pour les cerveaux TDAH francophones. C'est un équivalent FR de Goblin Tools — sauf que Goblin vouvoie et écrit à l'infinitif type "Préparer ses vêtements". Yuzu te tutoie et te dit "Pose ton téléphone à côté".

Côté produit : un site landing (yuzu-app.fr) + une app iOS native publiée sur l'App Store. Même backend Supabase pour les deux.

Le problème

Les apps de productivité grand public sont conçues pour des cerveaux neurotypiques. Pour quelqu'un avec TDAH, "Préparer son CV" ne déclenche aucune action — c'est trop abstrait. La friction de démarrage est l'ennemi numéro un.

Goblin Tools (US) a prouvé qu'une app de décomposition de tâches pour TDAH peut générer 44 000 à 435 000 $/mois. Mais sa version FR est une traduction brute, vouvoyée, abandonnée depuis 1 an. Fenêtre de 6-12 mois pour prendre la place avant qu'ils ne sortent une vraie version FR.

La solution

Magic ToDo : tape ce qui te paralyse, Claude Haiku 4.5 décompose en 4 à 15 micro-étapes. La 1ère étape est toujours un mouvement physique tout petit ("Pose ton téléphone", "Lève-toi du canapé"). Pas d'infinitif vague.

10 outils annexes pour les cerveaux TDAH : Compileur (vidage de cerveau → liste claire), Formaliseur (reformule un mail), Estimateur de temps, Conseiller (peser le pour/contre), Pause après hyperfocus, Routine adaptée à ton énergie, Recap doux de la journée, etc.

Connexion en 1 tap via Apple ou Google. Pas d'email à confirmer. Identifiant anonyme local. Stockage UE.

Stack technique

  • App : Expo SDK 54 + React Native 0.81 + TypeScript strict
  • Routing : Expo Router 6 (typed routes)
  • State : Zustand + AsyncStorage
  • UI : NativeWind v4 (Tailwind RN) + composants maison
  • Auth : Sign in with Apple + Google via Supabase Auth
  • Backend : Supabase (Postgres + Edge Functions Deno + RLS) à Francfort
  • IA : Claude Haiku 4.5 (claude-haiku-4-5-20251001) via Edge Function — clé API serveur uniquement
  • Build/Submit : EAS Build + EAS Submit (zéro Mac local)
  • Site marketing : HTML/CSS statique, déployé sur Vercel

Décisions techniques notables

Quota serveur partagé. 5 utilisations/jour gratuites, partagées entre Magic ToDo et les 10 outils. Comptage côté serveur (table anon_quota) pour empêcher le bypass via réinstall app. Premium future (50/jour) déjà câblé côté backend.

Parsing tolérant côté Edge Function. Claude Haiku renvoie parfois {etape_1: "...", etape_2: "..."} au lieu d'un array. La fonction extractStringList(parsed) accepte 4 formats (array direct, objet de strings, objet contenant un array, nested) — la qualité prompt seule ne suffit pas, fallback parsing obligatoire.

3 armes anti-Goblin, testées à chaque sortie IA :

  1. Tutoiement systématique — jamais "vous", jamais d'infinitif type "Préparer X"
  2. 1ère étape physique extrême — "Pose ton téléphone" pas "Préparer ses affaires"
  3. iOS natif premium — animations Reanimated, haptics, mode sombre auto

Chaque prompt Claude inclut un test éliminatoire interne : "Est-ce que Goblin sortirait pareil ?" — si oui, retravailler.

Ce qui m'a pris du temps

  • Configuration Apple Sign-In + Google Sign-In avec Supabase Auth (Service ID Apple, P8 InApp Purchase Key, OAuth Web + iOS clients Google).
  • iOS Privacy Manifest exhaustif (NSPrivacyAccessedAPITypes + NSPrivacyCollectedDataTypes) requis depuis iOS 17.
  • Le passage du dev client au build production : EAS auto-installe expo-updates et duplique le Privacy Manifest. À nettoyer à la main.
  • Capter le givenName Apple uniquement à la première connexion (Apple ne le redonne jamais après) → sync immédiate dans anon_profiles côté serveur.

Ce que je referais différemment

Démarrer direct avec Sign in with Apple/Google plutôt qu'un UUID anonyme local. Le UUID était une tentative de "minimum viable auth" mais c'est plus de complexité (table anon_profiles séparée d'auth.users, sync compliqué) que de simplement câbler Apple/Google dès le jour 1. Coût en complexité bien supérieur au gain de "pas de friction signup".

Lefti2K

Built in Paris · Indépendant

Local time
—:—:— UTC
Status
All systems operational
© 2026 · Bilal Hamzav2026.05.05