226 lines
7.2 KiB
Markdown
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_
|