Aller au contenu

Architecture

Le dépôt daroms-speed-app est un cœur versionné ajouté à chaque app comme sous-module core/. L’app déclare core/packages/* (et les modules actifs core/modules/<slug>) comme workspaces Bun : les paquets @daroms/* sont des sources TypeScript liées, sans étape de build. Une app ne contient que son spécifique : src/features, locales, supabase/migrations, brand.ts, app.manifest.ts, app.spec.md.

Paquet Rôle
@daroms/theme createBrandTheme(brand) : palettes OKLCH 11 nuances, thèmes Tamagui v3 (light/dark, sous-thèmes), tokens sémantiques, polices, ressorts
@daroms/ui composants (états, a11y, haptique intégrés), icônes Lucide générées, CATALOG.md (catalogue)
@daroms/data client Supabase typé par Register, session, QueryClient, erreurs traduites, parseOrThrow
@daroms/lib formats, zod partagé, stockage (MMKV > SQLite kv > mémoire), haptique, schéma du manifest
@daroms/i18n i18next + expo-localization, useT typé, textes du cœur
@daroms/app provider racine, gates ordonnées, préférences, système de modules, layouts racine et onglets, withDaroms (config Expo)
@daroms/config tsconfig strict, ESLint (règles daroms), Jest, Prettier

app.config.ts appelle withDaroms(ctx, { manifest, brand }) : nom, identifiants, schéma, icônes, splash, plugins des modules (core/modules/<slug>/plugin.ts) et manifest injecté dans extra. Node >= 22.18 charge ces fichiers TypeScript directement (imports relatifs avec extension .ts). Au runtime, getManifest() relit le manifest validé.

Un module = un dossier core/modules/<slug> : index.ts (defineModule : config zod, Provider, gate, textes, sections de réglages, modales), module.json (routes, dépendances natives, migrations, fonctions, textes d’app), plugin.ts (config plugin Expo), README.md. Le registre src/generated/modules.ts n’importe que les modules activés. Les gates (onboarding 10, auth 20, paywall 30) décident ensemble de la redirection et gardent le splash affiché tant que leur état est inconnu.

Les gabarits generators/ (écran, table, module) sont remplis par variables, sans IA : Claude ne remplit que le spécifique. Les variantes de template (template/variants/*/variant.json) sont des recettes : modules, tables et écrans générés à la création.