statuts & projects
Rapport d'estimation — yofeed.liismaiil.org
Rapport d'estimation — yofeed.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
yofeed.liismaiil.org (dossier /stages) est une plateforme de suivi de progression par stagiaire, développée de juillet 2023 à mars 2026, couvrant :
- Une authentification dédiée (
/signin) - Un dashboard hôte/invité de suivi des stagiaires (interns)
- Un espace de progression par stagiaire (stages/[viewerId]) avec 3 vues chargées en parallèle : invités, sprints, étapes
- Un module de récompenses (gifts) avec visualisation D3 dédiée
- Des pages marketing publiques (à propos, mentions légales, confidentialité)
C'est la même famille technique que www.liismaiil.org (Next.js App Router, HeroUI, Redux Toolkit, Firebase, D3, Google Maps), avec une architecture de routes encore plus poussée : une page dynamique par stagiaire compose trois parallel routes simultanément.
Architecture applicative — routes et patterns
Routes constatées dans le code
| Route | Groupe | Rôle |
|---|---|---|
/ | racine | Page d'accueil |
/signin | (auth) | Authentification |
/interns | (dashbord) | Dashboard de suivi des stagiaires |
/gifts | (dashbord) | Module de récompenses (visualisation D3) |
/stages | (progress) | Vue d'ensemble des stages — parallel route @steps |
/stages/[viewerId] | (progress) | Fiche détaillée par stagiaire — 3 parallel routes simultanées : @guests, @sprints, @steps |
/about, /confidentialite, /mentions-legales, /privacy | (marketing) | Pages publiques |
La route /stages/[viewerId] est le point le plus sophistiqué de l'application : trois zones (invités, sprints, étapes) se chargent indépendamment et simultanément dans le même layout pour un même stagiaire — chaque zone peut avoir son propre état de chargement/erreur sans bloquer les deux autres. C'est un pattern avancé du Next.js App Router, plus complexe à maintenir qu'une simple page avec des useEffect de fetch.
3 endpoints API applicatifs (app/api/route.ts, app/api/cleanup/route.ts, app/api/debug-refresh/route.ts), plus des modules internes (app/api/lib/*) pour l'auth, les types de données et Prisma.
Modules de composants (86 composants)
| Dossier | Contenu |
|---|---|
components/interns | Statistiques hôte/invité |
components/gifts | Module de récompenses, vue D3 dédiée (GiftsD3ViewWrapper) |
components/stage / components/space | Plateaux d'évaluation (glisser-déposer, sélection, suites d'évaluation) |
components/insight | Composants d'analyse partagés |
components/maps | Carte interactive Google Maps |
components/auth | Authentification (Firebase Auth + JWT) |
components/front | Navigation, footer, thème |
components/organisation, components/liismaiil, components/presentation, components/search, components/shared, components/sprint | Composants transverses |
Visualisation de données et expérimentation 3D
- D3.js est utilisé pour les visualisations custom, notamment
GiftsD3ViewWrapper.tsx(module récompenses). - Le dossier
components/liismaiilcontenait une scène 3D expérimentale en Three.js (Scene/Custom, avec@react-three/drei,OrbitControls, géométries personnalisées) — du vrai travail de 3D temps réel a donc été engagé sur ce projet, mais ce composant n'était pas branché à une route active : il faisait partie d'un lot de fichiers désactivés (voir note nettoyage ci-dessous), retiré du dépôt à ta demande.
Nettoyage effectué pendant cet audit : 35 fichiers
.txtdanscomponents/(composants désactivés/dupliqués : anciennes versions des plateaux d'évaluationsprint, la scène 3D expérimentale, des variantes de cartographie, etc.) ne pouvaient de toute façon pas être importés par le build (extension.txtnon résolue par Next.js/webpack) — ils ont été supprimés avec ton accord. D'autres fichiers du même type existent hors du périmètrecomponents/(app/api/lib/mongoose-db.txt,store/slices/productSlice.txt,viewerSlice.txt,snackbarSlice.txt) et n'ont pas été touchés dans le cadre de cet audit.
Paiement Stripe — préparé, non branché
8 fichiers référencent un champ stripe_account_id / stripeCustomerId (types de données, modèle Prisma), mais aucune route /subscription ou tunnel de paiement actif n'a été trouvée dans ce dépôt — contrairement à www.liismaiil.org. L'intégration Stripe semble préparée au niveau du modèle de données (probablement pour du Stripe Connect côté hôtes) sans être branchée côté interface.
Volume et complexité technique
Chiffres mesurés directement sur le codebase
| Indicateur | Valeur |
|---|---|
| Fichiers source (TypeScript + React) | 181 fichiers |
| Lignes de code | ~24 200 lignes |
| Pages et routes | 10 routes adressables + 4 slots de parallel routes + 3 endpoints API |
| Composants React | 86 composants (après nettoyage des 35 fichiers .txt morts) |
| Composants connectés au store (Redux) | 61 composants |
| Slices de state management (Redux) | 5 slices actives (stageSlice, guestPrismaSlice, searchSlice, lessonSlice, coursSlice) — 3 slices supplémentaires désactivées (.txt) non comptées |
| Fichiers utilisant Firebase/Firestore | 8 fichiers |
| Fichiers liés à Stripe (données seulement) | 8 fichiers — pas de tunnel de paiement actif |
| Tests automatisés | 0 — playwright.config.ts présent mais __tests__/ vide |
| Dépendances | 56 packages (39 production + 17 dev) |
Stack technique
| Couche | Technologie | Usage |
|---|---|---|
| Framework | Next.js 14 (App Router) | Route groups + parallel routes (jusqu'à 3 slots simultanés) |
| Interface | HeroUI + Tailwind CSS + Framer Motion | Design system + animations |
| State | Redux Toolkit | Gestion d'état globale |
| Base de données | Firebase/Firestore + Prisma | Config Prisma présente (prisma.config.ts → SQLite prisma/stage.db) mais schéma prisma/schema.prisma absent du dépôt ; un fichier store/shem.prisma distinct contient un modèle de données non branché à cette config |
| Authentification | Firebase Auth + JWT custom | Page dédiée /signin |
| Visualisation de données | D3.js | Module récompenses (gifts) |
| 3D (expérimental, retiré) | Three.js + @react-three/drei | Scène 3D non branchée à une route, supprimée pendant cet audit |
| Cartographie | Google Maps (@vis.gl/react-google-maps) | Intégration carte interactive |
| Tests | Playwright (configuré) | Aucun test écrit à ce jour |
| Typage | TypeScript strict | Quasi-totalité du codebase en .ts/.tsx |
Estimation financière
Méthodologie
Estimation basée sur le volume de code mesuré, la complexité des routes imbriquées (parallel routes par stagiaire) et les standards du marché pour un développeur senior full-stack (React / Next.js / Firebase / Prisma).
Décomposition par module
| Module | Heures |
|---|---|
| Architecture Next.js App Router (route groups, 3 parallel routes par stagiaire, middleware) | 50h |
| Authentification (Firebase Auth + JWT + page signin) | 55h |
| Dashboard interns (statistiques hôte/invité) | 110h |
Fiche stagiaire /stages/[viewerId] (guests + sprints + steps en parallèle) | 160h |
| Module gifts (récompenses + visualisation D3) | 90h |
| Modèle de données Prisma/SQL + synchronisation Firestore | 55h |
| Champs de préparation Stripe Connect | 20h |
| Intégration cartographie Google Maps | 35h |
| Expérimentation 3D (Three.js, non aboutie) | 15h |
| Qualité du code (TypeScript, ESLint, nettoyage) | 30h |
| Total | 620 heures |
Équivalent : 78 jours de travail (base 8h/jour) soit environ 3,5 mois pour un développeur à temps plein.
Valorisation selon profil et marché
| Profil | Tarif journalier | Estimation totale |
|---|---|---|
| Développeur senior — France (freelance) | 600 €/j | 47 000 € |
| Agence web — France | 800 €/j | 62 000 € |
| Développeur senior — Europe (freelance) | 400 €/j | 31 000 € |
| Développeur senior — Maghreb (freelance) | 250 €/j | 20 000 € |
Comparaison avec le marché
| Type de projet comparable | Fourchette marché |
|---|---|
| Dashboard de suivi avec authentification | 10 000 € — 25 000 € |
| Plateforme avec routes imbriquées complexes (parallel routes) | 20 000 € — 40 000 € |
| Module de visualisation de données custom (D3) | 10 000 € — 20 000 € |
| yofeed.liismaiil.org (cumul des trois + préparation Stripe Connect) | 35 000 € — 55 000 € |
Résumé exécutif
Ce que représente ce projet
yofeed.liismaiil.org est une plateforme de suivi individualisé de stagiaires avec une architecture de routes avancée :
- Une fiche stagiaire à 3 vues parallèles — invités, sprints, étapes chargés simultanément sans se bloquer
- Un module de récompenses en D3.js — visualisation custom construite à la main
- Une préparation Stripe Connect au niveau du modèle de données, non branchée côté interface
- Une expérimentation 3D en Three.js engagée puis mise de côté (composants retirés lors de cet audit)
- Une architecture Next.js avancée partagée avec www.liismaiil.org (route groups, parallel routes)
Indicateurs vérifiables statiquement
(Aucun audit Lighthouse live n'a été lancé pour ce rapport — indicateurs vérifiables directement dans le code, sans exécuter l'application.)
| Critère | Résultat |
|---|---|
TypeScript strict (tsconfig strict: true) | 🟢 Activé |
| Tests automatisés | 🔴 Aucun (__tests__/ vide, Playwright configuré mais inutilisé) |
| Configuration ESLint | 🟢 Présente (next lint) |
| Fichiers morts identifiés et supprimés | 🟢 35 fichiers .txt retirés de components/ pendant cet audit |
| Configuration Prisma | 🟠 Présente mais schéma prisma/schema.prisma absent du dépôt |
| Durée du projet | 🔵 Juillet 2023 → Mars 2026 |
Estimation finale
Entre 35 000 € et 55 000 € selon les standards du marché français, pour une application développée par 2 contributeurs principaux sur 32 mois.
Rapport généré le 2 août 2026 — données extraites directement du codebase (comptages de fichiers, lignes, dépendances, routes) Aucun audit Lighthouse ou build n'a été exécuté pour produire ce rapport — voir section "Indicateurs vérifiables statiquement"