adjust content structure speaker page

This commit is contained in:
Alisa Cantillo-Olsson 2026-04-28 16:37:12 +02:00
parent 92a72166da
commit de239b4468
7 changed files with 63 additions and 64 deletions

View File

@ -93,17 +93,17 @@ export const Filters5 = ({
{resetLabel}
</button>
</div>
<div className="flex h-12 items-center gap-3 rounded-2xl border border-electric-violet px-3">
<BiSearch className="size-6 shrink-0 text-electric-violet" />
<div className="flex h-12 items-center gap-3 rounded-2xl border border-tech-navy px-3">
<BiSearch className="size-6 shrink-0 text-tech-navy" />
<input
className="flex-1 bg-transparent text-base text-electric-violet outline-none placeholder:text-electric-violet/50"
className="flex-1 bg-transparent text-base text-tech-navy outline-none placeholder:text-tech-navy/40"
placeholder="Suchen..."
value={searchQuery}
onChange={(e) => onSearchChange(e.target.value)}
/>
{searchQuery && (
<button onClick={() => onSearchChange("")}>
<IoCloseOutline className="size-5 text-electric-violet" />
<IoCloseOutline className="size-5 text-tech-navy" />
</button>
)}
</div>

View File

@ -15,7 +15,7 @@ type ImageProps = {
type Links = {
title: string;
url: string;
url?: string;
};
type SocialMediaLinks = {
@ -134,7 +134,7 @@ export const Footer3Defaults: Props = {
links: [
{ title: "Programm", url: "/programm" },
{ title: "Speaker", url: "/speaker" },
{ title: "Location", url: "/location" },
{ title: "Location", url: "#" },
{ title: "Tickets", url: "#tickets" },
{ title: "FAQ", url: "#faq" },
],

View File

@ -15,7 +15,7 @@ type ImageProps = {
};
type NavLink = {
url: string;
url?: string;
title: string;
subMenuLinks?: NavLink[];
};
@ -209,7 +209,7 @@ export const Navbar3Defaults: Props = {
navLinks: [
{ title: "Programm", url: "/programm" },
{ title: "Speaker", url: "/speaker" },
{ title: "Location", url: "/location" },
{ title: "Location", url: "#" },
],
buttons: [
{

View File

@ -46,48 +46,52 @@ type Props = {
export type Team4Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
const talkBadgeClass = (type: Talk["type"]) => {
if (type === "Workshop") return "bg-acid-lime text-tech-navy";
if (type === "Networking") return "bg-acid-lime text-tech-navy";
if (type === "Talk") return "bg-neutral-dark text-cloud-white";
return "bg-electric-violet text-cloud-white";
};
const MemberCard = ({ member }: { member: TeamMember }) => (
<div className="flex flex-col font-barlow">
<Link to={`/speaker/${member.slug}`} className="relative mb-5 aspect-square w-full overflow-hidden block">
<Link to={`/speaker/${member.slug}`} className="relative mb-6 aspect-square w-full overflow-hidden block">
<img
src={member.image.src}
alt={member.image.alt}
className="absolute inset-0 size-full object-cover hover:scale-105 transition-transform duration-300"
/>
</Link>
<div className="flex flex-col gap-1 mb-4">
<div className="flex items-center justify-between gap-2">
<Link to={`/speaker/${member.slug}`} className="hover:underline">
<h5 className="text-md font-bold md:text-lg">{member.name}</h5>
<h5 className="text-xl font-semibold text-tech-navy leading-snug">{member.name}</h5>
</Link>
<p className="text-sm text-gray-600">{member.role}</p>
<a
href={member.companyUrl ?? "#"}
className="mb-3 text-sm underline underline-offset-2 text-tech-navy"
>
{member.socialLinks.length > 0 && (
<div className="flex gap-2 shrink-0">
{member.socialLinks.map((link, i) => (
<a key={i} href={link.href}>{link.icon}</a>
))}
</div>
)}
</div>
<p className="text-lg text-tech-navy">{member.role}</p>
{member.companyUrl ? (
<a href={member.companyUrl} className="text-lg underline underline-offset-2 text-tech-navy">
{member.company}
</a>
<p className="mb-4 text-sm leading-relaxed text-gray-700">{member.description}</p>
) : (
<p className="text-lg text-tech-navy">{member.company}</p>
)}
</div>
<p className="mb-4 text-base leading-relaxed text-tech-navy">{member.description}</p>
<div className="mb-4 flex flex-wrap gap-2">
{member.talks.map((talk, i) => (
<span
key={i}
className={`rounded-full px-3 py-1 text-xs font-semibold ${talkBadgeClass(talk.type)}`}
className={`rounded-lg px-2 py-1 text-sm font-semibold whitespace-nowrap ${talkBadgeClass(talk.type)}`}
>
{talk.title}
</span>
))}
</div>
<div className="mt-auto flex gap-3">
{member.socialLinks.map((link, i) => (
<a key={i} href={link.href}>
{link.icon}
</a>
))}
</div>
</div>
);

View File

@ -4,7 +4,7 @@ import { Cta30 } from "../components/Cta30";
import { Footer3 } from "../components/Footer";
import { Team4Defaults } from "../components/Team4";
import { ALL_EVENTS } from "../data/events";
import { BiCalendarAlt, BiMap, BiUser } from "react-icons/bi";
import { BiCalendarAlt, BiUser } from "react-icons/bi";
import { RxCube } from "react-icons/rx";
import webflowLogo from "../assets/webflow.png";
import relumeLogo from "../assets/relume.png";
@ -70,10 +70,6 @@ const ProgrammDetail = () => {
<BiCalendarAlt className="size-5 shrink-0 text-acid-lime" />
<span className="text-sm">{dateLabel}, {event.time}</span>
</div>
<div className="flex items-center gap-3 text-cloud-white/80">
<BiMap className="size-5 shrink-0 text-acid-lime" />
<span className="text-sm">Location</span>
</div>
<div className="flex items-center gap-3 text-cloud-white/80">
<BiUser className="size-5 shrink-0 text-acid-lime" />
<span className="text-sm">{event.speaker}</span>

View File

@ -49,8 +49,8 @@ const Speaker = () => {
heading="Unsere Speaker"
description="Erfahre von den klügsten Köpfen der Branche, wie sie komplexe Design-Herausforderungen meistern. Von Schweizer Präzision im Interface bis hin zu globalen Strategien führender Tech-Giganten unsere Speaker bringen handfeste Insights statt nur Buzzwords."
buttons={[
{ title: "Zu den Speakern", variant: "primary" },
{ title: "Zum Programm", variant: "secondary" },
{ title: "Zu den Speakern", variant: "primary", className: "bg-acid-lime text-neutral-dark border-acid-lime hover:bg-acid-lime/90 hover:border-acid-lime/90 rounded-2xl" },
{ title: "Zum Programm", variant: "secondary", className: "bg-transparent border-acid-lime text-acid-lime hover:bg-acid-lime/10 hover:border-acid-lime hover:text-acid-lime rounded-2xl" },
]}
/>
<Filters5

View File

@ -2,26 +2,29 @@ import { useParams, Navigate } from "react-router-dom";
import { Navbar3 } from "../components/Navbar";
import { Team4, Team4Defaults } from "../components/Team4";
import { Footer3 } from "../components/Footer";
import { BiLogoLinkedinSquare, BiGlobe } from "react-icons/bi";
import { FaXTwitter } from "react-icons/fa6";
import webflowLogo from "../assets/webflow.png";
import relumeLogo from "../assets/relume.png";
const ALL_SPEAKERS = Team4Defaults.teamMembers;
const SPONSORS = [
{ src: webflowLogo, alt: "Webflow" },
{ src: relumeLogo, alt: "Relume" },
];
const SponsorsSection = () => (
<section className="bg-tech-navy px-[5%] py-16 md:py-24 font-barlow">
<div className="container">
<h2 className="mb-12 text-center text-4xl font-bold text-cloud-white md:text-5xl">
Unsere Sponsoren & Partner
</h2>
<div className="grid grid-cols-3 gap-6 md:grid-cols-5">
{Array(15).fill(null).map((_, i) => (
<div className="flex flex-wrap items-center justify-center gap-8">
{SPONSORS.map((sponsor) => (
<div
key={i}
className="flex items-center justify-center rounded-lg border border-white/10 bg-white/5 px-4 py-6"
key={sponsor.alt}
className="flex items-center justify-center rounded-lg border border-white/10 bg-white/5 px-8 py-6"
>
<span className="text-sm font-semibold text-white/50">
{i % 2 === 0 ? "Webflow" : "Relume"}
</span>
<img src={sponsor.src} alt={sponsor.alt} className="h-10 w-auto object-contain" />
</div>
))}
</div>
@ -72,8 +75,9 @@ const SpeakerDetail = () => {
<p className="text-base leading-relaxed text-cloud-white/80 md:text-lg">
{speaker.fullBio ?? speaker.description}
</p>
{speaker.socialLinks.filter((l) => l.href !== "#").length > 0 && (
<div className="flex gap-4">
{speaker.socialLinks.map((link, i) => (
{speaker.socialLinks.filter((l) => l.href !== "#").map((link, i) => (
<a
key={i}
href={link.href}
@ -82,13 +86,8 @@ const SpeakerDetail = () => {
{link.icon}
</a>
))}
<a href="#" className="text-cloud-white/60 hover:text-acid-lime transition-colors">
<FaXTwitter className="size-6 p-0.5" />
</a>
<a href="#" className="text-cloud-white/60 hover:text-acid-lime transition-colors">
<BiGlobe className="size-6" />
</a>
</div>
)}
</div>
</div>
</div>