Story 1.1: initialisation projet
This commit is contained in:
225
docs/stories/1.1.initialisation-projet.md
Normal file
225
docs/stories/1.1.initialisation-projet.md
Normal file
@@ -0,0 +1,225 @@
|
||||
# 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_
|
||||
Reference in New Issue
Block a user