workshopclaudecode/src/components/Hero.jsx

139 lines
7 KiB
React
Raw Normal View History

/**
* Hero.jsx - De eerste sectie die bezoekers zien
*
* Bevat de hoofdboodschap, subheadline, intro tekst en primaire CTA.
* Gebruikt coral accent kleuren en een decoratieve blob op de achtergrond.
*/
function Hero() {
// Aantal beschikbare plaatsen - later dynamisch te maken
const availableSpots = 7;
return (
<section className="section relative overflow-hidden">
{/* Decoratieve blob op achtergrond */}
<div
className="absolute -top-40 -right-40 w-96 h-96 bg-coral-100 rounded-full blur-3xl opacity-60"
aria-hidden="true"
/>
<div
className="absolute -bottom-20 -left-20 w-64 h-64 bg-teal-100 rounded-full blur-3xl opacity-40"
aria-hidden="true"
/>
<div className="container-page relative">
{/* Twee-kolommen layout: tekst links, afbeelding rechts */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
{/* Linker kolom: tekst content */}
<div>
{/* Urgency badge */}
<div className="mb-6">
<span className="inline-flex items-center gap-2 px-4 py-2 bg-coral-100 text-coral-700 rounded-full text-sm font-medium">
<span className="relative flex h-2 w-2">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-coral-500 opacity-75"></span>
<span className="relative inline-flex rounded-full h-2 w-2 bg-coral-500"></span>
</span>
Maximaal {availableSpots} plaatsen
</span>
</div>
{/* Headline */}
<h1 className="heading-hero mb-6">
Van{' '}
<span className="text-coral-500">"dit moet ik uitzoeken"</span>
{' '}naar{' '}
<span className="text-teal-600">"dit werkt gewoon"</span>
</h1>
{/* Subheadline */}
<p className="text-xl md:text-2xl text-warm-600 mb-6 leading-relaxed">
In 1 ochtend van nieuwsgierig naar praktisch aan de slag met Claude Code.
Je gaat naar huis met je eigen werkende project.
</p>
{/* Intro tekst */}
<p className="text-lg text-warm-600 mb-8 leading-relaxed">
Je hebt van Claude Code gehoord. Misschien zelfs al even mee gespeeld.
Maar ergens tussen de installatie en dat eerste echte resultaat ben je
blijven hangen. Herkenbaar? In deze hands-on workshop doorbreek je die drempel.
Samen met maximaal 6 andere ondernemers ga je van nul naar een werkend project
dat je direct kunt gebruiken in je business.
</p>
{/* Workshop details - prominent weergave */}
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4 mb-10 p-6 bg-white/70 backdrop-blur-sm rounded-2xl border border-warm-200 shadow-sm">
<div className="flex items-center gap-4">
{/* Calendar icon */}
<div className="flex-shrink-0 w-12 h-12 bg-coral-100 rounded-xl flex items-center justify-center">
<svg className="w-6 h-6 text-coral-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
</svg>
</div>
<div>
<p className="text-sm text-warm-500 font-medium uppercase tracking-wide">Datum</p>
<p className="text-lg font-semibold text-warm-800">Vrijdag 6 maart 2026</p>
</div>
</div>
<div className="flex items-center gap-4">
{/* Clock icon */}
<div className="flex-shrink-0 w-12 h-12 bg-teal-100 rounded-xl flex items-center justify-center">
<svg className="w-6 h-6 text-teal-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
</div>
<div>
<p className="text-sm text-warm-500 font-medium uppercase tracking-wide">Tijd</p>
<p className="text-lg font-semibold text-warm-800">9:00 - 14:00</p>
</div>
</div>
<div className="flex items-center gap-4">
{/* Location icon */}
<div className="flex-shrink-0 w-12 h-12 bg-coral-100 rounded-xl flex items-center justify-center">
<svg className="w-6 h-6 text-coral-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" />
</svg>
</div>
<div>
<p className="text-sm text-warm-500 font-medium uppercase tracking-wide">Locatie</p>
<p className="text-lg font-semibold text-warm-800">Utrecht</p>
</div>
</div>
</div>
{/* CTA Button */}
<a
href="#inschrijven"
className="btn-primary inline-flex items-center gap-2"
>
Schrijf je in
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 8l4 4m0 0l-4 4m4-4H3" />
</svg>
</a>
</div>
{/* Rechter kolom: afbeelding placeholder */}
<div className="hidden lg:block">
<div className="relative aspect-[4/3] bg-gradient-to-br from-warm-100 to-warm-200 rounded-2xl border-2 border-dashed border-warm-300 flex items-center justify-center">
{/* Placeholder icon en tekst */}
<div className="text-center text-warm-400">
<svg className="w-16 h-16 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.5} d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" />
</svg>
<p className="text-lg font-medium">Workshop afbeelding</p>
<p className="text-sm">Komt binnenkort</p>
</div>
{/* Decoratieve elementen */}
<div className="absolute -top-4 -right-4 w-24 h-24 bg-coral-200 rounded-full blur-2xl opacity-50" />
<div className="absolute -bottom-4 -left-4 w-20 h-20 bg-teal-200 rounded-full blur-2xl opacity-50" />
</div>
</div>
</div>
</div>
</section>
);
}
export default Hero;