+ Architecture + du Projet +
+Technologies utilisées
-- Volontairement simple et vanilla pour comprendre les fondamentaux -
+Client
+Navigateur Web
+HTML5
-- Sémantique & accessible -
--
-
- - • - Structure sémantique (header, main, section) - -
- - • - Meta tags pour SEO - -
- - • - Attributs ARIA pour accessibilité - -
Frontend
+Nginx Container
- CSS3 + Tailwind -
-- Design moderne -
--
-
- - • - Tailwind CSS (via CDN) - -
- - • - CSS custom pour animations - -
- - • - Variables CSS pour thème - -
- - • - Flexbox & Grid pour layout - -
JavaScript
-- Vanilla ES6+ -
--
-
- - • - ES6 modules pour structure - -
- - • - Intersection Observer pour animations - -
- - • - Event listeners pour interactions - -
- - • - Formulaire de contact avec API - -
Backend
+Go API Container
Go Backend
-- API REST + Services -
--
-
- - • - Framework Gin (HTTP router) - -
- - • - Architecture modulaire (services, repo) - -
- - • - Tests unitaires & intégration (85%+) - -
- - • - SMTP service pour emails - -
PostgreSQL
-- Base de données -
--
-
- - • - Schema SQL avec migrations - -
- - • - Table contacts avec timestamps - -
- - • - Connection pool (pgxpool) - -
- - • - Healthcheck automatique - -
Database
+Postgres Container
++ Ce que + + j'ai Implémenté +
+Docker
-- Containerisation -
--
-
- - • - Docker Compose 3 services - -
- - • - Frontend (Nginx), Backend, DB - -
- - • - Volumes persistants pour Postgres - -
- - • - Configuration .env dynamique - -
+ Design System Complet +
+-
+
- + + 10 modules CSS organisés (variables, base, animations, cards, + buttons...) + +
- + + Glassmorphism effect avec backdrop-filter + +
- + + Background Three.js avec particules interactives + +
- + + Smooth scroll avec Lenis + +
-
- Architecture du projet
-
+
+
+
+
+
+
+ Formulaire de Contact
+
+ -
+
+ API REST complète avec validation des données
+
+ -
+
+ Service SMTP pour envoi d'emails automatique
+
+ -
+
+ Stockage PostgreSQL des messages
+
+ -
+
+ Rate limiting et protection CORS
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+ Design Responsive
+
+
+ -
+
+ Mobile-first approach avec breakpoints adaptatifs
+
+ -
+
+ Optimisations Three.js pour mobile (particules
+ réduites)
+
+ -
+
+ Navigation mobile avec hamburger menu
+
+ -
+
+ Performance optimisée sur tous devices
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
- Utilisateur
-
-
- Navigateur Web • HTTPS
-
-
-
-
-
-
-
- Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Frontend Layer
-
-
- Interface utilisateur • Nginx :80
-
-
-
-
- Static Files
-
-
-
-
-
-
-
-
-
-
- HTML5
-
-
- • 6 pages
- • Sémantique
- • SEO optimisé
-
-
-
-
-
-
-
-
- CSS3
-
-
- • ~1000 lignes
- • 10 modules
- • Tailwind CSS
-
-
-
-
-
-
-
-
- JavaScript
-
-
- • ~800 lignes
- • ES6+ modules
- • Fetch API
-
-
-
-
-
-
-
-
-
- POST /api/v1/contact
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Backend Layer
-
-
- API REST • Go + Gin :8080
-
-
-
-
- ~1500 LOC
-
-
-
-
-
-
-
-
- H
-
-
-
- Handlers
-
-
- Routes Gin • Validation des payloads • Middleware
- CORS
-
-
-
-
-
-
- S
-
-
-
- Services
-
-
- Business logic • Service SMTP • Error handling
-
-
-
-
-
-
- R
-
-
-
- Repository
-
-
- Data access layer • pgxpool • Prepared statements
-
-
-
-
-
-
-
-
-
-
- SQL Queries
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Database Layer
-
-
- PostgreSQL :5432 • Persistence
-
-
-
-
- Latest
-
-
-
-
-
-
-
-
-
- Schema
-
-
-
- Table contacts
- Constraints
- Indexes
-
-
-
-
-
-
-
- Migrations
-
-
-
- Init scripts
- Auto-migration
- Versioning
-
-
-
-
-
-
-
- Volume
-
-
-
- Docker volume
- Persistence
- Backup ready
-
-
-
-
-
-
-
-
-
-
- ~3500
-
-
- Lignes de code
-
-
- Frontend + Backend
-
-
-
-
- 3
-
- Containers Docker
-
-
- Nginx • Go • PostgreSQL
-
-
-
-
-
- 85.9%
-
-
- Tests coverage
-
- Backend Go
-
-
-
-
-
-
-
-
-
-
-
- Docker Compose
-
-
- Orchestration des 3 services
-
-
-
- Networks
- ✓
-
-
- Volumes
- ✓
-
-
- Healthchecks
- ✓
-
-
-
-
-
-
-
-
-
-
- CI/CD Pipeline
-
-
- Tests & Quality Assurance
-
-
-
- Backend Tests
- ✓
-
-
- E2E Playwright
- ✓
-
-
- Linting
- ✓ ESLint + Go
-
-
-
-
-
-
-
-
-
-
- Documentation
-
-
- ~15 fichiers Markdown
-
-
-
- Backend
- 5 MD
-
-
- Frontend
- 3 MD
-
-
- Config
- 7 MD
-
-
-
-
-
-
-
+ Formulaire de Contact
+-
+
- + + API REST complète avec validation des données + +
- + + Service SMTP pour envoi d'emails automatique + +
- + + Stockage PostgreSQL des messages + +
- + + Rate limiting et protection CORS + +
+ Design Responsive +
+-
+
- + + Mobile-first approach avec breakpoints adaptatifs + +
- + + Optimisations Three.js pour mobile (particules + réduites) + +
- + + Navigation mobile avec hamburger menu + +
- + + Performance optimisée sur tous devices + +
- Utilisateur -
-- Navigateur Web • HTTPS -
-- Frontend Layer -
-- Interface utilisateur • Nginx :80 -
-- Backend Layer -
-- API REST • Go + Gin :8080 -
-- Database Layer -
-- PostgreSQL :5432 • Persistence -
-- Docker Compose -
-- Orchestration des 3 services -
-- CI/CD Pipeline -
-- Tests & Quality Assurance -
-- Documentation -
-- ~15 fichiers Markdown -
-- Comment j'ai construit ce site -
++ Déploiement Docker +
+-
+
- + + 3 containers orchestrés (frontend, backend, database) + +
- + + Docker Compose pour environnement complet + +
- + + Variables d'environnement sécurisées + +
- + + Healthchecks automatiques + +
Design & Structure
-- J'ai commencé par définir la structure des pages et le design - system. Inspiration Apple pour la nav, glassmorphism pour les - cartes, palette de couleurs cohérente (bleu/violet). -
-- Durée : 2-3 heures -
-- Décisions clés : Mobile-first, dark mode - uniquement, navigation minimaliste -
-HTML & CSS de base
-- Création des pages HTML avec structure sémantique. Intégration - de Tailwind pour le layout rapide, puis ajout de CSS custom - pour les animations et effets spéciaux. -
-- Durée : 4-5 heures -
-- Difficultés : Responsive design, - compatibilité backdrop-filter Safari -
-- JavaScript & Interactivité -
-- Développement du JS modulaire : menu burger, animations au - scroll, filtrage des projets. J'ai créé une version standalone - pour compatibilité file:// et une version ES6 modules pour - production. -
-- Durée : 5-6 heures -
-- Défis : Intersection Observer, gestion du - menu mobile, dual architecture JS -
-Backend Go & API REST
-- Création d'un backend en Go avec le framework Gin. API REST - pour le formulaire de contact, connexion PostgreSQL avec - pgxpool, service SMTP pour l'envoi d'emails. Architecture - modulaire avec services, repository et models. -
-- Durée : 8-10 heures -
-- Défis : Configuration CORS, tests avec - pgxmock, gestion des erreurs SMTP -
-Base de données & Docker
-- Configuration PostgreSQL avec schema SQL, scripts - d'initialisation automatique. Docker Compose pour orchestrer - les 3 services (frontend Nginx, backend Go, database Postgres) - avec volumes persistants et healthchecks. -
-- Durée : 6-8 heures -
-- Défis : Configuration .env dynamique, - permissions DB, orchestration des dépendances -
-Tests & CI/CD
-- Tests unitaires (Jest) et E2E (Playwright) pour le frontend. - Tests unitaires et d'intégration pour le backend Go (85.9% - coverage). GitHub Actions pour CI/CD automatique : lint, - tests, build à chaque push. -
-- Durée : 4-5 heures -
-- Défis : Tests d'intégration avec DB réelle, - configuration GitHub Actions multi-jobs -
-- Défis techniques & solutions -
-- Les vrais problèmes que j'ai dû résoudre -
- Menu burger mobile qui ne se fermait pas -
-- Le menu burger s'ouvrait mais ne se fermait pas au clic sur - un lien. Problème : les event listeners n'étaient pas - correctement attachés aux liens dynamiques. -
-- Animations au scroll trop lourdes -
-- J'utilisais un event listener sur scroll qui vérifiait la - position de chaque élément à chaque frame. Performance - catastrophique sur mobile (drops à 30 FPS). -
-- ES6 modules bloqués en file:// -
-- Les imports ES6 sont bloqués par CORS quand on ouvre le HTML - directement (protocole file://). Impossible de tester - localement sans serveur. -
-- Configuration CORS entre frontend et backend -
-- Le formulaire de contact ne pouvait pas envoyer de requêtes - au backend à cause des politiques CORS. Le navigateur - bloquait les requêtes cross-origin avec l'erreur "blocked by - CORS policy". -
-- Tests unitaires du backend avec mocks de la DB -
-- Difficulté à tester le repository sans dépendance à une - vraie base de données. Il fallait mocker pgxpool pour tester - la logique d'insertion sans toucher à Postgres. -
-- Orchestration Docker Compose avec dépendances -
-- Le backend démarrait avant que la DB soit prête, causant des - erreurs de connexion. Il fallait attendre que Postgres soit - complètement initialisé avant de lancer l'API. -
-Ce que j'ai appris
-- Compétences concrètes développées durant ce projet -
+- Frontend -
-- Web Development -
-- Backend -
-Go & API REST
-- Database -
-PostgreSQL
-- DevOps -
-- Docker & Compose -
-- Testing -
-Unit & E2E
-+ Challenges + + Techniques +
++ Problème : CORS & Sécurité +
++ Le navigateur bloquait les requêtes API car le frontend (port + 80) et le backend (port 8080) n'étaient pas sur la même origine. +
++ Solution : Middleware Custom +
++ Configuration explicite des headers CORS dans Gin pour autoriser + les méthodes OPTIONS et POST. +
++ Problème : Connexions Perdues +
++ Les connexions à la base de données PostgreSQL se fermaient + après une période d'inactivité, causant des erreurs 500. +
++ Solution : Connection Pooling +
+
+ Implémentation de pgxpool avec configuration de
+ keep-alive et reconnexion automatique.
+
+ Problème : Performance Mobile +
++ Le background Three.js consommait trop de ressources GPU sur les + téléphones, drainant la batterie. +
++ Solution : Rendu Adaptatif +
++ Détection du User Agent pour réduire le nombre de particules + (150 -> 50) sur mobile. +
- Performance -
-- Optimization -
-Métriques du site
-- Chiffres réels mesurés avec Lighthouse et DevTools Chrome -
+ Ce que + + j'ai Appris +
+Frontend Moderne
+-
+
- + + Architecture CSS modulaire avec design tokens + +
- + + Glassmorphism et effets visuels avancés + +
- + + JavaScript ES6+ modules et Fetch API + +
- + + Animations GSAP et ScrollTrigger + +
Backend Go
+-
+
- + + Architecture MVC avec separation of concerns + +
- + + API REST avec validation et error handling + +
- + + Tests unitaires et d'intégration (85%+ coverage) + +
- + + Service SMTP pour envoi d'emails + +
Base de Données
+-
+
- + + Design de schéma SQL relationnel + +
- + + Migrations automatiques et versioning + +
- + + Connection pooling avec pgxpool + +
- + + Prepared statements pour sécurité + +
+ DevOps & Deployment +
+-
+
- + + Containerisation multi-services avec Docker + +
- + + Orchestration avec Docker Compose + +
- + + Gestion des variables d'environnement + +
- + + Healthchecks et monitoring basique + +
+ Structure + + du Projet +
+Frontend
-Backend
-Hosting
-Docs
-- - Améliorations futures -
-Frontend
--
-
- • Passer à un bundler (Vite) pour optimiser le JS -
- • Ajouter du TypeScript pour la robustesse -
- • Implémenter PWA (service worker, offline) -
- • Self-host Inter font (éliminer Google Fonts) -
- • Mode clair/sombre avec toggle -
- • Internationalisation (FR/EN) -
- Backend & Infrastructure -
--
-
- • Ajouter des endpoints supplémentaires (blog API) -
- • Authentification JWT pour admin panel -
- • Rate limiting sur l'API -
- • Monitoring avec Prometheus + Grafana -
- • CI/CD avec auto-deploy sur push main -
- • Backup automatique de la DB -
Fonctionnalités
--
-
- • Section blog/articles avec CMS headless -
- • Dashboard admin pour gérer les contacts -
- • Système de notifications en temps réel -
- • Analytics avancées (heatmaps, funnels) -
- • Formulaire multi-étapes avec validation -
- • Upload de fichiers (CV, portfolio) -
Tests & Qualité
--
-
- • Augmenter le coverage backend à 95%+ -
- • Tests de charge avec k6 ou Apache Bench -
- • Tests de sécurité automatisés (OWASP) -
- • Tests de régression visuelle (Percy.io) -
- • Pre-commit hooks avec husky -
- • Semantic versioning automatique -