LC
LineCard · iOS Native
Build 53 — TestFlight · Mai 2026
Production · 9 modules actifs

Une application,
9 modules,
un seul terrain de jeu.

Carte technique de l'app iOS LineCard — chaque module, chaque service, chaque donnée, avec son état d'avancement, ses connexions au backend go.linecard.fr et ce qu'il reste à construire. Pensé pour être partagé à l'équipe et lu sur téléphone.

LineCard Dashboard — Rico Starter 15 pts
0
Fichiers Swift
0
Modules fonctionnels
0
Endpoints API
0
Captures d'écran live

01Pile architecturale

De l'écran de lancement jusqu'au backend, en sept couches lisibles. Chaque chip est un fichier réel du repo.

Entrée @main
LineCardApp.swift Theme.swift Config.swift LaunchScreen
Auth 4 écrans
WelcomeView LoginView RegisterView GolfPickerView AuthViewModel
Tab principale Conteneur
MainTabView DashboardViewModel DeepLinkRouter
Modules 9 features
Ateliers (4) Niveaux/LTI (2) Challenges (4) Stats (1) Parcours (3) Friends (3) Messages (3) Notes (3) Notifications (1) Dashboard (2) Profile (2) Feed (1) Leaderboard (2)
Components partagés
PlayerAvatarView CachedAsyncImage BadgeChip BadgeCelebrationView LevelUpView LTIOverlayView
Services 6 spécialisés
APIClient (43 méthodes) KeychainHelper LocationManager DeepLinkRouter AudioPlaybackService SpeechRecognitionService
Backend distant
go.linecard.fr Express + SQLite PM2: linecard-go APNs · Push

02Les 9 modules en détail

État d'avancement réel selon .brain/modules/ios-roadmap.md. Cliquez sur « Détail » sous chaque carte.

Quasi-fini (≥90%) En cours À démarrer
M1
LineCard Welcome screen
👋

Onboarding

Welcome → Login/Register → Golf Picker

80%prêt
  • Inscription Élève ou Coach
  • Sélection du golf de rattachement (Google Places)
  • Persistance via Keychain
AuthViewModel KeychainHelper
Détail
Fichiers : WelcomeView, LoginView, RegisterView, GolfPickerView.
API : register(), login(), searchGolfCourses().
Manque : auto-détection GPS du golf à l'arrivée, validation admin pour les comptes Coach.
M2
Niveaux LTI hub
🏆

LTI & Niveaux

LineCard Training Index — moteur de progression

98%prêt
  • 1 réussite = 1 point, 10 niveaux (Starter → Legend)
  • 1 badge par niveau, auto-déverrouillé
  • Pop-up Level Up plein écran animé
  • Classements géographiques : Tous / Club / National / Amis
LTILevel · Badge getLtiProfile
Détail
API : getLtiProfile, getLtiStats, getLtiExercises, getLTIComparison.
UI partagée : LTIOverlayView, LevelUpView, BadgeCelebrationView.
Sources de points : exercices, défis, global challenges, parcours, sessions de practice.
M3
Ateliers list
🎯

Ateliers

Bibliothèque d'exercices + enregistrement

95%prêt
  • 3 catégories : Putting, Chipping, Grand jeu
  • 14+ ateliers : objectif, setup, règles, score, pédagogie
  • Saisie tentatives + réussites + miss tendency (direction + distance)
  • Bouton « Rejouer » après saisie
Exercise · ExerciseLibrary → LTI points
Détail
Écrans : AteliersListView, AtelierDetailView, ExerciseFormView, ExerciseHistoryView.
Manque : miss tendency pour le chipping (court/long/direction), assignation par un coach.
M4
Défis et Global Challenges
⚔️

Défis joueur-vs-joueur

Création, invitations, chat dédié

90%prêt
  • Créer depuis un atelier ou en custom
  • Invitations amis · demandes pending → accept/reject
  • Auto-création d'un chat de groupe pour les participants
  • Soumission du score avec miss tendency + notes
Challenge 7 endpoints
Détail
API : createChallenge, joinChallenge, acceptChallengeRequest, rejectChallengeRequest, getChallenge, getChallengeStats, getNearbyChallenges.
Manque : auto-défi local (2 joueurs même golf → défi automatique), géolocalisation du défi, créer un exercice à l'intérieur d'un défi.
M5
Global Challenge Putting
🌍

Global Challenge

Compétitions mondiales (Putting + Chipping)

98%prêt
  • Onglet dédié (séparé des Défis)
  • Soumettre un score → leaderboard mondial
  • Limite 3×/jour avec compteur visible
  • Leaderboards : Tous / Club / National / Amis
getGlobalChallenges getGlobalChallengeLeaderboard
Détail
Écrans : GlobalChallengesView, GlobalChallengeDetailView, MyGCPerformanceView.
Manque : mode « performance maximale » (en attente des spécifications de Ridou).
M6
Statistiques
📊

Statistiques

8 filtres temporels · insights automatiques

98%prêt
  • 8 filtres : 3j, 7j, 15j, 1m, 3m, 6m, 1an, all-time
  • Séparation Entraînement / Compétition
  • Par distance + bar chart, miss tendency
  • Insights auto : « Tu rates à droite », « Trop de 3-putts »
Stats model getStatsSummary
Détail
Couverture : Putting (réussites, %, direction, distance), Parcours (FIR, GIR, 3-putts, 4-putts), Compétition (score moyen, best score). Activité hebdo + meilleurs scores.
M7
Liste amis
👥

Social

Amis · messagerie · feed

50%en cours
  • Recherche, ajout, accept/reject d'amis
  • Profils d'amis avec stats LTI + comparaison
  • Messagerie style Instagram (bulles, time ago, lecture)
  • Activity feed (basique)
3 modèles 11 endpoints
Détail
Manque : discovery par rayon (1/5/10 km), feed riche style Strava, présence temps-réel sur les golfs, matching par handicap+LTI, groupes (UI manquante, backend prêt).
M8
Profil avec badge Coach en attente
🎓

Coach / IA

Tableaux de bord coach + IA C4-DY

5%à démarrer
  • Comptes Coach déjà séparés à l'inscription
  • Reste : dashboard coach, lien coach-élève, assignation d'exercices
  • IA companion (vision Ridou) : guide d'onboarding + avatar bottom-nav
future phase C4-DY KB
Détail
Vision Ridou (mai 2026) : C4-DY comme guide vivant, réveil à l'ouverture (premier lancement = tour de l'app, ensuite = notif contextuelle, défi en attente, atelier suggéré).
M9
Notifications push
🔔

Notifications

APNs · in-app · bell badge

90%prêt
  • Pipeline APNs complet (.p8 key configurée)
  • 6 triggers auto côté serveur
  • Centre de notifications dans l'app + badge de bell
  • Deep links sur tap (avec un bug centurion en cours)
registerDeviceToken DeepLinkRouter
Détail
Manque : smart timing (« 18h, tu ne t'es pas entraîné »), préférences utilisateur, animation des badges au style Apple Fitness (issue connue : tap notif → badge invisible dans l'app).

02bTour complet — 27 écrans

Captures faites depuis le simulateur iOS 26.3, build 53, compte Rico. Cliquez sur une image pour l'ouvrir en grand.

03Couche services

Six services centralisent les capacités transverses. Touchez l'un, vous touchez tous les modules qui en dépendent.

APIClient

Pont unique vers go.linecard.fr — auth, retries, decoding.

43 méthodes · 597 lignes

KeychainHelper

Persistance sécurisée du token de session + identifiants.

iOS Security framework

LocationManager

GPS + reverse geocoding pour repérer le golf à l'arrivée.

CoreLocation

DeepLinkRouter

Push notif → écran cible (ami, défi, badge, message…).

6 routes actives

AudioPlaybackService

Lecture audio (sons de réussite, futurs feedbacks vocaux).

AVFoundation

SpeechRecognitionService

Dictée vocale — pré-câblé pour saisie notes & futur coach vocal.

Speech framework

04Modèles de données

14 structs Swift décodés depuis le backend. La forme du domaine LineCard, en une page.

User.swift
Exercise.swift
ExerciseLibrary.swift
Challenge.swift
Badge.swift
LTILevel.swift
LTIComparison.swift
Leaderboard.swift
CourseLeaderboard.swift
Friend.swift
Message.swift
Notification.swift
Stats.swift
SessionTypeHelper.swift

05Connexion backend

L'app parle à un seul serveur. Tout passe par APIClient.

go.linecard.fr

Express + SQLite, PM2 process linecard-go sur le VPS OVH (37.59.118.89). Aussi consommé par le CRM, les dashboards clients, et les landing pages QR.

Tokens JWT en Keychain. Push APNs via .p8 key stockée côté serveur. Notifications déclenchées par 6 triggers métier (ami, défi, badge, niveau, message, GC).

register · login getMe · getProfile getLtiProfile getLtiStats getLtiExercises getLeaderboard getCourseLeaderboard getCourses · searchGolfCourses createExercise · createSession getSessions · deleteSession getExerciseLibrary getDashboardStats getStatsSummary createChallenge joinChallenge getChallenge · getChallengeStats acceptChallengeRequest rejectChallengeRequest getNearbyChallenges getGlobalChallenges getGlobalChallengeLeaderboard getGlobalChallengeRemaining getFriends · searchUsers sendFriendRequest acceptFriendRequest · rejectFriendRequest getFriendRequests · getSentRequests getFriendInteractions getLTIComparison getConversations getMessages · sendGroupMessage createGroup · leaveGroup getGroupDetails · getGroupMessages getFeed getNotifications getUnreadNotificationCount markNotificationRead markAllNotificationsRead registerDeviceToken

06Roadmap immédiate

Issues priorisées, extraites de .brain/modules/ios-roadmap.md et de l'inbox Obsidian.

Prio
Sujet
Notes
Effort
État
P0 · BUG
Badge Centurion — invisible après notif
Push reçu sur iPhone + Watch. Tap ouvre l'app mais le nouveau badge n'apparaît nulle part.
small
à corriger
P1
Companion C4-DY in-app (vision Ridou)
Avatar dans la tab bar, premier lancement = tour de l'app, ensuite = nudges contextuels.
large
à spécifier
P1
Apple Watch & CoreMotion
Évaluer ce qu'Apple permet nativement (swing detection, activity, complications).
medium
à investiguer
P1
Modèle de monétisation
Coach payant ne suffira pas. Définir features gratuites vs. premium.
discussion
à décider
P2
Global Challenge — performance maximale
En attente des réponses Ridou sur le scoring (Q1–Q4). Actuel = essais fixes.
medium
en attente
P2
Discovery joueurs par rayon
1/5/10 km, montrer joueurs proches avec LTI + handicap.
large
backlog
P2
Feed riche style Strava
Exos, défis, badges, niveaux dans un feed visuel.
medium
backlog
P3
Module Coach complet
Dashboard coach, lien coach-élève, assignation d'exos, IA coach.
large
future phase
P3
Messagerie photo / vidéo
Photo, vidéo, retour swing par le coach.
large
future phase
← FermerWelcome
01 · Welcome — LineCard, L'Univers du Golf
← FermerLogin
02 · Connexion
← FermerDashboard
03 · Accueil — Hero card + accès rapides
← FermerAteliers list
04 · Ateliers — Putting / Chipping / Grand jeu
← FermerAtelier détail
05 · Atelier détail — Objectif, Mise en place, Règles, Score, Pédagogie
← FermerSaisie de score
06 · Saisie de score — Tentatives, réussites, miss tendency
← FermerParcours
07 · Parcours — Liste des rounds
← FermerCréer exercice
08 · Créer un exercice custom
← FermerStats
09 · Statistiques — Filtres 3j/7j/15j/1m/3m/6m/1a, Entrainement vs Competition
← FermerCarnet
10 · Carnet — Notes par catégorie
← FermerDéfis
11 · Défis — Challenges globaux + défis joueurs
← FermerGlobal Challenge
12 · Global Challenge Putting — Performance maximale + leaderboard temps réel
← FermerNiveaux
13 · Niveaux LTI — Starter → Legend
← FermerNotifications
14 · Notifications — Centre push in-app
← FermerAmis
15 · Amis — Liste + recherche joueurs
← FermerMessages
16 · Messages — Conversations 1:1 + groupes défi
← FermerClassement
17 · Classement — LTI/Putting/Chipping/Défis × Tous/Club/National/Amis
← FermerProfil
18 · Profil — Coach (en attente), club de golf, navigation
← FermerÉdition profil
19 · Édition profil — type de compte, pseudo, handicap
← FermerNouvelle conv.
20 · Nouvelle conversation — picker d'ami avec niveau et club
← FermerChat
21 · Chat — vrai échange coaching avec C4-DY Prime
← FermerProfil ami
22 · Profil ami — points, amis communs, défis communs
← FermerMes activités
23 · Mes activités — agrégat Ateliers / Challenges / Défis / Parcours
← FermerHistorique
24 · Historique d'exercices — détail par séance
← FermerPerf GC
25 · Mes performances Global Challenge
← FermerInscription
26 · Inscription — Joueur / Coach, club de golf obligatoire
← FermerGolf Picker
27 · Golf Picker — Google Places recherche en temps réel