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

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

  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

  • 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/ et assets/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
  • 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
  • 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
  • Task 4 : Créer les fichiers de configuration (AC: 5)

    • Créer .env.example avec les variables requises
    • Créer composer.json avec la dépendance vlucas/phpdotenv
  • 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.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

# 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