Diet App

De la spec à l'app : IA, React Native, Design System et Figma MCP

2026, Claude AI, React Native, Expo, Supabase, Claude Code, Figma MCP, Design System
Diet App Cover

Builder une app mobile sur une stack inconnue. C'était l'hypothèse de départ. React Native pour le mobile, Claude Code pour le développement assisté par IA, Figma MCP pour relier maquettes et code. Trois outils que je n'avais jamais utilisés ensemble, sur un vrai projet de production.

Ce projet documente cette démarche de bout en bout. Comment structurer sa pensée avec l'IA avant de toucher au code, piloter un build en lots séquencés, construire un design system qui vit simultanément dans la codebase et dans Figma, et établir un workflow bidirectionnel Code/Figma via MCP. Une app installée sur mon iPhone, que j'utilise au quotidien.

Réflexion.

Builder une app mobile : monter en compétences sur React Native et l'IA

Le point de départ

Designer et développeur web depuis 15 ans, j'ai construit ma pratique sur un écosystème large : Adobe, Figma, HTML, CSS, JavaScript, puis les frameworks modernes : Backbone, Angular, Vue, Nuxt. Mais le mobile a aussi toujours fait partie de ma pratique. Dès 2014, avec Play2MeetYou puis Guidr, j'ai développé mes premières applications mobiles hybrides sous Cordova, en AngularJS et BackboneJS. Plus tard, chez Accor, j'ai plongé dans la conception d'un design system mobile à grande échelle, en travaillant au plus près des guidelines iOS et Android.

React Native, en revanche, je n'y avais jamais touché. La promesse m'intéressait depuis longtemps : écrire du JavaScript et du React pour produire de vraies interfaces natives, iOS et Android depuis une seule base de code, sans passer par une WebView. C'est là que Cordova montrait ses limites à l'époque : l'app tournait dans le navigateur embarqué du téléphone, enveloppé dans un container natif. On restait dans le web, avec ses contraintes de rendu et de performance. React Native opère différemment : chaque composant se traduit directement en composant natif de la plateforme. View, Text, TextInput ne sont pas des éléments HTML stylisés, ce sont leurs équivalents iOS et Android. C'est cette promesse de natif accessible depuis un workflow JavaScript qui m'a donné envie de sauter le pas.

Le projet

Depuis 2020, je gère ma nutrition via un fichier Google Sheets que j'ai construit et affiné au fil des années. D'abord pour moi, puis pour mes coachés lorsque j'ai développé une activité annexe de coach sportif et nutrition. Un fichier bien rodé, automatisé, qui connaît exactement mes besoins, mais qui reste un fichier.

Diet App Google Sheet

L'idée était de transformer ce Google Sheets en une vraie application mobile, en reprenant les mêmes fonctionnalités et les mêmes logiques, mais avec une expérience fluide, pensée pour le téléphone, installée sur mon iPhone et utilisée au quotidien.

Pourquoi maintenant

L'objectif n'était pas d'apprendre React Native et les outils IA en isolation, via des tutoriels ou des tests sans enjeu. C'était de monter en compétences sur ces deux fronts en même temps, sur un vrai projet, avec de vraies contraintes, et un résultat qui m'est utile au quotidien. Claude Code a rendu cette approche crédible.

Réflexion.

La specs d'abord : comment j'ai structuré ma pensée avec l'IA avant de toucher au code

Se documenter avant de se lancer

Avant d'écrire la moindre ligne de code, j'ai pris le temps de comprendre l'écosystème dans lequel j'allais travailler. Pas React Native, pas encore : les outils IA eux-mêmes. Projets, skills, agents, MCP, contexte... Autant de concepts que j'ai appréhendés via des tutoriels, des webinaires, les documentations officielles et les LLM eux-mêmes. Je voulais comprendre comment tirer le meilleur parti de Claude Code et lui donner les bonnes ressources pour travailler efficacement.

C'est en me formant sur le MCP Figma que j'ai découvert qu'il était possible de passer un FigJam directement à Claude Code. Et qu'un FigJam pouvait donc servir de brief visuel : flowchart des écrans, navigation, comportements clés. Cette découverte a orienté dès le départ mon organisation : un document visuel en complément d'un document texte, les deux servant de référence à Claude Code pour comprendre la vision de l'app avant de toucher au code.

Brainstorming avec Claude AI

Armé de cette vision, j'ai ouvert une conversation avec Claude AI pour structurer le projet. J'avais une idée claire : transformer mon Google Sheets de tracking nutritionnel en app mobile. Mais passer d'une vision à un brief exploitable par Claude Code demandait du travail.

J'ai partagé mes fichiers CSV issus du Google Sheets, décrit les fonctionnalités attendues, les comportements UX, les contraintes techniques. Claude AI m'a aidé à affiner la vision, arbitrer les priorités et définir le périmètre exact du MVP. Ce travail a produit deux livrables : un flowchart FigJam avec les écrans principaux, les enchaînements de navigation et les comportements clés de chaque vue, et un fichier specs.md qui allait devenir la source de vérité du projet. Deux documents complémentaires, structurés pour ancrer Claude Code dans la logique globale de l'app avant de toucher au code.

Diet App Flowchart

Le specs.md : source de vérité vivante

Le specs.md n'est pas un cahier des charges rigide. C'est un document vivant : avant le build, il concentre la vision, l'architecture technique, les certitudes du MVP. Pendant et après le build, il s'enrichit et se précise au fil des décisions prises. Il a rapidement été complété par d'autres fichiers thématiques : documentation.md, design-tokens-architecture.md, design-system-rules.md... Autant de ressources que Claude Code peut consulter à tout moment pour rester aligné avec les intentions du projet.

Briefer Claude Code avant de coder

Une fois le FigJam et le specs.md prêts, j'ai construit une app vide : structure de fichiers, stack installée, un "hello world" classique. Puis j'ai soumis l'ensemble des ressources à Claude Code, sans lui demander de coder quoi que ce soit. Sa mission : ingurgiter le FigJam, le specs.md et les CSV, détecter les incohérences, les zones d'ombre, les points de friction. Je lui ai demandé de me produire un fichier de synthèse de cet audit, puis on a affiné les documents avant de se lancer sur le premier lot.

Cette phase amont, du brainstorming initial au brief Claude Code, a tenu en une à deux journées. Courte, mais décisive.

Diet App Specs
Process.

Piloter l'IA avec méthode : lots, discipline et outillage

12 lots, une progression maîtrisée

Une fois le brief validé, le MVP a été découpé en 12 lots séquencés, chacun avec son prompt préparé en amont avec Claude AI. Un prompt par lot, validation avant de passer au suivant, correction dans le même lot si quelque chose bug ou si un ajustement est nécessaire.

La progression suivait un ordre de dépendance stricte. D'abord les fondations techniques : installation des dépendances, configuration Tailwind et tokens, migrations Supabase, puis les composants UI primitifs et partagés. Ensuite la navigation et la structure expo-router. Puis les features dans l'ordre logique : démarrage de l'app et gestion du profil, setup, écran profil, bibliothèque d'aliments, recettes, et en dernier le journal quotidien, l'écran le plus complexe.

Ce découpage n'était pas une formalité. C'est ce qui a permis de garder Claude Code dans un périmètre clair à chaque session, d'éviter les dérives, et de valider chaque étape avant de passer à la suivante.

Diet App Prompt Lot 3

Piloter, pas juste prompter

La méthode de travail avec Claude Code s'est affinée dès les premiers lots. Le réflexe systématique : ne jamais lui demander de foncer dans le tas. Avant chaque implémentation, lui demander d'exposer sa réflexion, de se documenter auprès de ressources pertinentes, de proposer plusieurs pistes et d'expliquer ses choix. Valider la direction avant de donner le go sur les modifications.

Sur le lot design system en particulier, cette approche a fait une vraie différence. Affiner la vision ensemble, challenger les options, comprendre les implications de chaque décision avant d'écrire une ligne : c'est ce qui a permis d'arriver à une architecture de tokens solide plutôt que de refactoriser après coup.

En fin de session, le réflexe du diff : demander à Claude Code de synthétiser ce qui a changé, pourquoi, et ce qui reste à faire. Une façon de garder la main sur ce qui se passe réellement dans la codebase.

Diet App Claude Code

Les skills : automatiser les tâches récurrentes

Entre les lots, j'ai créé deux skills Claude Code qui sont devenus indispensables. Le skill /audit déclenche un audit complet de la codebase : qualité du code, cohérence des composants, logique métier, alignement avec les docs de référence. Le skill /debug-error structure le processus de debug avec explications et analyse des screenshots d'erreur. Ces deux skills ont rendu les sessions de refacto entre les lots beaucoup plus efficaces et reproductibles.

Documentation comme infrastructure

Deux fichiers ont émergé naturellement au fil du build. Le documentation.md d'abord, à mi-parcours, quand la stack était suffisamment dense pour nécessiter un mémo centralisé : stack technique complète, conventions, patterns de debug, procédures de build. Un mémo vivant, mis à jour au fil du projet et consulté régulièrement.

Le backlog.md ensuite, une fois les 12 lots terminés et un dernier /audit passé : toutes les améliorations identifiées, les décisions différées, les next steps classées par priorité. La façon de clôturer proprement une version sans perdre le fil de ce qui attend.

Monter en compétences sur un écosystème inconnu

Ce projet m'a confronté à plusieurs technologies nouvelles en parallèle. L'adaptation à React Native a été rapide : venant du web, le templating Yoga et l'absence de CSS classique demandent un petit temps d'ajustement, mais la logique reste familière pour quelqu'un qui a du JavaScript et de la culture composant.

Sur TanStack Query, Zustand et Supabase, l'approche a été différente. Ces parties ont bénéficié d'un appui plus conséquent sur Claude Code. Pas une délégation aveugle : le même réflexe qu'ailleurs, demander d'expliquer les options, les compromis, pourquoi telle structure plutôt qu'une autre. J'ai contrôlé l'architecture globale, les décisions de réutilisabilité, l'organisation en composants et en objets. Mais la maîtrise fine de ces libs est un chantier ouvert, et c'est l'un des apprentissages que ce projet continue de nourrir.

Diet App Stack
Process.

Un design system mobile qui vit dans le code et dans Figma

Atomic Design : une organisation pour durer

Le design system de l'app repose sur l'Atomic Design de Brad Frost : une organisation qui découpe l'UI en couches de complexité croissante. Les atoms sont les briques indivisibles, Button, Input, Text, Card, Divider. Les molecules assemblent ces atoms en composants composites : SearchInput, MacrosBadge, FormField. Les organisms sont des blocs autonomes et complexes : MealBlock, EntityList, DailySummary. Cette hiérarchie structure à la fois la codebase et la bibliothèque Figma, les deux suivant exactement la même organisation.

Ce n'est pas un choix esthétique. C'est ce qui permet à Claude Code de savoir précisément où créer un nouveau composant, à Figma de refléter fidèlement la codebase, et à l'ensemble du système de rester cohérent à mesure qu'il grandit.

NativeWind : Tailwind sur mobile

Sur le web, on stylerait avec du CSS classique. Sur React Native, il n'y a pas de CSS : les styles sont des objets JavaScript appliqués composant par composant. NativeWind résout ça en adaptant la syntaxe Tailwind à React Native. On écrit des className comme sur le web, NativeWind les transforme en styles natifs au build.

Ce choix a une conséquence directe sur l'architecture des tokens : tout le système de design passe par tailwind.config.js. C'est lui qui fait le lien entre nos tokens et les classes utilitaires disponibles dans les composants.

Architecture tokens : 3 couches, circulation descendante

Le système de tokens est organisé en trois couches distinctes, chacune dans son propre fichier, avec une règle absolue : un token ne circule que vers le bas, jamais vers le haut.

La couche 1 sont les primitives, dans foundations-tokens.js : valeurs brutes organisées par familles. Les couleurs, nommées par teinte et step numérique (gray.900, blue.500). La typographie, avec les familles de polices, les tailles et les graisses. L'espacement, les dimensions fixes et les border radius. Ce sont les matériaux bruts du système, sans intention ni rôle assigné.

La couche 2 sont les alias sémantiques, dans alias-tokens.js : les primitives reçoivent un rôle. gray.900 devient primary, foreground, surface.foreground. C'est cette couche qui produit les classes Tailwind utilisées dans le code : bg-primary, text-foreground, bg-surface. Elle couvre aussi la typographie avec des styles nommés par intention, heading, body, label, muted, jamais par leur valeur brute.

La couche 3 sont les tokens composant, déclarés inline en haut de chaque fichier .tsx. Chaque composant déclare un objet Tokens qui référence en priorité des alias de couche 2. Jamais de valeur hex en dur, jamais de classe Tailwind arbitraire. Certaines catégories comme SPACING, FONT_SIZE ou SIZING n'ont pas de couche 2 : un composant peut alors les importer directement depuis foundations-tokens.js. Ce n'est pas une exception à la règle, il n'y a simplement rien entre les deux.

Diet App Tokens

La règle de circulation est strictement descendante : la couche 2 ne référence jamais la couche 3, la couche 1 ne référence jamais la couche 2 ou 3. Ce qui est interdit c'est la remontée, pas le saut.

tailwind.config.js ne fait qu'assembler : il importe les deux fichiers de tokens et câble le thème Tailwind. Il ne définit aucune donnée lui-même.

Le DS Playground : un Storybook natif

Un choix d'outillage délibéré : un groupe de routes (ds)/, visible uniquement en mode __DEV__, qui liste et documente tous les composants du système. Foundations, atoms, molecules, organisms : chaque composant est affiché avec toutes ses variantes, ses props, ses états. Un Storybook maison intégré directement à l'app, consultable sur simulateur ou device à tout moment.

Ce playground permet de valider visuellement chaque composant au moment de sa création et de disposer d'une référence vivante à portée de main pendant tout le build.

Diet App DS Playground
Process.

MCP Figma : générer une bibliothèque de composants et les écrans depuis la codebase

Code Connect : la contrainte de départ

Figma propose Code Connect, un outil qui permet de lier les composants Figma directement au code source. Quand un développeur inspecte un composant dans Figma, il voit le code réel qui lui correspond, pas un snippet généré. C'est la promesse d'un pont natif entre design et code.

Problème : Code Connect n'est disponible qu'à partir du plan Figma Organization, bien au-delà du plan Pro. Pas une option envisageable pour un projet solo. Il fallait construire un substitut.

Le substitut artisanal : trois fichiers de référence

La réponse à cette contrainte a été de documenter manuellement ce que Code Connect aurait automatisé. Trois fichiers ont été créés pour ça.

design-system-rules.md : la référence styling condensée. Stack technique, tokens couleurs et typographie, règles critiques (twMerge obligatoire, pas de valeurs hardcodées, pas de StyleSheet.create), direction visuelle. Le document que Claude Code consulte pour savoir comment styler n'importe quel composant.

component-map.md : le mapping exhaustif Figma/code. Pour chaque composant, le nom dans Figma, le fichier source dans la codebase, les props principales, les usages. C'est ce qui évite à Claude Code de recréer un composant qui existe déjà, et ce qui garantit que les deux côtés restent alignés.

Diet App Component Map

figma-prompt-template.md : le template de prompt pour toutes les sessions de mise à jour UI. Un format standardisé qui assure qu'aucune information critique n'est oubliée d'une session à l'autre.

Ces trois fichiers sont déclarés dans CLAUDE.md : Claude Code les consulte automatiquement sans qu'ils soient mentionnés dans chaque prompt. Ce substitut ne couvre pas totalement ce que ferait Code Connect : rien n'est lié automatiquement et précisément entre les composants Figma et les composants React Native. Mais il permet de driver Claude Code de façon suffisamment précise pour s'en approcher et maintenir une cohérence entre les deux côtés.

Générer la bibliothèque depuis la codebase

La génération de la bibliothèque Figma depuis le code se fait via le skill /figma-generate-library. C'est une tâche multi-étapes qui demande des ressources : variables, styles, composants, pages organisées en miroir de la codebase. Mieux la codebase est architecturée et documentée, plus la génération est précise et les écarts limités. Mais ça reste une grosse tâche, qui nécessite une session dédiée sans interruption.

Le résultat : une bibliothèque Figma organisée comme la codebase, avec une page par atom, par molecule et par organism. Variables de couleurs, styles typographiques, composants avec leurs variantes. Une base de travail solide, pas un résultat parfait.

Les limites de la génération Code→Figma

La direction Code→Figma est la moins mature du workflow. Les incohérences sont inévitables, et plusieurs catégories se sont répétées sur ce projet.

Les variables n'ont pas été systématiquement liées aux composants générés. Des ajustements manuels ont été nécessaires de façon aléatoire sur les couleurs, les typographies, les espacements, pour s'assurer que chaque composant utilise bien les variables Figma plutôt que des valeurs hardcodées.

Les styles de texte n'ont pas été liés aux textes des composants. C'est un manquement connu côté Figma, une fonctionnalité qui devrait être ajoutée prochainement.

L'interprétation du code est parfois bancale. Le MCP a généré des variantes pour des états interactifs qui n'ont pas vocation à être documentés dans Figma, ajoutant de la complexité inutile à la bibliothèque.

Le MCP n'a pas respecté la hiérarchie des composants : chaque composant a été redessiné à plat, sans instancier les composants enfants existants. Dans la molecule FormField par exemple, qui compose l'atom Input, le MCP a recréé l'UI de l'Input from scratch plutôt que d'en utiliser l'instance. C'est probablement un cas où Code Connect ferait la différence : sans liaison précise entre les composants Figma et React Native, le MCP ne sait pas qu'un composant en contient un autre.

Enfin, les composants avec des patterns visuels particuliers ont été mal interprétés. La progress bar circulaire et le bouton "+" circulaire ont été redessinés de façon approximative, loin du rendu réel.

La bonne pratique établie : corriger manuellement dans Figma plutôt que de chercher à tout résoudre par des prompts itératifs. Republier la bibliothèque après corrections, puis passer aux écrans.

Générer les écrans depuis les specs

Une fois la bibliothèque publiée et les corrections manuelles appliquées, les écrans peuvent être générés via /figma-generate-design. J'ai généré un écran par prompt, dans un ordre logique du plus simple au plus complexe. Setup d'abord, Profil, Food, Recipes, et en dernier le Diary, l'écran le plus complexe avec son bottom sheet, ses snap points et ses comportements non-inférables depuis la structure Figma seule.

Pour chaque écran, Claude Code reçoit l'URL du fichier bibliothèque, l'URL de la frame cible avec son node-id, le fichier source .tsx, et les specs fonctionnelles correspondantes. Il travaille section par section, en instances de composants publiés, toutes les couleurs liées aux variables Figma, avec validation visuelle après chaque section.

Après chaque écran généré, les écarts sont corrigés manuellement dans Figma par comparaison avec le simulateur iOS. Ce qui ne peut pas s'inférer depuis la structure, les comportements interactifs, les guards de navigation, les transitions du bottom sheet, est annoté dans les prompts.

Claude Code consulte Figma

Un usage qui s'est imposé naturellement au fil du projet : utiliser le MCP Figma dans l'autre sens, pas pour générer mais pour consulter. Claude Code accède à la bibliothèque Figma pour détecter des manques, vérifier l'alignement entre ce qui existe dans Figma et ce qui existe dans le code, identifier des états ou des variantes qui n'ont pas encore été implémentés. Un audit croisé permanent qui permet de garder les deux côtés synchronisés.

Figma→Code : le workflow inverse

Une fois la bibliothèque et les écrans en place dans Figma, le travail UX et UI peut se faire directement dans Figma. Et depuis, le sens inverse est opérationnel.

Le workflow est le suivant : des frames précises avec des annotations dans Figma, une URL de layer ciblée, un prompt construit depuis le figma-prompt-template.md, et l'ensemble des fichiers .md de référence en contexte. Claude Code lit les frames, lit les annotations, compare avec le code existant, propose un plan d'action et implémente les modifications. Le component-map.md est particulièrement utile ici : Claude Code sait exactement quel composant existant modifier plutôt que d'en recréer un nouveau.

Frames + annotations + prompt + documents de référence : un workflow défini et reproductible pour implémenter des updates ou de nouvelles features.

Suivre les écarts Figma/Code

Pour garder une vision claire de ce qui existe dans Figma et dans le code à tout moment, j'ai créé un fichier figma-etats-manquants.md. Il répertorie de façon exhaustive les composants, les parcours, les états et les interactions : ce qui est dans la lib Figma, ce qui est dans l'app, et les écarts entre les deux. Un audit croisé qui sert de point de départ dès qu'un besoin d'itérer sur un état précis se fait ressentir, dans un sens ou dans l'autre.

Diet App Figma
Rétrospective.

React Native, Claude Code, Figma MCP : ce que j'en retiens vraiment

Ce que j'ai appris

L'apprentissage le plus significatif de ce projet n'est pas technique, c'est méthodologique. Savoir piloter des outils IA sur un projet de cette envergure, structurer le contexte, séquencer le travail, valider avant d'implémenter : c'est une compétence à part entière, qui s'acquiert en faisant. Ce projet m'a donné un cadre de travail avec l'IA que je n'aurais pas pu construire autrement qu'en conditions réelles.

React Native est venu en second. La courbe d'apprentissage a été moins abrupte que prévu pour quelqu'un avec un background JavaScript solide. L'écosystème est dense, Expo simplifie énormément, et la logique composant reste familière. Ce qui change vraiment, c'est la façon de penser le layout, les performances, et le cycle de build. Des réflexes à construire, pas des fondamentaux à réapprendre.

Ce que ça change dans ma pratique

Ce projet révolutionne ma façon de travailler. L'approche specs-first, le découpage en lots, les skills Claude Code : ce sont des méthodes directement transposables à mes projets clients. En particulier sur deux plans où je vois un impact immédiat : le travail de design system, où le workflow Code/Figma ouvre des possibilités que je n'avais pas avant, et la capacité à builder ou prototyper des produits rapidement et à les rendre testables.

Ce que je ferais différemment

Si je recommençais, je changerais une seule chose : démarrer plus tôt. Les outils IA de développement étaient encore dans leurs balbutiements il y a un an, mais c'était déjà suffisant pour se lancer. La vraie barrière n'était pas technique, c'était de trouver le bon prétexte pour commencer sérieusement.

Suite

Le projet continue. L'immédiat, c'est d'améliorer l'UX et l'UI de l'app avec le workflow Figma établi. À moyen terme, ouvrir le projet à d'autres utilisateurs, implémenter l'authentification, faire évoluer les features. Et à plus long terme, explorer l'intégration de solutions IA directement dans l'app.

Diet App Screens
contact

Kevin Bizien

Spécialiste UI & Design System

Tu souhaites me parler de ton projet UI ? Contactes-moi à l'adresse bonjour@kevinbizien.com et échangeons dès maintenant !