Files
Portfolio-Codex/docs/stories/1.1.initialisation-projet.md

226 lines
7.2 KiB
Markdown

# 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 # <head>, 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_