# Story 3.4: Page Projet Individuelle ## Status Ready for Dev ## Story **As a** visiteur, **I want** consulter une page dédiée pour chaque projet vedette, **so that** je comprends le contexte, la solution technique et vois le résultat. ## Acceptance Criteria 1. L'URL `/projet/{slug}` affiche le projet correspondant au slug 2. Le slug est récupéré depuis le router (pas depuis $_GET) 3. La page affiche les sections : Contexte, Solution technique, Travail d'équipe (si applicable), Durée, Témoignage (si disponible) 4. Un bouton/lien permet de visiter le projet en ligne (ou affiche "Non disponible") 5. Les technologies sont affichées sous forme de badges 6. Des captures d'écran sont affichées si disponibles (galerie simple) 7. Un lien "Retour aux projets" permet de revenir à la liste 8. Si le slug n'existe pas, la page 404 est affichée ## Tasks / Subtasks - [] **Task 1 : Créer la page project-single.php** (AC: 1, 2, 8) - [] Créer `pages/project-single.php` - [] Récupérer le slug depuis `$GLOBALS['routeParams']` - [] Charger le projet avec `getProjectBySlug()` - [] Rediriger vers 404 si projet non trouvé - [] **Task 2 : Afficher les informations principales** (AC: 3, 5) - [] Titre du projet - [] Badges technologies - [] Section Contexte - [] Section Solution technique - [] Section Travail d'équipe (si non null) - [] Durée du projet - [] **Task 3 : Ajouter le lien vers le projet** (AC: 4) - [] Bouton "Voir le projet en ligne" si URL disponible - [] Bouton "Voir sur GitHub" si URL GitHub disponible - [] Message "Projet non disponible en ligne" si aucun lien - [] **Task 4 : Afficher la galerie de captures** (AC: 6) - [] Grille de screenshots - [] Lazy loading sur les images - [ ] Lightbox optionnel (amélioration future) - [] **Task 5 : Ajouter le témoignage** (AC: 3) - [] Placeholder préparé pour Story 4.5 - [ ] Récupérer le témoignage lié au projet (Story 4.5) - [] **Task 6 : Ajouter la navigation** (AC: 7) - [] Breadcrumb en haut de page - [] Lien "Retour aux projets" - [] CTA "Me contacter" en bas ## Dev Notes ### Page pages/project-single.php ```php

Voir le projet en ligne Voir sur GitHub Projet non disponible en ligne
<?= htmlspecialchars($project['title']) ?>

Contexte

Solution Technique

Travail d'Équipe

Captures d'écran

Capture d'écran - <?= htmlspecialchars($project['title']) ?>
``` ### Structure de la Page ``` ┌─────────────────────────────────────────┐ │ Breadcrumb │ ├─────────────────────────────────────────┤ │ TITRE DU PROJET │ │ [Badge] [Badge] [Badge] │ │ [Voir en ligne] [GitHub] │ ├─────────────────────────────────────────┤ │ [Image principale] │ ├─────────────────────────────────────────┤ │ CONTENU │ SIDEBAR │ │ ───────────── │ │ │ Contexte │ Durée │ │ Solution technique │ │ │ Travail d'équipe │ Témoignage │ │ Captures d'écran │ │ ├─────────────────────────────────────────┤ │ [← Retour] [Me contacter] │ └─────────────────────────────────────────┘ ``` ## Testing - [] `/projet/ecommerce-xyz` affiche le bon projet - [] `/projet/inexistant` affiche la page 404 - [] Toutes les sections s'affichent correctement - [] Le bouton "Voir en ligne" fonctionne (si URL) - [] Le bouton "Voir sur GitHub" fonctionne (si GitHub) - [] Le breadcrumb est navigable - [] Les images sont en lazy loading - [] La page est responsive ## Dev Agent Record ### Agent Model Used Claude Opus 4.5 (claude-opus-4-5-20251101) ### File List | File | Action | Description | |------|--------|-------------| | `pages/project-single.php` | Modified | Page projet individuelle complète | ### Completion Notes - Récupération slug via router ($GLOBALS['routeParams']) - Redirection 404 si projet non trouvé - Sections: Contexte, Solution technique, Travail d'équipe (conditionnel) - Boutons: Voir en ligne + GitHub avec icônes SVG - Galerie screenshots en grille 2 colonnes - Sidebar avec durée du projet - Breadcrumb accessible avec aria-label - Navigation: retour + CTA contact - Lazy loading + fallback onerror sur images - Témoignage: placeholder préparé pour Story 4.5 ### Debug Log References Aucun problème rencontré. ## Change Log | Date | Version | Description | Author | |------|---------|-------------|--------| | 2026-01-22 | 0.1 | Création initiale | Sarah (PO) | | 2026-01-23 | 1.0 | Implémentation complète | James (Dev) |