diff --git a/src/pages/SpeakerDetail.tsx b/src/pages/SpeakerDetail.tsx new file mode 100644 index 0000000..c6c4a6d --- /dev/null +++ b/src/pages/SpeakerDetail.tsx @@ -0,0 +1,93 @@ +import { Link, useParams } from "react-router-dom"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { ArrowLeft, Twitter, Linkedin, Github, Clock, MapPin } from "lucide-react"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; + +const speakerData: Record = { + "speaker-1": { + initials: "SK", name: "Sarah Kim", role: "VP Engineering", company: "Vercel", + bio: "Sarah has spent over a decade building web infrastructure at scale. As VP of Engineering at Vercel, she leads the team behind Next.js and champions developer experience. She is a frequent keynote speaker at conferences worldwide and a passionate advocate for open-source software.", + expertise: ["React", "Performance", "Server Components", "Next.js"], + gradient: "from-indigo-500 to-cyan-500", + sessions: [ + { day: "Day 1", time: "09:00", title: "Opening Keynote: The Future of Web", room: "Main Hall" }, + { day: "Day 3", time: "11:30", title: "Micro-Frontends: Lessons Learned", room: "Room B" }, + ], + }, + "speaker-2": { + initials: "AM", name: "Alex Morgan", role: "CTO", company: "Supabase", + bio: "Alex co-founded Supabase to make backend development accessible to everyone. With deep expertise in PostgreSQL and real-time systems, they have helped thousands of developers ship faster. Previously a senior engineer at Stripe, Alex brings a unique blend of infrastructure and product thinking.", + expertise: ["TypeScript", "APIs", "Databases", "Open Source"], + gradient: "from-purple-500 to-pink-500", + sessions: [ + { day: "Day 1", time: "10:00", title: "React Server Components in Production", room: "Room A" }, + { day: "Day 2", time: "14:00", title: "Full-Stack TypeScript Patterns", room: "Room B" }, + ], + }, +}; + +export default function SpeakerDetailPage() { + const { id } = useParams(); + const speaker = speakerData[id || ""] || speakerData["speaker-1"]; + + return ( +
+
+ +
+
+ + Back to Speakers + + +
+
+ {speaker.initials} +
+
+

{speaker.name}

+

{speaker.role}, {speaker.company}

+
+ {[Twitter, Linkedin, Github].map((Icon, i) => ( + + ))} +
+
+

{speaker.bio}

+
+
+ {speaker.expertise.map((tag) => ( + {tag} + ))} +
+
+
+ + {/* Sessions */} +
+

Sessions

+
+ {speaker.sessions.map((s, i) => ( + + + {s.day} +
+ {s.time} +
+
{s.title}
+ {s.room} +
+
+ ))} +
+
+
+
+ +
+ ); +} \ No newline at end of file