Le problème
One Mind Agency est une agence de création qui avait besoin d’un site bilingue, en anglais et en italien, pour montrer ses réalisations et gagner de nouveaux clients. L’équipe voulait publier ses études de cas depuis une administration familière, et chaque demande devait arriver dans un pipeline commercial, pas dans une boîte mail. L’hébergement était mutualisé : Node pouvait exécuter des builds, mais pas un serveur permanent.
Ce que j’ai construit
J’ai construit trois briques qui cohabitent sur un même domaine.
- Front-end statique en Next.js — pages d’accueil, réalisations, étude de cas, à propos et contact, exportées en simples fichiers sous /en/ et /it/. Rapide à servir, rien à maintenir en marche.
- WordPress headless sous /cms — une extension sur mesure déclare le type de contenu Case Study et ses champs (client, année, catégorie, couleur d’accent, résumé, crédits) et les expose, avec leurs traductions, via l’API REST. Les pages WordPress publiques redirigent vers le vrai site.
- Reconstructions automatiques — quand un rédacteur enregistre un contenu, WordPress lève un indicateur. Une tâche serveur le détecte en 5 minutes environ, reconstruit le site et remplace les fichiers, avec un verrou pour que deux builds ne se chevauchent jamais.
- Du formulaire de contact au CRM — une petite passerelle PHP transforme chaque demande en Lead dans EspoCRM, avec la fourchette de budget et la langue. La clé du CRM reste sur le serveur et n’atteint jamais le navigateur.
- Protection contre le spam et les abus — un champ piège caché (honeypot), une requête toutes les 30 secondes par adresse IP, une liste d’origines autorisées et une validation stricte de chaque champ.
- Aucune image cassée — si une étude de cas pointe vers un fichier image qui n’existe plus, l’API ne renvoie rien et la page affiche à la place un aplat de couleur.
Comment c’est construit
Next.js 15 en export statique, React 19, Tailwind CSS, Framer Motion et Lenis. WordPress avec ACF et Polylang. EspoCRM. PHP 8.2 et MariaDB 10.11 chez Hetzner.
Pourquoi ce choix
Le serveur n’autorise Node que pour les builds, sans processus permanents. Le site est donc généré au moment du build et servi en fichiers statiques, tandis que WordPress et le CRM tournent sur le PHP dont le serveur disposait déjà. Les rédacteurs gardent une administration classique, et les visiteurs reçoivent du HTML simple.


