Site statique BPM construit avec React, TypeScript et Vite.
- Node.js
24.x - npm
>=10
npm installnpm run dev
npm run build
npm run preview
npm run typecheck
npm run lint
npm run testConstruire l'image :
docker build -t site-bpm .Lancer en local :
docker run --rm -p 8080:80 site-bpmFichiers concernés :
src/features/team/data/teamMembers.ts(données des membres)src/features/team/TeamPage.tsx(compteur visuel en gros derrière le graphe)src/features/team/constants.ts(taille de canvas si besoin de plus d'espace)
Le fichier teamMembers.ts contient un tableau d'objets :
{
id: "identifiant-unique",
name: "Prénom",
role: "Rôle",
photo: photoImportee,
x: 0,
y: 0
}Règles pratiques :
iddoit rester unique.x/ypilotent la position de la carte sur le canvas.- Pour une nouvelle photo, ajouter le fichier dans
src/assets/pp_team/, importer l'image dansteamMembers.ts, puis l'utiliser dansphoto. - Mettre à jour le nombre affiché dans
TeamPage.tsx(actuellement27) pour refléter l'effectif réel. - Si ça déborde à l'écran, augmenter
TEAM_CANVAS_WIDTHetTEAM_CANVAS_HEIGHTdansconstants.ts.
Fichier concerné :
src/features/home/data/contact.ts
Champs à modifier :
primaryRecipientEmail: destinataire principal.ccRecipientEmails: liste des personnes en copie.
Le lien mailto: est généré automatiquement via buildMailtoHref, donc il ne faut modifier que ces variables.
Il y a 2 zones indépendantes :
Fichier de logique :
src/features/home/data/eventSlides.ts
Action à faire :
- Ajouter vos images dans
src/assets/events/(.jpg,.jpeg,.png,.webp).
Notes :
- Les images sont chargées automatiquement.
- L'ordre d'affichage suit l'ordre alphabétique des noms de fichiers.
- Le texte
altest généré depuis le nom du fichier.
Fichier de logique :
src/features/events/EventsPage.tsx
Action à faire :
- Créer un dossier dans
src/assets/events_page/(exemple :nuit-2026). - Ajouter un
data.jsondans ce dossier. - Ajouter les photos de l'événement dans le même dossier.
Format attendu pour data.json :
{
"data": {
"name": "NOM EVENT",
"order": 5,
"when": "Jan 2026",
"personnes": 1200,
"where": "Paris",
"prix": 9000
},
"content": ["Point 1", "Point 2", "Point 3"]
}Règles pratiques :
orderdétermine la position dans la timeline (tri croissant).- Utiliser un
orderunique par événement. - Les images supportées :
.jpg,.jpeg,.png,.webp,.avif. - Le nom du dossier sert de
slugtechnique.
Fichier concerné :
src/features/home/data/equipmentCards.ts
Chaque carte suit cette structure :
{
id: "identifiant-unique",
label: "Catégorie",
title: "Nom affiché",
image: imageImportee,
gridColumn: "1 / span 1",
gridRow: "1"
}Pour ajouter/modifier du matériel :
- Ajouter l'image dans
src/assets/equipment/(ou un autre dossiersrc/assets/). - Importer l'image dans
equipmentCards.ts. - Ajouter/mettre à jour l'objet correspondant dans
equipmentCards.
Règles pratiques :
iddoit être unique.gridColumnetgridRowcontrôlent la position dans la grille.- Si 2 cartes se superposent visuellement, ajuster
gridColumn/gridRow.
Fichier concerné :
src/features/home/data/logos.ts
Deux listes sont affichées sur la home :
softwareLogos: section "Logiciels que nous maîtrisons"trustLogos: section "Ils nous font confiance"
Chaque entrée suit cette structure :
{
image: logoImporte,
alt: "Texte alternatif",
primary: "Nom affiché"
}Pour ajouter/modifier un logo :
- Ajouter l'image dans
src/assets/software/(logiciels) ousrc/assets/partners/(partenaires). - Importer l'image dans
logos.ts. - Ajouter/mettre à jour l'objet dans
softwareLogosoutrustLogos.
Règles pratiques :
altdoit décrire correctement le logo (accessibilité).primaryest le texte visible dans le bandeau.
- Menu et liens sociaux :
src/shared/config/navigation.ts
src/
app/
features/
events/
home/
team/
shared/
styles/