7.2 KiB
7.2 KiB
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
- La structure de dossiers est créée :
pages/,templates/,includes/,api/,assets/css/,assets/js/,assets/img/,assets/img/projects/,assets/fonts/,data/,logs/ - Un fichier
index.phpexiste à la racine avec un contenu minimal ("Hello World") - Un fichier
.gitignoreest configuré (node_modules, vendor, .env, logs, output.css) - Le projet est initialisé avec Git et un premier commit est effectué
- Les fichiers
.env.exampleetcomposer.jsonsont créés
Tasks / Subtasks
-
Task 1 : Créer la structure de dossiers (AC: 1)
- Créer le dossier
pages/pour les pages PHP - Créer le dossier
templates/pour les composants réutilisables - Créer le dossier
includes/pour router, functions, handlers - Créer le dossier
api/pour les endpoints (contact) - Créer le dossier
assets/css/pour les fichiers CSS - Créer le dossier
assets/js/pour les fichiers JavaScript - Créer le dossier
assets/img/etassets/img/projects/ - Créer le dossier
assets/fonts/pour les polices - Créer le dossier
data/pour les fichiers JSON - Créer le dossier
logs/avec un fichier.gitkeep
- Créer le dossier
-
Task 2 : Créer le fichier index.php (AC: 2)
- Créer
index.phpà la racine - Ajouter un contenu minimal HTML5 avec "Hello World"
- Inclure les meta tags viewport pour le responsive
- Créer
-
Task 3 : Configurer .gitignore (AC: 3)
- Créer le fichier
.gitignore - Ajouter les exclusions :
.env,vendor/,node_modules/,logs/*.log,assets/css/output.css - Ajouter les exclusions IDE :
.idea/,.vscode/,.DS_Store
- Créer le fichier
-
Task 4 : Créer les fichiers de configuration (AC: 5)
- Créer
.env.exampleavec les variables requises - Créer
composer.jsonavec la dépendancevlucas/phpdotenv
- Créer
-
Task 5 : Initialiser Git (AC: 4)
- Vérifier que le repo Git existe (déjà initialisé)
- 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
# 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
{
"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.phps'affiche dans le navigateur (Hello World) - Le
.gitignorefonctionne (les fichiers exclus ne sont pas trackés) composer installs'exécute sans erreur
Commande de Test
# 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