Maak een dynamische landingspagina voor de studio "My Studio - 1".
BELANGRIJK: De pagina moet bij het laden data ophalen van deze API endpoint:
https://cai-platform.test.coddin.app/api/v1/landing-page/37cbc669-e1ef-4292-83cd-ba0d9aeabe4a
Gebruik fetch() om de data op te halen bij page load en render alle secties dynamisch op basis van de response. Hieronder staat de huidige data als referentie voor de structuur, maar de pagina moet ALTIJD live data ophalen van de API.
== API Response structuur (huidige data als voorbeeld) ==
Studio naam: My Studio - 1
Titel: My Studio - 1
Subtitel:
Beschrijving: Test
Afbeelding URL: https://cai-platform.test.coddin.app/storage/studios/images/c5f0dcee-5cdf-4f19-848a-6d67415c537a.png
Logo URL:
Eigenaar: Ardin
Juridische documenten: [array van {label, url} objecten]
BELANGRIJK: De API response bevat een "checkoutEnabled" boolean. Als checkoutEnabled FALSE is, mogen er GEEN checkout/koop/aanmeld knoppen getoond worden. Toon in plaats daarvan "Binnenkort beschikbaar" of "Coming soon" als placeholder. Alle CTA knoppen die naar checkoutUrl linken moeten conditioneel zijn op basis van checkoutEnabled.
Prijs: €25,00 per maand. Checkout URL (uit API response "checkoutUrl"): https://cai-platform.test.coddin.app/studio/6f3321cf-dc65-4105-8dc2-b4a1a486421c/37cbc669-e1ef-4292-83cd-ba0d9aeabe4a/checkout
Het is een maandelijks abonnement. Dit is van groot belang dat het overal correct weergegeven wordt. Er moeten geen referenties van eenmalige betalingen of iets dergelijks in zitten.
== Assistenten (komen uit API response "assistants" array) ==
== Vereiste secties (in deze volgorde) ==
== Technische vereisten ==
data.assistants.length. Dus NIET "7 AI-assistenten" maar ${data.assistants.length} AI-assistenten.Now I have all the context I need. Let me build the full dynamic landing page with a sleek dark AI aesthetic inspired by the design brief.
Now let me build all the landing page components:
Now let's create the main landing page client component and the page entry:
Now let me verify that the globals.css doesn't have any problematic shadcn import patterns that could cause issues:
Everything looks great. The landing page is fully built. Here's a summary of what was created:
Structuur (9 bestanden):
app/page.tsx — entry point, laadt de LandingPage client componentcomponents/landing/LandingPage.tsx — core component met fetch() call, loading/error state, en vaste navbarcomponents/landing/HeroSection.tsx — hero met badge, studio-afbeelding, titel, CTA en prijspilcomponents/landing/AssistantsSection.tsx — dynamisch grid van alle assistenten met bulletscomponents/landing/MakerSection.tsx — persoonlijk verhaal over de eigenaarcomponents/landing/ProblemTransformationSection.tsx — voor/na vergelijking kaartencomponents/landing/BenefitsSection.tsx — 6 voordelen gridcomponents/landing/SocialProofSection.tsx — 3 testimonials + statistiekenbarcomponents/landing/FAQSection.tsx — accordion FAQ met 8 vragencomponents/landing/CTASection.tsx — afsluitende CTA met prijsweergavecomponents/landing/FooterSection.tsx — dynamische juridische links uit APIKernlogica:
checkoutEnabled bepaalt of CTA-knoppen actief zijn of "Binnenkort beschikbaar" tonendata.assistants.length