# Story 1.1: Initialisation du Projet et Structure de Fichiers ## Status review ## Story **As a** développeur, **I want** initialiser la structure du projet avec les dossiers et fichiers de base, **so that** je dispose d'une organisation claire et maintenable dès le départ. ## Acceptance Criteria 1. La structure de dossiers est créée : `pages/`, `templates/`, `includes/`, `api/`, `assets/css/`, `assets/js/`, `assets/img/`, `assets/img/projects/`, `assets/fonts/`, `data/`, `logs/` 2. Un fichier `index.php` existe à la racine avec un contenu minimal ("Hello World") 3. Un fichier `.gitignore` est configuré (node_modules, vendor, .env, logs, output.css) 4. Le projet est initialisé avec Git et un premier commit est effectué 5. Les fichiers `.env.example` et `composer.json` sont créés ## Tasks / Subtasks - [x] **Task 1 : Créer la structure de dossiers** (AC: 1) - [x] Créer le dossier `pages/` pour les pages PHP - [x] Créer le dossier `templates/` pour les composants réutilisables - [x] Créer le dossier `includes/` pour router, functions, handlers - [x] Créer le dossier `api/` pour les endpoints (contact) - [x] Créer le dossier `assets/css/` pour les fichiers CSS - [x] Créer le dossier `assets/js/` pour les fichiers JavaScript - [x] Créer le dossier `assets/img/` et `assets/img/projects/` - [x] Créer le dossier `assets/fonts/` pour les polices - [x] Créer le dossier `data/` pour les fichiers JSON - [x] Créer le dossier `logs/` avec un fichier `.gitkeep` - [x] **Task 2 : Créer le fichier index.php** (AC: 2) - [x] Créer `index.php` à la racine - [x] Ajouter un contenu minimal HTML5 avec "Hello World" - [x] Inclure les meta tags viewport pour le responsive - [x] **Task 3 : Configurer .gitignore** (AC: 3) - [x] Créer le fichier `.gitignore` - [x] Ajouter les exclusions : `.env`, `vendor/`, `node_modules/`, `logs/*.log`, `assets/css/output.css` - [x] Ajouter les exclusions IDE : `.idea/`, `.vscode/`, `.DS_Store` - [x] **Task 4 : Créer les fichiers de configuration** (AC: 5) - [x] Créer `.env.example` avec les variables requises - [x] Créer `composer.json` avec la dépendance `vlucas/phpdotenv` - [x] **Task 5 : Initialiser Git** (AC: 4) - [x] Vérifier que le repo Git existe (déjà initialisé) - [x] Effectuer un commit initial avec message descriptif ## Dev Notes ### Structure de Fichiers Cible ``` /portfolio ├── index.php # Point d'entrée + router front controller ├── config.php # Charge .env et définit les constantes ├── composer.json # Dépendances PHP ├── .env # Variables sensibles (gitignore) ├── .env.example # Template sans valeurs sensibles │ ├── api/ │ └── contact.php # Endpoint formulaire de contact │ ├── pages/ │ ├── home.php # Page d'accueil │ ├── projects.php # Liste projets │ ├── project-single.php # Page projet individuelle │ ├── skills.php # Compétences │ ├── about.php # Me Découvrir │ ├── contact.php # Formulaire de contact │ └── 404.php # Page erreur 404 │ ├── templates/ │ ├── header.php # , meta tags, CSS │ ├── footer.php # Scripts JS, copyright │ ├── navbar.php # Navigation sticky + CTA │ └── ... # Autres composants │ ├── includes/ │ ├── router.php # Logique de routage │ ├── functions.php # Helpers PHP │ └── contact-handler.php # Traitement formulaire │ ├── data/ │ ├── projects.json # Données des projets │ └── testimonials.json # Témoignages │ ├── assets/ │ ├── css/ │ │ ├── input.css # Source Tailwind │ │ └── output.css # CSS compilé (généré) │ ├── js/ │ │ └── main.js # Scripts JS │ ├── img/ │ │ └── projects/ # Images des projets │ └── fonts/ # Polices (Inter, JetBrains Mono) │ ├── logs/ # Logs d'erreurs (gitignore) │ └── .gitkeep │ └── .gitignore ``` ### Contenu .env.example ```env # Application APP_ENV=development APP_DEBUG=true APP_URL=http://localhost:8000 # reCAPTCHA v3 RECAPTCHA_SITE_KEY=your_site_key_here RECAPTCHA_SECRET_KEY=your_secret_key_here # Contact Email CONTACT_EMAIL=contact@example.com # Sécurité APP_SECRET=your_random_secret_key_here ``` ### Contenu composer.json ```json { "name": "portfolio/website", "description": "Portfolio développeur web", "type": "project", "require": { "php": ">=8.0", "vlucas/phpdotenv": "^5.6" } } ``` ### Conventions de Nommage | Élément | Convention | Exemple | |---------|------------|---------| | Fichiers PHP pages | kebab-case | `project-single.php` | | Fichiers PHP templates | kebab-case | `project-card.php` | | Fichiers JS | kebab-case | `contact-form.js` | | Dossiers | kebab-case | `assets/img/projects/` | ## Testing ### Validation Manuelle - [ ] Tous les dossiers existent et sont accessibles - [ ] Le fichier `index.php` s'affiche dans le navigateur (Hello World) - [ ] Le `.gitignore` fonctionne (les fichiers exclus ne sont pas trackés) - [ ] `composer install` s'exécute sans erreur ### Commande de Test ```bash # Vérifier la structure ls -la ls -la pages/ templates/ includes/ api/ assets/ data/ logs/ # Tester le serveur PHP php -S localhost:8000 # Installer les dépendances composer install ``` ## Change Log | Date | Version | Description | Author | |------|---------|-------------|--------| | 2026-02-04 | 0.1 | Implementation story 1.1 | Amelia | | 2026-01-22 | 0.1 | Création initiale de la story | Sarah (PO) | ## Dev Agent Record ### Agent Model Used GPT-5 Codex ### Debug Log References - tests/structure.test.ps1: Assert-True boolean cast fix ### Completion Notes List - Structure de dossiers créée - index.php avec Hello World et meta viewport - .gitignore configuré (.env, vendor/, node_modules/, logs/*.log, assets/css/output.css, IDE) - composer.json avec dépendance vlucas/phpdotenv - .env.example avec toutes les variables requises - Tests: `powershell -ExecutionPolicy Bypass -File tests/run.ps1` - Commit initial effectué ### File List | Fichier | Action | |---------|--------| | `index.php` | Créé | | `.gitignore` | Créé | | `.env.example` | Créé | | `composer.json` | Créé | | `logs/.gitkeep` | Créé | | `tests/run.ps1` | Créé | | `tests/structure.test.ps1` | Créé | | `pages/` | Dossier créé | | `templates/` | Dossier créé | | `includes/` | Dossier créé | | `api/` | Dossier créé | | `assets/css/` | Dossier créé | | `assets/js/` | Dossier créé | | `assets/img/` | Dossier créé | | `assets/img/projects/` | Dossier créé | | `assets/fonts/` | Dossier créé | | `data/` | Dossier créé | | `logs/` | Dossier créé | ## QA Results _À compléter par le QA agent_