lami1a logo

statuts & projects

Rapport d'estimation — yo3een.liismaiil.org

Rapport d'estimation — yo3een.liismaiil.org

Document préparé le : 2 août 2026

Destinataires : Associés / Investisseurs

Objet : Évaluation technique, architecture applicative et estimation financière du projet


Vue d'ensemble du projet

yo3een.liismaiil.org (dossier /sprints, nom technique sprints.liismaiil) est une plateforme de mémorisation du Coran en duo temps réel : deux étudiants (guests) sont mis en binôme sur une session de sprint et reclassent ensemble des versets mélangés, tour par tour, avec suivi des erreurs et historique de validation.

C'est le pendant web de l'app mobile Yo3eenApp (déjà auditée), mais avec une architecture temps réel bien plus poussée : synchronisation Redis pub/sub + Server-Sent Events, avec reconnexion automatique à backoff exponentiel — pas de simple lecture Firestore.

Points clés :

  • Un tableau de bord enseignant (interns) avec visualisation D3 de la progression par étudiant
  • Un jeu en duo (binome) : création/rejoindre une session, tour par tour, historique VALIDATED par paire de joueurs
  • Un audit de sécurité réel mené et corrigé (5 failles critiques résolues, TypeScript strict réactivé)
  • Une suite de tests Playwright réellement écrite (5 fichiers : auth, binome, navigation, performance, sprints) — le seul projet audité à ce jour avec des tests non-placeholder
  • Un module audio en duo (LiveKit) construit et testé, puis retiré du périmètre actuel (choix de simplification, pas un abandon subi)

Architecture applicative

Routes

RouteRôle
/, /signinAccueil, authentification
/internsDashboard enseignant — progression D3 par étudiant
/progressVue de progression
/sprints (+ parallel route @steps)Sélection de stage, sessions en cours des autres joueurs
/sprints/[sessionId]Jeu en duo actif
/cgu, /confidentialite, /donnees, /mentions-legales, /privacyPages légales

5 endpoints API réels : api/binome/{session,move,start,events}, api/guests/cleanup.

Architecture temps réel — le vrai différenciateur technique

Le jeu en duo ne repose pas sur du polling ni sur de simples écoutes Firestore, mais sur une architecture pub/sub dédiée :

  • Redis (ioredis, compatible Upstash) : état de session (session:{id}:state), version incrémentale (session:{id}:version), canal pub/sub (binome:{id})
  • Server-Sent Events (/api/binome/events) : connexion persistante navigateur, reconnexion automatique à backoff exponentiel (1s → 2s → 4s… jusqu'à 30s) en cas de coupure
  • Firestore en complément : persistance de découvrabilité (liste des sessions) et historique final (VALIDATED), pas l'état de jeu en direct
  • 12 bugs réels documentés et corrigés sur cette synchronisation (races de version, sentinelles -1 polluant l'état partagé, incohérences creator/joiner...) — fonctionnalité qualifiée "testée et validée" dans l'historique de développement

Historique — LiveKit (audio en duo)

Un module d'audio temps réel via LiveKit (voix pendant la partie) a été construit, avec gestion de room dédiée par session (binome_{sessionId}) et route de génération de token. Il n'est plus présent dans le code ni les dépendances actuelles — retiré à un stade ultérieur du projet. Mentionné ici pour transparence : c'est du travail réel déjà effectué, pas une fonctionnalité en cours.

Audit de sécurité et mise en production

Un audit de sécurité a identifié 5 failles critiques (API de jeu sans vérification JWT, secret JWT exposé côté client via une variable NEXT_PUBLIC_*, middleware ne protégeant qu'une partie des routes, CORS *, erreurs TypeScript non bloquantes en build) — toutes corrigées, avec réactivation du build TypeScript strict (ignoreBuildErrors: false, confirmé dans le code actuel) qui a fait remonter et corriger 20+ erreurs supplémentaires.


Volume et complexité technique

Chiffres mesurés directement sur le codebase

IndicateurValeur
Fichiers source (TypeScript + React)101 fichiers
Lignes de code~14 600 lignes
Routes12 pages + 5 endpoints API
Composants React26 composants
Slices Redux actives6 (stageSlice, guestPrismaSlice, searchSlice, lessonSlice, coursSlice, binomeSlice) — 3 fichiers .txt désactivés non comptés
Fichiers utilisant Firebase/Firestore10 fichiers
Fichiers utilisant Redis (ioredis)2 fichiers (client + logique pub/sub)
Tests automatisés5 suites Playwright réelles (auth, binome, navigation, performance, sprints)
Dépendances62 packages (44 production + 18 dev)
Build TypeScript strict🟢 Activé (ignoreBuildErrors: false) — vérifié dans next.config.mjs

Correction par rapport aux notes de développement antérieures : le paiement Stripe et la cartographie Mapbox mentionnés dans des notes plus anciennes ne sont plus des dépendances actives — stripe n'apparaît pas dans package.json, et les rares occurrences du mot "stripe" dans le code sont des faux positifs (une classe CSS bg-stripe-gradient, un commentaire sur une bande diagonale visuelle). Un composant GoogleMapComponent.tsx existe mais son intégration n'a pas été vérifiée en profondeur dans cet audit.

Stack technique

CoucheTechnologieUsage
FrameworkNext.js 14 (App Router)Route groups + parallel routes
InterfaceHeroUI + Tailwind CSS + Framer MotionDesign system + animations
StateRedux Toolkit + Redux PersistGestion d'état globale
Base de donnéesFirebase/FirestorePersistance et découvrabilité des sessions
Temps réelRedis (ioredis, Upstash) + SSEÉtat de jeu en direct, pub/sub, reconnexion auto
AuthentificationFirebase Auth + JWT (jose)Sécurisée après audit (JWT vérifié sur les routes de jeu)
Visualisation de donnéesD3.js + ApexChartsDashboard progression étudiants
TestsPlaywright5 suites réelles, y compris un test de performance
TypageTypeScript strictBuild bloquant activé, 20+ erreurs corrigées

Estimation financière

Méthodologie

Estimation basée sur le volume de code mesuré, la complexité de l'architecture temps réel (Redis pub/sub, reconnexion SSE) et les standards du marché pour un développeur senior full-stack (React/Next.js/Firebase/Redis).

Décomposition par module

ModuleHeures
Architecture Next.js App Router (route groups, parallel routes, middleware)35h
Authentification (Firebase Auth + JWT)30h
Dashboard interns (D3 + historique de validation)90h
Module sprints (sélection stage, liste de sessions)70h
Jeu binome temps réel (Redis pub/sub, SSE reconnect, 12 bugs résolus, validé)150h
Module audio LiveKit (construit, testé, puis retiré)30h
Audit sécurité + remédiation (5 failles critiques + 20 erreurs TS)40h
Tests Playwright (5 suites réelles)35h
Cartographie Google Maps10h
Qualité du code20h
Total510 heures

Équivalent : ~64 jours de travail (base 8h/jour), soit environ 3 mois pour un développeur à temps plein.

Valorisation selon profil et marché

ProfilTarif journalierEstimation totale
Développeur senior — France (freelance)600 €/j38 000 €
Agence web — France800 €/j51 000 €
Développeur senior — Europe (freelance)400 €/j26 000 €
Développeur senior — Maghreb (freelance)250 €/j16 000 €

Comparaison avec le marché

Type de projet comparableFourchette marché
Dashboard de suivi avec authentification10 000 € — 25 000 €
Application temps réel (pub/sub, reconnexion, jeu en direct)25 000 € — 45 000 €
yo3een.liismaiil.org (cumul + audit sécurité complet + tests réels)30 000 € — 50 000 €

Résumé exécutif

Ce que représente ce projet

yo3een.liismaiil.org est le projet web le plus rigoureux des audits réalisés à ce jour :

  1. Une architecture temps réel réelle — Redis pub/sub + SSE, pas du polling déguisé
  2. Un audit de sécurité mené et corrigé, pas juste documenté en théorie
  3. De vrais tests automatisés — 5 suites Playwright, contrairement aux autres projets audités
  4. Une fonctionnalité audio construite puis retirée par choix, pas par échec
  5. Un build TypeScript strict actif, vérifié dans la configuration actuelle

Indicateurs vérifiables statiquement

(Aucun build, audit Lighthouse ou lancement de tests live n'a été exécuté pour ce rapport — indicateurs vérifiables directement dans le code.)

CritèreRésultat
Build TypeScript strict🟢 Activé (ignoreBuildErrors: false, ignoreDuringBuilds: false)
Tests automatisés🟢 5 suites Playwright réelles présentes
Audit sécurité🟢 5 failles critiques documentées et corrigées (historique de développement)
Fichiers .txt désactivés dans components/🟠 15 constatés, non traités (hors périmètre de cet audit)
Stripe/Mapbox actifs🔴 Non — dépendances absentes de package.json, mentions résiduelles = faux positifs
Durée du projet🔵 Non déterminable via git (historique réécrit) — volume de code cohérent avec ~3 mois de travail

Estimation finale

Entre 30 000 € et 50 000 € selon les standards du marché français, pour une application développée par 1 à 2 développeurs en environ 3 mois.


Rapport généré le 2 août 2026 — données extraites directement du codebase (comptages de fichiers, lignes, dépendances, routes, configuration) Aucun audit Lighthouse, build ou test live n'a été exécuté pour produire ce rapport — voir section "Indicateurs vérifiables statiquement"

Précédent
YofeedApp