Dev local, Git, Cloudflare Pages, Formspree, Brevo, Analytics, Search Console. Tout ce qu'il faut pour mettre le site en production et le maintenir opérationnel.
Cloudflare PagesGitHubFormspree · Brevo
01
Développement local
⚠
Ne JAMAIS ouvrir les fichiers HTML directement avec file://. Le fetch des fichiers i18n JSON est bloqué par la politique Same-Origin du navigateur. Toujours utiliser un serveur HTTP local.
Option A — Python
cd truvector-v3/
python -m http.server 8080
# → http://localhost:8080
Aucune installation. Python 3 requis (pré-installé sur macOS/Linux).
Option B — Node.js serve
npx serve .
# → http://localhost:3000
Node.js requis. Téléchargement unique de serve via npx.
Option C — VS Code
Extension Live Server (ritwickdey.liveserver). Clic droit sur index.html → Open with Live Server. Rechargement automatique à chaque sauvegarde.
# Vérifier les changements
git status
git diff
# Committer et déployer
git add .
git commit -m "feat: description courte"
git push origin main
# → Cloudflare Pages déploie automatiquement
Convention commits
Préfixe
Usage
Exemple
feat:
Nouvelle fonctionnalité
feat: ajout article blog fingerprint
fix:
Correction de bug
fix: navbar invisible thème light
content:
Mise à jour contenu
content: mise à jour changelog v2.1
style:
CSS/design uniquement
style: amélioration contraste light
config:
Configuration
config: ajout endpoint Formspree
docs:
Documentation
docs: mise à jour README
Branches recommandées
main ← Production (déploiement auto)
dev ← Développement en cours
feature/xxx ← Fonctionnalité spécifique# Travailler sur une feature
git checkout -b feature/blog-article-fingerprint
# ... développement ...
git checkout main
git merge feature/blog-article-fingerprint
git push
.gitignore recommandé
# Système
.DS_Store
Thumbs.db
*.log
# IDE
.vscode/
.idea/
# Node (si utilisé pour tests)
node_modules/
Ne pas utiliser X-Frame-Options: DENY — cela bloque truvector-promo.html chargée en iframe sur la page d'accueil. SAMEORIGIN permet les iframes du même domaine uniquement.
À propos du cache des assets
max-age=31536000, immutable (1 an) signifie que le navigateur ne rechargera jamais les assets une fois en cache. C'est optimal pour la performance, mais si tu modifies truvector.css sans changer son nom, les utilisateurs qui ont l'ancienne version en cache ne verront pas les changements pendant 1 an.
Solution : Pour une mise à jour critique du CSS ou JS, renommer le fichier (ex: truvector-v3.1.css) et mettre à jour toutes les références HTML.
Cloudflare Pages supporte jusqu'à 100 redirections dans _redirects. Pour des cas plus complexes (regex, headers conditionnels), utiliser un Cloudflare Worker.
07
Formspree — Formulaires de contact
1
Créer un compte Formspree
formspree.io → Sign up. Plan gratuit : 50 soumissions/mois.
2
Créer un formulaire
Dashboard → New Form → Nommer "TRUvector Contact" → Copier l'endpoint : https://formspree.io/f/XXXXXXXX
3
Configurer contact.html
<!-- contact.html, ligne ~50 -->
<form id="contact-form"
action="https://formspree.io/f/XXXXXXXX"
method="POST">
4
Configurer pricing.html
<!-- pricing.html, ligne ~60 -->
<form id="pricing-form"
action="https://formspree.io/f/XXXXXXXX"
method="POST">
<!-- Peut être le même endpoint ou un endpoint dédié -->
5
Configurer les notifications email
Dans Formspree Dashboard → Form Settings → Notifications → Email to : contact@truvector.dev. Configurer aussi le sujet et le spam filter.
6
Tester le formulaire
Soumettre un message de test. Vérifier la réception email. Vérifier l'affichage du message de confirmation vert dans la page.
ℹ
Le champ honeypot <input name="_gotcha" style="display:none"> est présent dans les deux formulaires. Formspree l'utilise pour filtrer les bots automatiquement.
08
Brevo — Newsletter
1
Créer un compte Brevo
brevo.com → Plan gratuit : 300 emails/jour, contacts illimités.
2
Récupérer la clé API et l'ID de liste
Settings → API Keys → Copier la clé. Contacts → Lists → Créer une liste "TRUvector Newsletter" → Copier l'ID (ex: 5).
3
Modifier main.js — handler newsletter
// Dans assets/js/main.js// Remplacer le handler newsletter par :
document.addEventListener('submit', async e => {
const form = e.target;
if (!form.id?.includes('newsletter')) return;
e.preventDefault();
const email = form.querySelector('input[type=email]')?.value;
if (!email) return;
try {
const resp = await fetch('https://api.brevo.com/v3/contacts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'api-key': 'VOTRE_CLE_API_BREVO'
},
body: JSON.stringify({
email: email,
listIds: [5], ← Remplacer par votre LIST_ID
updateEnabled: true
})
});
if (resp.ok || resp.status === 204) {
// Afficher le message de succès
}
} catch (err) {
console.error(err);
}
form.reset();
});
⚠
Sécurité : Ne jamais committer la clé API Brevo dans Git. Utiliser une variable d'environnement Cloudflare Pages ou une solution de proxy Worker. La clé API Brevo en dur dans le JS frontend est accessible à tous.
09
Configuration des téléchargements
Option A — GitHub Releases (recommandé)
# URL format GitHub Releases :
https://github.com/clode666/[repo]/releases/
download/v2.0/ironlock-v2.0-windows-x64.zip
# Avantages :# - Gratuit et illimité# - Historique versions automatique# - SHA-256 vérifiable via GitHub UI# - Téléchargements comptabilisés
Option B — Cloudflare R2
# URL format R2 public bucket :
https://pub-XXXX.r2.dev/
ironlock-v2.0-windows-x64.zip
# Avantages :# - Bandwidth gratuit (egress = 0€)# - Signed URLs pour accès payant futur# - Même infra que Cloudflare Pages
10
Analytics & Monitoring
Cloudflare Web Analytics
Activé automatiquement par Cloudflare Pages. Accès depuis le dashboard.