Files
obc-terrassement/components/marketing/Testimonials.tsx
Claude 231667c2c6 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
2026-02-08 20:49:54 +00:00

92 lines
3.5 KiB
TypeScript

import Card from "@/components/ui/Card";
const testimonials = [
{
name: "Sarah M.",
role: "Étudiante, 22 ans",
content:
"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-salarié, 34 ans",
content:
"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: "Mère au foyer, 29 ans",
content:
"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",
},
];
export default function Testimonials() {
return (
<section id="temoignages" className="py-20 md:py-32">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
{/* 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">
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">transformé</span> leur vie
</h2>
<p className="text-white/60 text-lg">
Découvre les résultats de nos élèves après le programme.
</p>
</div>
{/* Cards */}
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
{testimonials.map((t, i) => (
<Card key={i} hover>
{/* Stars */}
<div className="flex gap-1 mb-4">
{[1, 2, 3, 4, 5].map((s) => (
<svg
key={s}
className="w-4 h-4 text-warning"
fill="currentColor"
viewBox="0 0 20 20"
>
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
))}
</div>
{/* Content */}
<p className="text-white/80 mb-6 leading-relaxed">
&ldquo;{t.content}&rdquo;
</p>
{/* Revenue badge */}
<div className="inline-flex items-center px-3 py-1.5 bg-success/10 border border-success/20 rounded-full text-success text-sm font-medium mb-6">
{t.revenue}
</div>
{/* Author */}
<div className="flex items-center gap-3 pt-4 border-t border-dark-border">
<div className="w-10 h-10 rounded-full gradient-bg flex items-center justify-center text-sm font-bold text-white">
{t.avatar}
</div>
<div>
<p className="text-white font-medium text-sm">{t.name}</p>
<p className="text-white/40 text-xs">{t.role}</p>
</div>
</div>
</Card>
))}
</div>
</div>
</section>
);
}