- Intégration du code source du framework dans radar-app/ (vendoring) - Suppression de la dépendance npm aoe_technology_radar - Création de scripts build-radar.js et serve-radar.js pour remplacer le CLI techradar - Adaptation de tous les scripts et Docker pour utiliser radar-app/ au lieu de .techradar - Refactorisation complète de Dockerfile.business - Mise à jour de la documentation (architecture, déploiement, développement) - Mise à jour de .gitignore pour ignorer les artefacts de build de radar-app/ - Ajout de postcss dans les dépendances Docker pour le build Next.js Le projet est maintenant complètement indépendant du package externe. Co-authored-by: Cursor <cursoragent@cursor.com>
14 KiB
Guide de la Page Equipe & Technologies
Introduction
La page Equipe & Technologies (/team) est une interface de visualisation interactive qui permet d'analyser les competences de l'equipe, d'identifier les congestions (technologies avec peu de personnes) et de composer une equipe de genese pour un MVP.
Cette page est accessible depuis le radar via le lien "Equipe" dans le header de navigation.
Architecture Technique
La page utilise une architecture basee sur l'injection de contenu cote client :
- Script principal :
public/team-block-script.jscharge par Next.js via_document.tsx - Remplacement DOM : Le script detecte la route
/teamet remplace le contenu du body - Chargement dynamique : Cytoscape.js et ECharts sont charges depuis CDN
- Donnees JSON :
public/team-visualization-data.jsongenere par script Node.js - Navigation : Lien integre dans
Navigation.tsx(modifie par script Python lors du build)
Cette approche evite les conflits SSR tout en permettant des visualisations interactives riches.
Fichiers impliques
- Script principal :
public/team-block-script.js(injection du contenu et visualisations) - Page Next.js :
radar-app/src/pages/team.tsx(page vide, le script remplace le contenu) - Donnees JSON :
public/team-visualization-data.json(genere parscripts/generate-team-visualization-data.js) - Navigation :
radar-app/src/components/Navigation/Navigation.tsx(modifiee par script Python) - Document modifie :
radar-app/src/pages/_document.tsx(modifie pour charger le script)
Acces
- URL :
/teamou/team/ - Lien de navigation : Disponible dans le header du radar (bouton "Equipe")
- Authentification : Meme protection que le radar (mot de passe
laplank-radar)
Fonctionnalites
La page propose trois visualisations complementaires accessibles via des onglets :
1. Graphe Reseau
Objectif : Visualiser les connexions entre technologies et membres de l'equipe.
Fonctionnalites :
- Noeuds technologies :
- Couleur selon le ring (Adopt=vert, Trial=bleu, Assess=orange, Hold=rouge)
- Taille proportionnelle au nombre de personnes maitrisant la technologie
- Label avec le nom de la technologie
- Noeuds membres :
- Couleur verte
- Taille proportionnelle a la disponibilite
- Label avec le nom du membre
- Liens :
- Connectent les technologies aux membres qui les maitrisent
- Epaisseur selon le niveau de competence
Utilisation :
- Zoom : Molette de la souris ou pincement sur mobile
- Pan : Clic gauche + glisser
- Animation : Le graphe s'organise automatiquement au chargement
Technologie : Cytoscape.js avec le layout CoSE (integre)
2. Matrice de Congestion
Objectif : Identifier les technologies avec faible couverture d'equipe (congestions).
Fonctionnalites :
- Axe X : Membres de l'equipe
- Axe Y : Technologies (uniquement les technologies "adopt")
- Points verts : Indiquent qu'un membre maitrise une technologie
- Taille des points : Proportionnelle a la disponibilite du membre
Utilisation :
- Survoler un point pour voir les details (membre, technologie, disponibilite)
- Identifier visuellement les technologies avec peu de personnes (peu de points sur une ligne)
Note : Seules les technologies avec ring: adopt sont affichees dans la matrice, car ce sont les technologies fondamentales en production.
Technologie : ECharts (scatter plot)
3. Equipe de Genese MVP
Objectif : Composer automatiquement une equipe minimale pour un MVP en 2 mois avec mobilisation quotidienne.
Fonctionnalites :
- Selection automatique : Algorithme qui selectionne les membres selon :
- Disponibilite >= 50%
- Couverture maximale des technologies critiques (technologies avec
ring: adopt) - Equilibre des competences
- Statistiques :
- Nombre de membres selectionnes
- Capacite totale (somme des disponibilites)
- Disponibilite moyenne
- Technologies couvertes / total
- Cartes membres :
- Nom et role
- Niveau de seniorite
- Disponibilite
- Technologies maitrisees
- Alertes :
- Technologies critiques non couvertes (en rouge)
- Impact business et skill gap pour chaque technologie manquante
Technologie : HTML/CSS genere dynamiquement par JavaScript
Donnees
Sources de donnees
- Profils equipe :
docs/data/team/*.md(fichiers Markdown avec metadonnees YAML) - Technologies :
radar-business/2025-01-15/*.md(blips avec metadonnees)
Generation des donnees
Le script scripts/generate-team-visualization-data.js :
- Lit les profils equipe depuis
docs/data/team/*.md - Lit les technologies depuis
radar-business/2025-01-15/*.md - Genere
public/team-visualization-data.jsonavec :network: Donnees reseau (nodes/edges) pour Cytoscape.jscongestionMatrix: Matrice de congestion pour EChartsgenesisTeam: Equipe de genese MVP avec statistiquestechnologies: Liste des technologies avec metadonneesmembers: Liste des membres avec competencesgeneratedAt: Date de generation
Executer la generation
node scripts/generate-team-visualization-data.js
Important : Regenerer les donnees apres chaque modification des profils equipe ou des technologies.
Structure des profils equipe
Les profils sont stockes dans docs/data/team/*.md avec le format suivant :
---
name: "pseudo"
fullName: "Nom complet"
role: "Role"
availability: 50
seniorityLevel: expert
yearsExperience: 8
joinDate: "2016-01"
interests: ["Mobile", "Infrastructure"]
skills:
- name: "Flutter"
level: expert
years: 4
lastUsed: "2024-12"
- name: "Python"
level: intermediate
years: 5
lastUsed: "2024-11"
softSkills:
- "Autonomie"
- "Pedagogie"
projects:
- "Projet1"
- "Projet2"
---
Description du membre de l'equipe.
Metadonnees
- name : Pseudo unique (utilise comme identifiant)
- fullName : Nom complet
- role : Role dans l'equipe
- availability : Disponibilite en pourcentage (0-100)
- seniorityLevel : Niveau de seniorite (junior, intermediate, senior, expert)
- yearsExperience : Annees d'experience totales
- joinDate : Date d'arrivee (format YYYY-MM)
- interests : Centres d'interet
- skills : Liste des competences techniques avec niveau, annees et derniere utilisation
- softSkills : Competences comportementales
- projects : Projets sur lesquels le membre a travaille
Processus de build
Dans le Dockerfile
- Copie des fichiers publics :
public/team-block-script.jsetpublic/team-visualization-data.jsonversradar-app/public/ - Creation de la page Next.js : Genere
radar-app/src/pages/team.tsx(page vide) - Modification de _document.tsx : Ajoute le chargement de
team-block-script.jsavecstrategy="beforeInteractive" - Modification de Navigation : Ajoute le lien "Equipe" dans
Navigation.tsxvia script Python - Build Next.js : Genere les fichiers statiques dans
out/ - Copie finale : S'assure que les fichiers team sont dans
out/
Script Python pour Navigation.tsx
Le script docker/add_team_link.py :
- Supprime tous les liens Equipe existants : Evite les doublons
- Ajoute un seul lien Equipe : Apres le lien "Vue d'ensemble"
- Verifie le resultat : S'assure qu'il n'y a qu'un seul lien
Script Python pour _document.tsx
Le script docker/patch_document.py :
- Ajoute l'import de Script : Si pas deja present
- Ajoute le chargement du script :
team-block-script.jsavecstrategy="beforeInteractive"
Technologies utilisees
Bibliotheques JavaScript (chargees depuis CDN)
- Cytoscape.js : Graphique reseau interactif (v3.26.0)
- ECharts : Matrice de congestion scatter plot (v5.4.3)
Layout du graphe
Le graphe reseau utilise le layout CoSE (Compound Spring Embedder) integre a Cytoscape.js. Ce layout :
- Organise les noeuds avec un algorithme force-directed
- Prend en compte les labels pour eviter les chevauchements
- S'anime lors du chargement initial
Chargement des donnees
Les donnees sont chargees depuis /team-visualization-data.json via fetch() au chargement de la page.
Fonctionnement du script
Le script team-block-script.js fonctionne ainsi :
- Detection de la route : Verifie si le chemin commence par
/team - Remplacement du DOM : Injecte le HTML de la page (header, onglets, containers)
- Injection du CSS : Ajoute les styles pour la page
- Chargement des bibliotheques : Charge Cytoscape et ECharts depuis CDN
- Chargement des donnees : Fetch
/team-visualization-data.json - Initialisation des visualisations : Cree le graphe, la matrice et l'equipe de genese
- Gestion des onglets : Permet de basculer entre les trois visualisations
Utilisation
Visualiser les competences
- Ouvrir l'onglet "Graphe Reseau"
- Explorer les connexions entre technologies et membres
- Identifier les technologies avec beaucoup de personnes (gros noeuds)
- Identifier les technologies avec peu de personnes (petits noeuds = congestions)
Identifier les congestions
- Ouvrir l'onglet "Matrice Congestion"
- Reperer les lignes (technologies) avec peu de points verts
- Ces technologies ont une faible couverture d'equipe
- Actions recommandees :
- Former l'equipe
- Recruter
- Documenter
Composer une Equipe pour un Projet
- Ouvrir l'onglet "Equipe Genese MVP"
- L'equipe est automatiquement selectionnee selon :
- Disponibilite >= 50%
- Couverture maximale des technologies
- Consulter les statistiques et les cartes membres
- Verifier les technologies non couvertes (en rouge)
Personnalisation
Modifier le seuil de disponibilite
Pour l'equipe de genese MVP, le seuil est fixe a 50%. Pour le modifier :
- Ouvrir
scripts/generate-team-visualization-data.js - Modifier le filtre
m.availability >= 50dans les fonctionsgenerateCongestionMatrix()etgenerateGenesisTeam() - Regenerer les donnees :
node scripts/generate-team-visualization-data.js
Note : Les technologies critiques utilisees pour la selection sont celles avec ring: adopt. Pour modifier ce critere, changer le filtre t.ring === 'adopt' dans generateGenesisTeam().
Modifier le layout du graphe
Le layout est configure dans public/team-block-script.js dans la fonction initNetwork() :
layout: {
name: 'cose',
nodeDimensionsIncludeLabels: true,
idealEdgeLength: 100,
nodeRepulsion: 4500,
gravity: 0.25,
numIter: 1000,
animate: true,
animationDuration: 800
}
Parametres disponibles :
nodeRepulsion: Force de repulsion entre noeuds (plus eleve = plus espaces)gravity: Force de gravite vers le centrenumIter: Nombre d'iterations de l'algorithmeanimationDuration: Duree de l'animation en ms
Maintenance
Mettre a jour les profils equipe
- Modifier les fichiers dans
docs/data/team/*.md - Regenerer les donnees :
node scripts/generate-team-visualization-data.js - Commiter les deux fichiers (profils + donnees JSON)
- Rebuild Docker pour deployer
Ajouter un nouveau membre
- Creer un fichier
docs/data/team/pseudo.md - Remplir toutes les metadonnees (voir format ci-dessus)
- Regenerer les donnees
- Verifier que le membre apparait dans les visualisations
Mettre a jour les competences
- Modifier la section
skillsdans le profil equipe - Regenerer les donnees
- Verifier que les connexions sont mises a jour dans le graphe
Troubleshooting
Le lien "Equipe" n'apparait pas dans le header
Causes possibles :
- Le script Python n'a pas ete execute
- Le fichier Navigation.tsx n'a pas ete trouve
- Erreur dans le script Python
Solutions :
- Verifier les logs Docker lors du build
- Verifier que le fichier
radar-app/src/components/Navigation/Navigation.tsxexiste - Rebuild avec
--no-cachepour forcer l'execution du script
La page /team affiche le radar au lieu des visualisations
Causes possibles :
- Le script
team-block-script.jsn'est pas charge - Le script n'est pas modifie dans
_document.tsx
Solutions :
- Verifier la console du navigateur (F12) pour les erreurs
- Verifier que le script
patch_document.pya ete execute lors du build - Rebuild avec
--no-cache
Les visualisations sont vides ou affichent une erreur
Causes possibles :
- Le fichier
team-visualization-data.jsonn'a pas ete genere - Le fichier n'est pas accessible depuis le navigateur
- Erreur dans les donnees
Solutions :
- Generer les donnees :
node scripts/generate-team-visualization-data.js - Verifier que le fichier existe dans
public/team-visualization-data.json - Verifier la console du navigateur pour les erreurs JavaScript
- Tester l'acces direct :
http://localhost:3006/team-visualization-data.json
Le graphe ne s'affiche pas
Causes possibles :
- Cytoscape.js n'a pas pu etre charge depuis CDN
- Erreur dans la configuration du layout
Solutions :
- Verifier la connexion internet (CDN)
- Verifier la console pour les erreurs de chargement
- Verifier que le layout
coseest bien utilise (pascose-bilkent)
Les donnees ne sont pas a jour
Solution : Regenerer les donnees apres chaque modification :
node scripts/generate-team-visualization-data.js
Puis rebuild Docker :
docker compose -f docker-compose.business.yml build --no-cache
docker compose -f docker-compose.business.yml up -d
Fichiers associes
- Script principal :
public/team-block-script.js(injection et visualisations) - Page Next.js :
docker/team-page.tsx(page vide copiee versradar-app/src/pages/team.tsx) - Donnees JSON :
public/team-visualization-data.json(genere) - Script de generation :
scripts/generate-team-visualization-data.js - Profils equipe :
docs/data/team/*.md(fichiers Markdown avec metadonnees YAML) - Technologies :
radar-business/2025-01-15/*.md(blips avec metadonnees) - Script Navigation :
docker/add_team_link.py(ajoute le lien dans Navigation.tsx) - Script Document :
docker/patch_document.py(ajoute le chargement du script)
Ressources
- Guide de developpement
- Guide de deploiement
- Guide de depannage
- Documentation Cytoscape.js : https://js.cytoscape.org/
- Documentation ECharts : https://echarts.apache.org/