Skip to content

Commit 24e7683

Browse files
authored
chore: add speakers json (#903)
Co-authored-by: samsonemeje <samsonemeje@gmail.com> Co-authored-by: thulieblack <sibanda.thulie@gmail.com>
1 parent 48b6b53 commit 24e7683

12 files changed

Lines changed: 259 additions & 125 deletions

File tree

components/Agenda/agenda.tsx

Lines changed: 111 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -8,125 +8,124 @@ interface IAgenda {
88
city: ExtendedCity;
99
}
1010

11+
1112
function Agenda({ city }: IAgenda): JSX.Element {
13+
const hasMultiDayAgenda = city.agenda.some(talk => talk.day);
14+
const agendaByDay = hasMultiDayAgenda
15+
? city.agenda.reduce<Record<string, AgendaType[]>>((acc, talk) => {
16+
const dayKey = talk.day ?? 'Agenda';
17+
(acc[dayKey] ||= []).push(talk);
18+
return acc;
19+
}, {})
20+
: { Agenda: city.agenda };
21+
22+
if (city.agenda.length < 1) {
23+
return (
24+
<div data-test="agenda-com" className="flex flex-col justify-center items-center">
25+
<div className="w-[720px] lg:w-full mt-[10px] text-center">
26+
<Heading typeStyle="heading-md" className="text-white">
27+
Agenda Coming Soon - Stay Tuned!
28+
</Heading>
29+
</div>
30+
</div>
31+
);
32+
}
33+
1234
return (
13-
<div className="" data-test="agenda-com">
14-
<div className="flex flex-col justify-center items-center">
15-
{city.agenda.length < 1 ? (
16-
<div className="w-[720px] lg:w-full mt-[10px] text-center">
17-
<Heading typeStyle="heading-md" className="text-white">
18-
Agenda Coming Soon - Stay Tuned!
19-
</Heading>
20-
</div>
21-
) : (
22-
<div className="">
23-
<Heading className="text-[30px] text-white text-center mb-[40px]">
24-
Agenda
25-
</Heading>
26-
<Heading
27-
typeStyle="heading-md"
28-
className="text-gradient"
29-
level="h3"
30-
>
31-
{city.date}
32-
</Heading>
35+
<div data-test="agenda-com" className="flex flex-col justify-center items-center">
36+
<div className="w-full">
37+
<Heading className="text-[30px] text-white text-center mb-[40px]">Agenda</Heading>
38+
{Object.entries(agendaByDay).map(([day, talks]) => (
39+
<div key={day} className="mb-[80px]">
40+
{hasMultiDayAgenda && (
41+
<Heading
42+
typeStyle="heading-md"
43+
level="h3"
44+
className="text-gradient mb-[30px]"
45+
>
46+
{day}
47+
</Heading>
48+
)}
49+
{talks.map((talk: AgendaType) => {
50+
const getSpeaker = city.speakers.filter(speaker =>
51+
Array.isArray(talk.speaker)
52+
? talk.speaker.includes(speaker.id)
53+
: speaker.id === talk.speaker
54+
);
3355

34-
<div className="mt-[40px]">
35-
{city.agenda.map((talk: AgendaType) => {
36-
const getSpeaker = city.speakers.filter((speaker) => {
37-
if (typeof talk.speaker === 'object') {
38-
return talk.speaker.includes(speaker.id);
39-
}
40-
return speaker.id === talk.speaker;
41-
});
42-
return (
43-
<div
44-
key={talk.time}
45-
className={`flex sm:flex-col justify-between mt-[50px] ${!talk.speaker && 'countdown-text-gradient'}`}
46-
>
47-
<Paragraph typeStyle="body-md">{talk.time}</Paragraph>
48-
<div className="flex justify-between lg:flex-col w-[75%] lg:w-full">
49-
<div className="w-[50%] lg:w-full">
50-
<Paragraph typeStyle="body-sm" className="">
51-
{talk.type}
52-
</Paragraph>
53-
<Heading
54-
level="h3"
55-
typeStyle="heading-md-semibold"
56-
className="mt-[23px] text-white text-[20px] sm:text-[18px]"
57-
>
58-
{talk.session}
59-
</Heading>
60-
</div>
61-
{talk.speaker && typeof talk.speaker === 'number' ? (
62-
<div className="flex items-center lg:mt-4">
63-
<div className="w-[94px] h-[94px]">
64-
<Image
65-
src={getSpeaker[0].img}
66-
alt={getSpeaker[0].name}
67-
width={0}
68-
height={0}
69-
className="object-cover rounded-full w-[100%] h-[100%]"
70-
/>
71-
</div>
72-
<div className="ml-4 w-[300px] sm:w-[250px]">
73-
<Heading
74-
typeStyle="heading-sm-semibold"
75-
className="text-white"
76-
>
77-
{getSpeaker[0].name}
78-
</Heading>
79-
<Paragraph typeStyle="body-sm" className="mt-2">
80-
{getSpeaker[0].title}
81-
</Paragraph>
82-
</div>
56+
return (
57+
<div
58+
key={talk.time}
59+
className={`flex sm:flex-col justify-between mt-[50px] ${!talk.speaker ? 'countdown-text-gradient' : ''}`}
60+
>
61+
<Paragraph typeStyle="body-md">{talk.time}</Paragraph>
62+
<div className="flex justify-between lg:flex-col w-[75%] lg:w-full">
63+
<div className="w-[50%] lg:w-full">
64+
<Paragraph typeStyle="body-sm">{talk.type}</Paragraph>
65+
<Heading
66+
level="h3"
67+
typeStyle="heading-md-semibold"
68+
className="mt-[23px] text-white text-[20px] sm:text-[18px]"
69+
>
70+
{talk.session}
71+
</Heading>
72+
</div>
73+
{/* Single speaker */}
74+
{typeof talk.speaker === 'number' && getSpeaker[0] && (
75+
<div className="flex items-center lg:mt-4">
76+
<div className="w-[94px] h-[94px]">
77+
<Image
78+
src={getSpeaker[0].img}
79+
alt={getSpeaker[0].name}
80+
width={0}
81+
height={0}
82+
className="object-cover rounded-full w-full h-full"
83+
/>
8384
</div>
84-
) : (
85-
<div></div>
86-
)}
87-
{talk.speaker && typeof talk.speaker === 'object' && (
88-
<div className="flex flex-col">
89-
{getSpeaker.length > 1 &&
90-
getSpeaker.map((speaker, i) => {
91-
return (
92-
<div key={i} className="mt-6">
93-
<div className="flex items-center lg:mt-4">
94-
<div className="w-[94px] h-[94px]">
95-
<Image
96-
src={speaker.img}
97-
alt={speaker.name}
98-
width={0}
99-
height={0}
100-
className="object-cover rounded-full w-[100%] h-[100%]"
101-
/>
102-
</div>
103-
<div className="ml-4 w-[300px] sm:w-[250px]">
104-
<Heading
105-
typeStyle="heading-sm-semibold"
106-
className="text-white"
107-
>
108-
{speaker.name}
109-
</Heading>
110-
<Paragraph
111-
typeStyle="body-sm"
112-
className="mt-2"
113-
>
114-
{speaker.title}
115-
</Paragraph>
116-
</div>
117-
</div>
118-
</div>
119-
);
120-
})}
85+
<div className="ml-4 w-[300px] sm:w-[250px]">
86+
<Heading typeStyle="heading-sm-semibold" className="text-white">
87+
{getSpeaker[0].name}
88+
</Heading>
89+
<Paragraph typeStyle="body-sm" className="mt-2">
90+
{getSpeaker[0].title}
91+
</Paragraph>
12192
</div>
122-
)}
123-
</div>
93+
</div>
94+
)}
95+
{/* Multiple speakers */}
96+
{Array.isArray(talk.speaker) && getSpeaker.length > 0 && (
97+
<div className="flex flex-col">
98+
{getSpeaker.map((speaker, i) => (
99+
<div key={i} className="mt-6">
100+
<div className="flex items-center lg:mt-4">
101+
<div className="w-[94px] h-[94px]">
102+
<Image
103+
src={speaker.img}
104+
alt={speaker.name}
105+
width={0}
106+
height={0}
107+
className="object-cover rounded-full w-full h-full"
108+
/>
109+
</div>
110+
<div className="ml-4 w-[300px] sm:w-[250px]">
111+
<Heading typeStyle="heading-sm-semibold" className="text-white">
112+
{speaker.name}
113+
</Heading>
114+
<Paragraph typeStyle="body-sm" className="mt-2">
115+
{speaker.title}
116+
</Paragraph>
117+
</div>
118+
</div>
119+
</div>
120+
))}
121+
</div>
122+
)}
124123
</div>
125-
);
126-
})}
127-
</div>
124+
</div>
125+
);
126+
})}
128127
</div>
129-
)}
128+
))}
130129
</div>
131130
</div>
132131
);

components/Form/subscription.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ function Subscription(): JSX.Element {
66
<div className="mt-0 md:mt-[106px] subscription container flex justify-center">
77
<div className="mt-[106px] lg:mt-0 w-[1024px] min-h-[253px] lg:py-10 lg:w-full flex flex-col items-center">
88
<h3 className="text-[32px] text-white lg:text-center">
9-
Subscribe for AsyncAPI Conf updates!
9+
Subscribe for AsyncAPI Conference updates!
1010
</h3>
1111
<a
1212
href="https://www.asyncapi.com/newsletter"

components/Speaker/speaker.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function Speaker({ details, location, className }: ISpeaker): JSX.Element {
3232
</div>
3333
<div className="mt-[19px]">
3434
<h3 className="text-[23px] text-white">{shortenedName}</h3>
35-
<div className={`flex flex-col ${'min-h-[150px]'} justify-between`}>
35+
<div className="flex flex-col ${'min-h-[100px]'} justify-between`}">
3636
<div>
3737
{' '}
3838
<p className="mt-[6.6px] text-[18px] text-gray-500">

config/agenda.json

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,74 @@
1-
[]
1+
[
2+
{
3+
"time": "13:00 PM PST - 13:25 PM PST",
4+
"session": "AsyncAPI Conference: From Side Project to Industry Standard",
5+
"speaker": 1,
6+
"type": "Community Talk",
7+
"city": "California",
8+
"day": "Day 1"
9+
},
10+
{
11+
"time": "13:30 PM PST - 13:55 PM PST",
12+
"session": "AsyncAPI Conference: Your API Is Lying to You - Turning Domain Stories Into Honest API Designs",
13+
"speaker": 2,
14+
"type": "Technical Speaker",
15+
"city": "California",
16+
"day": "Day 1"
17+
},
18+
{
19+
"time": "14:00 PM PST - 14:50 PM PST",
20+
"session": "AsyncAPI Conference: The EDA Journey at The New York Time's Commerce Platform",
21+
"speaker": 3,
22+
"type": "Technical Speaker",
23+
"city": "California",
24+
"day": "Day 1"
25+
},
26+
{
27+
"time": "15:00 PM PST - 15:50 PM PST",
28+
"session": "AsyncAPI Conference: Supercharging Spec-Driven Development for Event-Driven Architectures",
29+
"speaker": 4,
30+
"type": "Technical Speaker",
31+
"city": "California",
32+
"day": "Day 1"
33+
},
34+
{
35+
"time": "13:00 PM PST - 13:25 PM PST",
36+
"session": "AsyncAPI Conference: Building the Open Standard for Event Driven APIs Together",
37+
"speaker": 5,
38+
"type": "Community Talk",
39+
"city": "California",
40+
"day": "Day 2"
41+
},
42+
{
43+
"time": "13:30 PM PST - 13:55 PM PST",
44+
"session": "AsyncAPI Conference: Spec Authoring Made Intuitive",
45+
"speaker": 6,
46+
"type": "Technical Speaker",
47+
"city": "California",
48+
"day": "Day 2"
49+
},
50+
{
51+
"time": "14:00 PM PST - 14:25 PM PST",
52+
"session": "AsyncAPI Conference: Building an Enterprise-wide AsyncAPI Catalog",
53+
"speaker": 7,
54+
"type": "Technical Speaker",
55+
"city": "California",
56+
"day": "Day 2"
57+
},
58+
{
59+
"time": "14:30 PM PST - 14:55 PM PST",
60+
"session": "AsyncAPI Conference: Event-Driven Architecture 101: From REST to Streams",
61+
"speaker": 8,
62+
"type": "Technical Speaker",
63+
"city": "California",
64+
"day": "Day 2"
65+
},
66+
{
67+
"time": "15:00 PM PST - 15:25 PM PST",
68+
"session": "AsyncAPI Conference: Documenting and Testing MongoDB Change Streams with AsyncAPI and Microcks",
69+
"speaker": 9,
70+
"type": "Technical Speaker",
71+
"city": "California",
72+
"day": "Day 2"
73+
}
74+
]

config/city-lists.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
{
33
"name": "California",
44
"country": "USA",
5-
"date": "18-20, February 2026",
5+
"date": "19-20, February 2026",
66
"cfpDate": "21 November, 2025",
7-
"description": "Join the AsyncAPI Summit as an integral part of DeveloperWeek 2026.",
7+
"description": "Join the AsyncAPI Conference as an integral part of DeveloperWeek 2026.",
88
"img": "/img/locations/san-jose.webp",
99
"address": "150 W San Carlos St, San Jose, CA 95113",
1010
"mapUrl": "https://maps.app.goo.gl/29C6zbBjzNMuxUi4A",

config/editions.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
[
2+
"https://conference.2025.asyncapi.com/",
23
"https://conference.2024.asyncapi.com/",
34
"https://conference.2023.asyncapi.com/",
45
"https://conference.2022.asyncapi.com/",

0 commit comments

Comments
 (0)