✉️ Feature: Epic 5 - Formulaire de Contact (Stories 5.1-5.7)

- Formulaire HTML5 avec validation (nom, prénom, email, entreprise, catégorie, objet, message)
- Validation JavaScript côté client (FormValidator)
- Persistance localStorage des données (AppState)
- Intégration reCAPTCHA v3 avec dégradation gracieuse
- Traitement PHP sécurisé (CSRF, validation, envoi email)
- Feedback utilisateur AJAX (succès/erreur)
- Liens contact secondaires (LinkedIn, GitHub, Email protégé)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-24 01:43:13 +01:00
parent 08402e3ed2
commit 9180f116ec
25 changed files with 1293 additions and 22 deletions

View File

@@ -2,17 +2,17 @@
"projects": [
{
"id": 1,
"title": "Site E-commerce XYZ",
"slug": "ecommerce-xyz",
"title": "Aéroclub de Saint-Dié-des-Vosges - Site association d'aéronotique",
"slug": "acsaintdie",
"category": "vedette",
"thumbnail": "ecommerce-xyz-thumb.webp",
"url": "https://example.com",
"github": "https://github.com/user/project",
"technologies": ["PHP", "JavaScript", "Tailwind CSS", "MySQL"],
"context": "Client souhaitant moderniser sa boutique en ligne pour améliorer l'expérience utilisateur et augmenter les conversions.",
"solution": "Développement d'une solution e-commerce sur mesure avec panier persistant, paiement sécurisé Stripe, et interface d'administration.",
"thumbnail": "acsaintdie-thumb.webp",
"url": "https://acsaintdie.fr",
"github": "",
"technologies": ["PHP", "JavaScript", "MySQL", "Wordpress"],
"context": "Dans le cadre de mon alternance chez kiwi-studio, un client a souhaité une refonte complète de son site internet. Le tout en ayant la possibilité d'ajouter du contenu facilement, pour ce faire, il a choisi Wordpress.",
"solution": "Développement d'un thème personnalisé pour Wordpress, intégrant différents plugin custom pour la gestion de la galerie ou des différents type de post.",
"teamwork": "Projet réalisé en collaboration avec un designer UI/UX. J'ai pris en charge l'intégration et le développement backend.",
"duration": "3 mois",
"duration": "5 mois",
"screenshots": [
"ecommerce-xyz-screen-1.webp",
"ecommerce-xyz-screen-2.webp",