feat: fix accents, improve candidature API, add legal pages

- Fix all missing French accents across 16 files (é, è, ê, à, ô, ç)
- Improve candidature API error handling: check env vars, better messages
- Add Mentions légales page (/mentions-legales)
- Add CGV page (/cgv)
- Add Politique de confidentialité page (/confidentialite)
- Business info: Enguerrand Ozano, SIREN 994538932, TVA FR16994538932

https://claude.ai/code/session_01H2aRGDaKgarPvhay2HxN6Y
This commit is contained in:
Claude
2026-02-08 20:49:54 +00:00
parent dd6ec0816b
commit 231667c2c6
19 changed files with 475 additions and 124 deletions

View File

@@ -4,44 +4,44 @@ import { useState } from "react";
const faqs = [
{
question: "Ai-je besoin d'experience sur TikTok ?",
question: "Ai-je besoin d'expérience sur TikTok ?",
answer:
"Non, aucune experience n'est requise. Notre programme part de zero et t'accompagne etape par etape. Beaucoup de nos eleves n'avaient jamais poste de video avant de commencer.",
"Non, aucune expérience n'est requise. Notre programme part de zéro et t'accompagne étape par étape. Beaucoup de nos élèves n'avaient jamais posté de vidéo avant de commencer.",
},
{
question: "Combien de temps dois-je consacrer par jour ?",
answer:
"Nous recommandons un minimum de 2 heures par jour pour des resultats optimaux. Le programme est concu pour etre flexible et s'adapter a ton emploi du temps, que tu sois etudiant ou parent.",
"Nous recommandons un minimum de 2 heures par jour pour des résultats optimaux. Le programme est conçu pour être flexible et s'adapter à ton emploi du temps, que tu sois étudiant ou parent.",
},
{
question: "Quand vais-je voir mes premiers resultats ?",
question: "Quand vais-je voir mes premiers résultats ?",
answer:
"La plupart de nos eleves generent leurs premieres commissions dans les 2 a 4 premieres semaines. Les resultats varient selon ton implication et le temps consacre.",
"La plupart de nos élèves génèrent leurs premières commissions dans les 2 à 4 premières semaines. Les résultats varient selon ton implication et le temps consacré.",
},
{
question: "Dois-je investir de l'argent en plus du programme ?",
answer:
"Non. L'affiliation TikTok Shop ne necessite aucun stock ni investissement supplementaire. Tu gagnes des commissions sur les ventes generees par tes videos.",
"Non. L'affiliation TikTok Shop ne nécessite aucun stock ni investissement supplémentaire. Tu gagnes des commissions sur les ventes générées par tes vidéos.",
},
{
question: "Le programme est-il adapte a tous les ages ?",
question: "Le programme est-il adapté à tous les âges ?",
answer:
"Oui, nos eleves ont entre 18 et 55 ans. Le programme propose deux parcours adaptes : un pour les jeunes (18-25 ans) et un pour les parents/reconversion (25-45 ans).",
"Oui, nos élèves ont entre 18 et 55 ans. Le programme propose deux parcours adaptés : un pour les jeunes (18-25 ans) et un pour les parents/reconversion (25-45 ans).",
},
{
question: "Comment se deroule le coaching ?",
question: "Comment se déroule le coaching ?",
answer:
"Le coaching comprend des modules video hebdomadaires, des appels de groupe chaque semaine, un support WhatsApp illimite, et l'acces a une communaute privee d'entrepreneurs.",
"Le coaching comprend des modules vidéo hebdomadaires, des appels de groupe chaque semaine, un support WhatsApp illimité, et l'accès à une communauté privée d'entrepreneurs.",
},
{
question: "Puis-je payer en plusieurs fois ?",
answer:
"Oui, le paiement se fait en 2 mensualites de 490€. Le premier paiement donne acces immediat au programme, le second est preleve automatiquement le mois suivant.",
"Oui, le paiement se fait en 2 mensualités de 490€. Le premier paiement donne accès immédiat au programme, le second est prélevé automatiquement le mois suivant.",
},
{
question: "Y a-t-il une garantie de remboursement ?",
answer:
"Oui, nous offrons une garantie satisfait ou rembourse de 14 jours. Si le programme ne te convient pas, tu es rembourse integralement, sans condition.",
"Oui, nous offrons une garantie satisfait ou remboursé de 14 jours. Si le programme ne te convient pas, tu es remboursé intégralement, sans condition.",
},
];
@@ -57,7 +57,7 @@ export default function FAQ() {
FAQ
</span>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-[-0.02em] mb-4">
Questions <span className="gradient-text">frequentes</span>
Questions <span className="gradient-text">fréquentes</span>
</h2>
<p className="text-white/60 text-lg">
Tout ce que tu dois savoir avant de te lancer.

View File

@@ -32,7 +32,7 @@ export default function Footer() {
href="#methode"
className="text-white/40 hover:text-white text-sm transition-colors"
>
La methode
La méthode
</a>
</li>
<li>
@@ -40,7 +40,7 @@ export default function Footer() {
href="#temoignages"
className="text-white/40 hover:text-white text-sm transition-colors"
>
Temoignages
Témoignages
</a>
</li>
<li>
@@ -63,14 +63,14 @@ export default function Footer() {
</div>
<div>
<h4 className="text-white font-semibold text-sm mb-4">Legal</h4>
<h4 className="text-white font-semibold text-sm mb-4">Légal</h4>
<ul className="space-y-2.5">
<li>
<Link
href="/mentions-legales"
className="text-white/40 hover:text-white text-sm transition-colors"
>
Mentions legales
Mentions légales
</Link>
</li>
<li>
@@ -86,7 +86,7 @@ export default function Footer() {
href="/confidentialite"
className="text-white/40 hover:text-white text-sm transition-colors"
>
Confidentialite
Confidentialité
</Link>
</li>
</ul>
@@ -96,7 +96,7 @@ export default function Footer() {
{/* Bottom */}
<div className="border-t border-dark-border mt-12 pt-8 flex flex-col md:flex-row items-center justify-between gap-4">
<p className="text-white/30 text-sm">
&copy; {new Date().getFullYear()} HookLab. Tous droits reserves.
&copy; {new Date().getFullYear()} HookLab. Tous droits réservés.
</p>
<div className="flex items-center gap-4">
<a

View File

@@ -15,7 +15,7 @@ export default function Hero() {
<div className="flex flex-wrap justify-center gap-3 mb-8">
<span className="inline-flex items-center gap-1.5 px-3 py-1.5 bg-primary/10 border border-primary/20 rounded-full text-primary text-xs font-medium">
<span className="w-1.5 h-1.5 bg-success rounded-full animate-pulse" />
Places limitees - Promo en cours
Places limitées - Promo en cours
</span>
<span className="inline-flex items-center gap-1.5 px-3 py-1.5 bg-dark-light border border-dark-border rounded-full text-white/60 text-xs font-medium">
Programme 8 semaines
@@ -30,8 +30,8 @@ export default function Hero() {
{/* Sous-titre */}
<p className="text-lg md:text-xl text-white/60 max-w-2xl mx-auto mb-10 leading-relaxed">
Le programme de coaching complet pour devenir createur affilie
TikTok Shop et generer tes premiers revenus en ligne.
Le programme de coaching complet pour devenir créateur affilié
TikTok Shop et générer tes premiers revenus en ligne.
</p>
{/* CTAs */}
@@ -43,7 +43,7 @@ export default function Hero() {
</Link>
<a href="#methode">
<Button variant="secondary" size="lg">
Decouvrir la methode
Découvrir la méthode
</Button>
</a>
</div>
@@ -63,8 +63,8 @@ export default function Hero() {
))}
</div>
<span className="text-sm text-white/60">
<span className="text-white font-semibold">+120</span> eleves
formes
<span className="text-white font-semibold">+120</span> éves
formés
</span>
</div>
<div className="flex items-center gap-1.5">

View File

@@ -5,7 +5,7 @@ const steps = [
number: "01",
title: "Apprends les bases",
description:
"Maitrise les fondamentaux de TikTok Shop, l'algorithme, et les techniques de creation de contenu qui convertissent.",
"Maîtrise les fondamentaux de TikTok Shop, l'algorithme, et les techniques de création de contenu qui convertissent.",
icon: (
<svg
className="w-6 h-6"
@@ -25,9 +25,9 @@ const steps = [
},
{
number: "02",
title: "Lance ton activite",
title: "Lance ton activité",
description:
"Configure ton shop, selectionne tes produits gagnants, et publie tes premieres videos avec notre methode eprouvee.",
"Configure ton shop, sélectionne tes produits gagnants, et publie tes premières vidéos avec notre méthode éprouvée.",
icon: (
<svg
className="w-6 h-6"
@@ -49,7 +49,7 @@ const steps = [
number: "03",
title: "Scale tes revenus",
description:
"Optimise tes performances, automatise tes process, et developpe une strategie de contenu rentable sur le long terme.",
"Optimise tes performances, automatise tes process, et développe une stratégie de contenu rentable sur le long terme.",
icon: (
<svg
className="w-6 h-6"
@@ -76,15 +76,15 @@ export default function Method() {
{/* Header */}
<div className="text-center max-w-2xl mx-auto mb-16">
<span className="inline-block px-3 py-1.5 bg-primary/10 border border-primary/20 rounded-full text-primary text-xs font-medium mb-4">
La methode
La méthode
</span>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-[-0.02em] mb-4">
3 etapes vers tes{" "}
3 étapes vers tes{" "}
<span className="gradient-text">premiers revenus</span>
</h2>
<p className="text-white/60 text-lg">
Un programme structure semaine par semaine pour te guider vers la
rentabilite.
Un programme structuré semaine par semaine pour te guider vers la
rentabilité.
</p>
</div>

View File

@@ -4,15 +4,15 @@ const personas = [
{
id: "jeune",
emoji: "🎓",
title: "Etudiant / Jeune actif",
title: "Étudiant / Jeune actif",
subtitle: "18-25 ans",
description:
"Tu veux generer tes premiers revenus en ligne tout en etudiant ou en debut de carriere. TikTok Shop est le levier parfait.",
"Tu veux générer tes premiers revenus en ligne tout en étudiant ou en début de carrière. TikTok Shop est le levier parfait.",
benefits: [
"Flexibilite totale, travaille quand tu veux",
"Flexibilité totale, travaille quand tu veux",
"Pas besoin de stock ni d'investissement",
"Competences marketing valorisables sur ton CV",
"Communaute de jeunes entrepreneurs motives",
"Compétences marketing valorisables sur ton CV",
"Communauté de jeunes entrepreneurs motivés",
],
},
{
@@ -21,12 +21,12 @@ const personas = [
title: "Parent / Reconversion",
subtitle: "25-45 ans",
description:
"Tu cherches un complement de revenus ou une reconversion flexible depuis chez toi. TikTok Shop s'adapte a ton emploi du temps.",
"Tu cherches un complément de revenus ou une reconversion flexible depuis chez toi. TikTok Shop s'adapte à ton emploi du temps.",
benefits: [
"2h par jour suffisent pour demarrer",
"Travaille depuis chez toi, a ton rythme",
"Revenus complementaires des le premier mois",
"Accompagnement personnalise et bienveillant",
"2h par jour suffisent pour démarrer",
"Travaille depuis chez toi, à ton rythme",
"Revenus complémentaires dès le premier mois",
"Accompagnement personnalisé et bienveillant",
],
},
];
@@ -41,11 +41,11 @@ export default function PersonaCards() {
Pour qui ?
</span>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-[-0.02em] mb-4">
Un programme adapte a{" "}
Un programme adapté à{" "}
<span className="gradient-text">ton profil</span>
</h2>
<p className="text-white/60 text-lg">
Que tu sois etudiant ou parent, notre methode s&apos;adapte a toi.
Que tu sois étudiant ou parent, notre méthode s&apos;adapte à toi.
</p>
</div>

View File

@@ -4,12 +4,12 @@ import Card from "@/components/ui/Card";
const features = [
"8 semaines de coaching intensif",
"Acces a tous les modules video",
"Accès à tous les modules vidéo",
"Templates et scripts de contenu",
"Appels de groupe hebdomadaires",
"Support WhatsApp illimite",
"Communaute privee d'entrepreneurs",
"Mises a jour a vie du contenu",
"Support WhatsApp illimité",
"Communauté privée d'entrepreneurs",
"Mises à jour à vie du contenu",
"Certification HookLab",
];
@@ -37,7 +37,7 @@ export default function Pricing() {
{/* Popular badge */}
<div className="absolute top-0 left-0 right-0 gradient-bg py-2 text-center">
<span className="text-white text-sm font-semibold">
Offre de lancement - Places limitees
Offre de lancement - Places limitées
</span>
</div>
@@ -51,7 +51,7 @@ export default function Pricing() {
<span className="text-white/40 text-lg">/mois</span>
</div>
<p className="text-white/40 mt-2">
x2 mois (980 total) - Paiement securise via Stripe
x2 mois (980 total) - Paiement sécurisé via Stripe
</p>
</div>
@@ -91,9 +91,9 @@ export default function Pricing() {
{/* Disclaimer */}
<p className="text-center text-white/30 text-xs mt-4">
Candidature soumise a validation. Reponse sous 24h.
Candidature soumise à validation. Réponse sous 24h.
<br />
Satisfait ou rembourse pendant 14 jours.
Satisfait ou remboursé pendant 14 jours.
</p>
</div>
</Card>

View File

@@ -3,25 +3,25 @@ import Card from "@/components/ui/Card";
const testimonials = [
{
name: "Sarah M.",
role: "Etudiante, 22 ans",
role: "Étudiante, 22 ans",
content:
"En 4 semaines, j'ai genere mes premiers 800€ sur TikTok Shop. Le programme m'a donne une methode claire et un accompagnement top.",
"En 4 semaines, j'ai généré mes premiers 800€ sur TikTok Shop. Le programme m'a donné une méthode claire et un accompagnement top.",
revenue: "2 400€/mois",
avatar: "S",
},
{
name: "Thomas D.",
role: "Ex-salarie, 34 ans",
role: "Ex-salarié, 34 ans",
content:
"J'hesitais a me lancer, mais le coaching m'a permis de structurer mon activite. Aujourd'hui je vis de TikTok Shop a plein temps.",
"J'hésitais à me lancer, mais le coaching m'a permis de structurer mon activité. Aujourd'hui je vis de TikTok Shop à plein temps.",
revenue: "4 200€/mois",
avatar: "T",
},
{
name: "Amina K.",
role: "Mere au foyer, 29 ans",
role: "Mère au foyer, 29 ans",
content:
"Je cherchais un complement de revenus flexible. Grace a HookLab, je gagne un SMIC supplementaire en travaillant 2h par jour.",
"Je cherchais un complément de revenus flexible. Grâce à HookLab, je gagne un SMIC supplémentaire en travaillant 2h par jour.",
revenue: "1 600€/mois",
avatar: "A",
},
@@ -34,13 +34,13 @@ export default function Testimonials() {
{/* Header */}
<div className="text-center max-w-2xl mx-auto mb-16">
<span className="inline-block px-3 py-1.5 bg-primary/10 border border-primary/20 rounded-full text-primary text-xs font-medium mb-4">
Temoignages
Témoignages
</span>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-[-0.02em] mb-4">
Ils ont <span className="gradient-text">transforme</span> leur vie
Ils ont <span className="gradient-text">transformé</span> leur vie
</h2>
<p className="text-white/60 text-lg">
Decouvre les resultats de nos eleves apres le programme.
Découvre les résultats de nos éves après le programme.
</p>
</div>