Foot Alert est une application mobile de notifications football en temps réel : buts, cartons, fins de match, sur les championnats que vous suivez. Le client est un développeur passionné qui voulait sortir son MVP rapidement pour valider la demande. Voici l'histoire détaillée, sans filtre, des 6 semaines de développement freelance.
Semaine 0 — Le brief
Premier call : 45 minutes. Le client arrive avec une idée claire et 3 mockups Figma maison. Objectif : publier sur Google Play d'abord, App Store ensuite. Budget cadré, délai de 6 semaines pour la version publique. On valide le scope :
- Inscription email + Google + Apple
- Sélection des compétitions et équipes suivies
- Notifications push en temps réel (FCM)
- Live score sur écran d'accueil
- Historique des matchs avec filtres
- Mode sombre par défaut
Semaine 1 — Setup + design system
Création du repo Git, mise en place de React Native (Expo SDK 51), TypeScript strict, ESLint + Prettier, et CI GitHub Actions pour build EAS automatique. En parallèle, dérivation du design system depuis les mockups : tokens couleurs, typographies, espacements, composants atomiques.
Semaines 2-3 — Auth, navigation, persistence
Mise en place de Supabase Auth pour la triple connexion (email, Google, Apple). React Navigation v7 avec un drawer + bottom tabs. Persistence de la session via SecureStore Expo. Les premiers écrans (onboarding, sélection compétitions) sont livrés avec animations Reanimated 3.
Semaines 3-4 — Notifications push, le morceau délicat
Intégration Firebase Cloud Messaging (FCM). Backend Node.js qui poll une API sportive partenaire toutes les 30 secondes, détecte les events (but, carton, fin de match) et envoie une notif ciblée aux users abonnés. Premier piège : les notifications Android sont silencieuses en mode économie d'énergie. Solution : channel Android dédié à haute priorité + tests sur 5 modèles Samsung/Xiaomi/Pixel.
Semaine 5 — Live score + historique
Écran live qui affiche les matchs du jour, mise à jour optimiste via WebSocket pour les utilisateurs actifs. Écran historique avec filtres par compétition, par équipe, par date. Mise en cache des résultats via React Query + AsyncStorage pour le mode hors-ligne partiel.
Semaine 6 — Publication Play Store
C'est là où ça se complique pour tous les premiers MVP. Process complet :
- Création du compte développeur Google Play (25 $ one-shot)
- Génération de l'AAB signé via EAS Build
- Préparation des assets store : icône 512×512, feature graphic 1024×500, 4 screenshots par taille d'écran (phone, 7", 10")
- Rédaction de la fiche store : description courte 80 chars, description longue 4000 chars, tags catégorie
- Configuration de la politique de confidentialité (hébergée sur footalert.app/confidentialite)
- Soumission pour revue Google : 24 à 72 h en pratique
- Premier rejet : « contenu sensible non déclaré » (mention de paris sportifs dans un mockup laissé par erreur). Correction + resoumission
- Publication validée à J+5 après première soumission
Stack technique finale
- Frontend : React Native + Expo SDK 51, TypeScript, Reanimated 3, React Navigation 7
- State : Zustand + React Query (TanStack)
- Backend : Node.js (Fastify), PostgreSQL Supabase, Redis pour le rate limiting
- Auth : Supabase Auth (Google + Apple + Email)
- Push : Firebase Cloud Messaging via expo-notifications
- CI/CD : EAS Build + GitHub Actions, déploiement Play Store automatisé
Ce qui a marché
- Le scope cadré dès semaine 0 : aucun feature creep en 6 semaines
- Expo qui a divisé par 2 le temps de setup et de publication
- Une revue Figma + code en visio chaque vendredi avec le client
- Un Notion partagé pour les bugs et features (zéro Slack)
Ce qui a coincé
- Le rate limiting Firebase qui a sauté en testing → migration vers RabbitMQ en backend
- Le mode portrait-only sur iPad refusé par Apple en V1 → patch en V1.1
- Le compte Apple Developer mis en place tardivement (J+30) → reporté à V2
Total temps freelance : 6 semaines, 38 heures/semaine en moyenne. Budget total : entre 4500 et 6000 € selon scope, all included. App publiée, fonctionnelle, livrée avec code source complet et documentation.