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
VALIDATEDpar 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
| Route | Rôle |
|---|---|
/, /signin | Accueil, authentification |
/interns | Dashboard enseignant — progression D3 par étudiant |
/progress | Vue 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, /privacy | Pages 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
-1polluant 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
| Indicateur | Valeur |
|---|---|
| Fichiers source (TypeScript + React) | 101 fichiers |
| Lignes de code | ~14 600 lignes |
| Routes | 12 pages + 5 endpoints API |
| Composants React | 26 composants |
| Slices Redux actives | 6 (stageSlice, guestPrismaSlice, searchSlice, lessonSlice, coursSlice, binomeSlice) — 3 fichiers .txt désactivés non comptés |
| Fichiers utilisant Firebase/Firestore | 10 fichiers |
Fichiers utilisant Redis (ioredis) | 2 fichiers (client + logique pub/sub) |
| Tests automatisés | 5 suites Playwright réelles (auth, binome, navigation, performance, sprints) |
| Dépendances | 62 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 —
stripen'apparaît pas danspackage.json, et les rares occurrences du mot "stripe" dans le code sont des faux positifs (une classe CSSbg-stripe-gradient, un commentaire sur une bande diagonale visuelle). Un composantGoogleMapComponent.tsxexiste mais son intégration n'a pas été vérifiée en profondeur dans cet audit.
Stack technique
| Couche | Technologie | Usage |
|---|---|---|
| Framework | Next.js 14 (App Router) | Route groups + parallel routes |
| Interface | HeroUI + Tailwind CSS + Framer Motion | Design system + animations |
| State | Redux Toolkit + Redux Persist | Gestion d'état globale |
| Base de données | Firebase/Firestore | Persistance et découvrabilité des sessions |
| Temps réel | Redis (ioredis, Upstash) + SSE | État de jeu en direct, pub/sub, reconnexion auto |
| Authentification | Firebase Auth + JWT (jose) | Sécurisée après audit (JWT vérifié sur les routes de jeu) |
| Visualisation de données | D3.js + ApexCharts | Dashboard progression étudiants |
| Tests | Playwright | 5 suites réelles, y compris un test de performance |
| Typage | TypeScript strict | Build 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
| Module | Heures |
|---|---|
| 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 Maps | 10h |
| Qualité du code | 20h |
| Total | 510 heures |
Équivalent : ~64 jours de travail (base 8h/jour), soit environ 3 mois pour un développeur à temps plein.
Valorisation selon profil et marché
| Profil | Tarif journalier | Estimation totale |
|---|---|---|
| Développeur senior — France (freelance) | 600 €/j | 38 000 € |
| Agence web — France | 800 €/j | 51 000 € |
| Développeur senior — Europe (freelance) | 400 €/j | 26 000 € |
| Développeur senior — Maghreb (freelance) | 250 €/j | 16 000 € |
Comparaison avec le marché
| Type de projet comparable | Fourchette marché |
|---|---|
| Dashboard de suivi avec authentification | 10 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 :
- Une architecture temps réel réelle — Redis pub/sub + SSE, pas du polling déguisé
- Un audit de sécurité mené et corrigé, pas juste documenté en théorie
- De vrais tests automatisés — 5 suites Playwright, contrairement aux autres projets audités
- Une fonctionnalité audio construite puis retirée par choix, pas par échec
- 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ère | Ré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"