Haptika Mobile — Expo
Application mobile séparée de la cible Apple Watch SwiftUI du dépôt parent.
- Expo SDK 54 / React Native 0.81, compatible avec Xcode 16.4 installé ici.
- Development build avec
expo-dev-client, Expo Router et Metro sur le port 8082. - Identifiant iOS et Android :
com.haptika.mobile.dev. - 110 frames mobiles et 36 panneaux du Figma Haptika : onboarding, abonnement iPhone et abonnement iPhone + Watch. Les frames Watch de 198 × 242 ne sont pas intégrées à l'app mobile.
Démarrer
cd mobile
npm ci
npm run ios
Après installation du development build :
npm start
Sur le simulateur préparé dans cette session :
xcrun simctl openurl 85638E91-52BB-440F-91F9-35604A771A28 'haptika-mobile://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8082'
eas.json contient les profils development (simulateur) et development-device (appareil physique). Aucune publication ni compilation cloud n'a été lancée.
Source des écrans
Figma : https://www.figma.com/design/2FOpWaxKTfJi0ogQBNizXi/haptika
Les références MCP sont conservées dans design/contexts.json et design/metadata.xml. Les textes et leurs styles sont rendus avec des Text natifs, les champs avec TextInput, les actions avec Pressable. Les illustrations et icônes sont les assets exportés de Figma, regroupés par empreinte SHA-256 et embarqués pour fonctionner hors ligne. Aucun écran n'est une capture d'écran cliquable.
src/design/scenes.json conserve les identifiants Figma et les propriétés de chaque couche. src/components/design-layer.tsx et design-screen.tsx effectuent le rendu React Native ; scripts/compile-scenes.cjs relie les parcours. Les écrans longs défilent ; les écrans courts s'ajustent à la hauteur sûre sans déformer les éléments ronds.
Le choix iPhone / iPhone + Apple Watch se fait sur l'étape « Comment allez vous utiliser Haptika ? ». Les préférences, le prénom, les réglages des curseurs et les choix sont conservés localement. Les parcours de navigation, la sélection de durée, les champs et les minuteurs de démonstration sont interactifs.
Limites fonctionnelles
Le SDK natif Firebase est configuré sur haptika-d13d3. L'écran haptika-mobile://account, accessible en touchant « COMPTE ET ABONNEMENT » dans Profil, permet la création de compte, la connexion e-mail/mot de passe, la réinitialisation du mot de passe et la déconnexion. Cet écran technique de compte est un ajout fonctionnel, pas une frame Figma.
Le prénom, l'année de naissance valide, le genre, le choix téléphone/Watch, la fin d'onboarding et le mode écran noir se synchronisent après connexion. Les autres curseurs restent locaux. Les changements non envoyés sont conservés dans une file locale séparée par UID ; ils repartent au retour du réseau (réessai toutes les 10 secondes) ou avec « Réessayer ». Les données du mode local ne sont pas importées à la connexion.
Les valeurs biométriques, historiques, abonnements et états « Connecté » des frames restent des exemples ; aucune de ces valeurs n'est envoyée à Firestore. Apple Santé, l'acquisition caméra, WatchConnectivity dans Expo, les alarmes système et les achats ne sont pas branchés. Les repositories de mesures et de séances sont disponibles pour leur futur branchement. Le code natif de l'ancienne application Watch reste distinct.
Les règles et index Firestore sont déployés. Les fonctions serveur de suppression sont écrites et testées sur Emulator ; leur déploiement nécessite Blaze, actuellement désactivé. Voir ../firebase/README.md.
Les destinations de profil sans frame correspondante (abonnement, support, etc.) n'ouvrent pas d'écran inventé. Les panneaux explicatifs définis dans Figma sont associés aux boutons d'information disponibles.
Vérification
npm run typecheck
npm test
npx expo install --check
Pour ouvrir une frame spécifique : haptika-mobile://screen/431-2. Ajouter ?preview=1 fige le contenu de référence et masque les interactions pour la comparaison visuelle. Ce mode n'enregistre pas de données biométriques.
Les captures de contrôle de chaque frame sont dans qa/screens/. Le quota du MCP Figma a été atteint après la récupération des contextes ; le rendu utilise les références déjà obtenues et les assets téléchargés, sans dépendance réseau à Figma au lancement.