diff --git a/public/speaker-placeholder.png b/public/speaker-placeholder.png
new file mode 100644
index 0000000..7dee458
Binary files /dev/null and b/public/speaker-placeholder.png differ
diff --git a/src/App.tsx b/src/App.tsx
index 1f3b62c..49c932d 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -4,6 +4,7 @@ import { CFP } from '@/components/cfp.tsx';
import { Charity } from '@/components/charity.tsx';
import { InfoCards } from '@/components/info-cards.tsx';
import { Partners } from '@/components/partners.tsx';
+import { Speakers } from '@/components/speakers.tsx';
import { Venue } from '@/components/venue.tsx';
import { Hero } from './components/hero.tsx';
@@ -75,6 +76,7 @@ export const App = () => {
+
diff --git a/src/assets/speakers/jakub-mrugalski.png b/src/assets/speakers/jakub-mrugalski.png
new file mode 100644
index 0000000..c127074
Binary files /dev/null and b/src/assets/speakers/jakub-mrugalski.png differ
diff --git a/src/assets/speakers/mateusz-chrobok.png b/src/assets/speakers/mateusz-chrobok.png
new file mode 100644
index 0000000..e480b19
Binary files /dev/null and b/src/assets/speakers/mateusz-chrobok.png differ
diff --git a/src/components/footer.tsx b/src/components/footer.tsx
index 0cae95e..2ee4b52 100644
--- a/src/components/footer.tsx
+++ b/src/components/footer.tsx
@@ -40,6 +40,14 @@ export const Footer = () => {
Sponsor
+
+
+ Speakers
+
+
{
>
{
aria-label="LinkedIn"
>
{
+
+
+
diff --git a/src/components/navigation.tsx b/src/components/navigation.tsx
index 3531a01..fd6f9f6 100644
--- a/src/components/navigation.tsx
+++ b/src/components/navigation.tsx
@@ -20,6 +20,7 @@ export const Navigation = () => {
const navItems = [
{ label: 'CFP', id: 'cfp' },
{ label: 'Sponsor', id: 'partners' },
+ { label: 'Speakers', id: 'speakers' },
{ label: 'Venue', id: 'venue' },
{ label: 'Tickets', id: 'tickets' },
{ label: 'Contact', id: 'contact' },
diff --git a/src/components/speaker-card.tsx b/src/components/speaker-card.tsx
new file mode 100644
index 0000000..d397add
--- /dev/null
+++ b/src/components/speaker-card.tsx
@@ -0,0 +1,106 @@
+import type { Speaker } from '@/types/speaker.ts';
+
+export const SpeakerCard = ({
+ name,
+ company,
+ social,
+ bio,
+ role,
+ talkTitle,
+ imageUrl,
+}: Speaker) => {
+ return (
+
+
+

+
+
+
+
{name}
+
+ {role} @ {company}
+
+
{talkTitle}
+
{bio}
+
+ {social && (
+
+ {social.twitter && (
+
+
+
+ )}
+ {social.linkedin && (
+
+
+
+ )}
+ {social.github && (
+
+
+
+ )}
+ {social.instagram && (
+
+
+
+ )}
+
+ )}
+
+
+ );
+};
diff --git a/src/components/speakers.tsx b/src/components/speakers.tsx
new file mode 100644
index 0000000..e094d4a
--- /dev/null
+++ b/src/components/speakers.tsx
@@ -0,0 +1,95 @@
+import JakubMrugalski from '@/assets/speakers/jakub-mrugalski.png';
+import MateuszChrobok from '@/assets/speakers/mateusz-chrobok.png';
+import { SpeakerCard } from '@/components/speaker-card.tsx';
+import { Wrapper } from '@/components/wrapper.tsx';
+
+import type { Speaker } from '@/types/speaker.ts';
+
+const speakers: Speaker[] = [
+ {
+ name: 'Jakub Mrugalski',
+ role: 'Trainer',
+ company: 'AI_devs',
+ talkTitle: 'Talk title to be announced',
+ bio: 'BIO',
+ imageUrl: JakubMrugalski,
+ social: {
+ twitter: 'https://x.com/uwteam',
+ linkedin: 'https://www.linkedin.com/in/unknow/',
+ github: 'https://github.com/unkn0w',
+ instagram: 'https://www.instagram.com/uwteam_org/',
+ youtube: 'https://www.youtube.com/@uwteamorg',
+ },
+ },
+ {
+ name: 'Mateusz Chrobok',
+ role: 'Trainer / Co-Founder',
+ company: 'AI_devs',
+ talkTitle: 'Talk title to be announced',
+ bio: 'BIO',
+ imageUrl: MateuszChrobok,
+ social: {
+ twitter: 'https://x.com/MateuszChrobok',
+ linkedin: 'https://www.linkedin.com/in/mateuszchrobok/',
+ instagram: 'https://www.instagram.com/mateuszemsi/',
+ youtube: 'https://www.youtube.com/@MateuszChrobok',
+ },
+ },
+];
+
+export const Speakers = () => {
+ return (
+
+
+ Speakers
+
+ Learn from industry experts and thought leaders
+
+
+ {speakers.length === 0 ? (
+
+
+
To Be Announced
+
+ We're curating an incredible lineup of industry experts, thought
+ leaders, and innovators who will share their knowledge and
+ insights.
+
+
+ Stay tuned for speaker announcements! Follow us on social media to
+ be the first to know. 🎉
+
+
+ ) : (
+ <>
+
+ {speakers.map(speaker => (
+
+ ))}
+
+
+
+
+ More amazing speakers will be announced soon! 🎉
+
+
+ >
+ )}
+
+
+ );
+};
diff --git a/src/types/speaker.ts b/src/types/speaker.ts
new file mode 100644
index 0000000..7bb2401
--- /dev/null
+++ b/src/types/speaker.ts
@@ -0,0 +1,15 @@
+export interface Speaker {
+ name: string;
+ role: string;
+ company: string;
+ talkTitle: string;
+ bio: string;
+ imageUrl?: string;
+ social?: {
+ twitter?: string;
+ linkedin?: string;
+ github?: string;
+ instagram?: string;
+ youtube?: string;
+ };
+}