diff --git a/components/hackathon/hackathon-challenge-partners.tsx b/components/hackathon/hackathon-challenge-partners.tsx index 75e2e53..80bec6b 100644 --- a/components/hackathon/hackathon-challenge-partners.tsx +++ b/components/hackathon/hackathon-challenge-partners.tsx @@ -1,5 +1,107 @@ +"use client"; + +import { useState } from "react"; import Image from "next/image"; -import { challengePartners } from "@/lib/hackathon-2026-data"; +import { ChevronDown, ChevronUp } from "lucide-react"; +import { challengePartners, type ChallengePartner } from "@/lib/hackathon-2026-data"; + +function ChallengePartnerCard({ partner }: { partner: ChallengePartner }) { + const [isOpen, setIsOpen] = useState(false); + const hasDetails = Boolean(partner.details || partner.contact); + + const summary = ( + <> +
+ {partner.name} +
+
+
+

+ {partner.name} +

+

{partner.description}

+
+ {hasDetails && ( + + {isOpen ? ( + + ) : ( + + )} + + )} +
+ + ); + + return ( +
+ {hasDetails ? ( + + ) : ( +
{summary}
+ )} + + {isOpen && hasDetails && ( +
+ {partner.details && ( +
+ {partner.details.map((paragraph) => ( +

+ {paragraph} +

+ ))} + {partner.website && ( +

+ More information:{" "} + + {partner.website.replace(/^https?:\/\//, "")} + +

+ )} +
+ )} + {partner.contact && ( +
+
+ {partner.contact.name} +
+ {partner.contact.intro.map((paragraph) => ( +

+ {paragraph} +

+ ))} +
+ )} +
+ )} +
+ ); +} export function HackathonChallengePartners() { return ( @@ -9,28 +111,9 @@ export function HackathonChallengePartners() { Meet the challenge partners -
+
{challengePartners.map((partner) => ( -
-
- {partner.name} -
-

- {partner.name} -

-

- {partner.description} -

-
+ ))}
diff --git a/components/header.tsx b/components/header.tsx index 05d3c7e..45558e4 100644 --- a/components/header.tsx +++ b/components/header.tsx @@ -4,6 +4,7 @@ import Link from "next/link"; import Image from "next/image"; import { Button } from "@/components/ui/button"; +import { MEMBERSHIP_FORM_URL } from "@/lib/site-links"; import { Menu, X } from "lucide-react"; import { useState } from "react"; @@ -53,7 +54,9 @@ export function Header() {
- +
{/* Mobile Menu Button */} @@ -81,7 +84,9 @@ export function Header() { {link.label} ))} - + )} diff --git a/components/hero-section.tsx b/components/hero-section.tsx index d6b65aa..60dc1b5 100644 --- a/components/hero-section.tsx +++ b/components/hero-section.tsx @@ -1,5 +1,6 @@ import { Linkedin, Instagram } from "lucide-react"; import Image from "next/image"; +import { MEMBERSHIP_FORM_URL } from "@/lib/site-links"; export function HeroSection() { return ( @@ -21,9 +22,14 @@ export function HeroSection() { {/* CTA BUTTONS */}
- +