Skip to content

Commit 610f10a

Browse files
feat: update schedule details
1 parent 206619e commit 610f10a

7 files changed

Lines changed: 191 additions & 27 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,5 @@ out
107107

108108
.DS_Store
109109

110-
.vscode
110+
.vscode
111+
.scratchpad

public/socials/github.svg

Lines changed: 4 additions & 0 deletions
Loading

public/socials/website.svg

Lines changed: 5 additions & 0 deletions
Loading

src/components/schedule-card.tsx

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,20 @@ type Props = {
1515
schedule: Event;
1616
};
1717

18+
const formatTime = (time: string) => format(new Date(time), "HH:mm");
19+
20+
const formatTimeRange = ({ when, until }: Event) => {
21+
if (!when) {
22+
return null;
23+
}
24+
25+
if (!until) {
26+
return formatTime(when);
27+
}
28+
29+
return `${formatTime(when)}-${formatTime(until)}`;
30+
};
31+
1832
const TalkCard: React.FC<{
1933
invert: Props["invert"];
2034
schedule: Props["schedule"];
@@ -29,6 +43,10 @@ const TalkCard: React.FC<{
2943
<Card
3044
sx={{
3145
minHeight: "12.8rem",
46+
border: schedule.isKeynote ? ".3rem solid #ed4337" : undefined,
47+
boxShadow: schedule.isKeynote
48+
? "0 8px 32px -12px #ed4337"
49+
: undefined,
3250
p: photos.length
3351
? [
3452
"3.2rem 4rem 2rem",
@@ -105,6 +123,20 @@ const TalkCard: React.FC<{
105123
fontSize: ["smallBody", "body"],
106124
}}
107125
>
126+
{schedule.isKeynote && (
127+
<Text
128+
sx={{
129+
display: "inline-flex",
130+
alignItems: "center",
131+
color: "primary",
132+
fontFamily: "heading",
133+
fontSize: "smallBody",
134+
fontWeight: "heading",
135+
}}
136+
>
137+
Keynote speaker
138+
</Text>
139+
)}
108140
{speakers.map((speaker) => (
109141
<Text
110142
key={speaker.name}
@@ -201,23 +233,28 @@ export const ScheduleCard: React.FC<Props> = ({
201233
{variant === "talk" && <TalkCard schedule={schedule} invert={invert} />}
202234
{variant === "info" && <InfoCard schedule={schedule} />}
203235

204-
{schedule.when && (
236+
{formatTimeRange(schedule) && (
205237
<Text
206238
key="when"
207239
sx={{
208240
position: "absolute",
209-
top: ["-3rem", "50%"],
210-
left: invert ? ["5rem", "2rem"] : ["5rem", "calc(100% - 2rem)"],
211-
transform: [
212-
null,
213-
invert
214-
? "translateY(-50%) translateX(0)"
215-
: "translateY(-50%) translateX(-100%)",
216-
],
217-
color: variant === "info" ? ["text", "white"] : "text",
241+
zIndex: 1,
242+
top: 0,
243+
left: "50%",
244+
transform: "translate(-50%, -50%)",
245+
px: "1rem",
246+
py: ".35rem",
247+
borderRadius: "999px",
248+
backgroundColor: variant === "info" ? "white" : "primary",
249+
boxShadow: "0 4px 16px -8px #464444",
250+
color: variant === "info" ? "primary" : "white",
251+
fontFamily: "heading",
252+
fontSize: "smallBody",
253+
lineHeight: 1,
254+
whiteSpace: "nowrap",
218255
}}
219256
>
220-
{format(new Date(schedule.when), "HH:mm")}
257+
{formatTimeRange(schedule)}
221258
</Text>
222259
)}
223260
</Box>

src/data/profile-links.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,21 @@ export const linkedInLink = (url: string): ProfileLink => ({
99
icon: "/socials/linkedin.png",
1010
label: "LinkedIn",
1111
});
12+
13+
export const githubLink = (url: string): ProfileLink => ({
14+
url,
15+
icon: "/socials/github.svg",
16+
label: "GitHub",
17+
});
18+
19+
export const websiteLink = (url: string): ProfileLink => ({
20+
url,
21+
icon: "/socials/website.svg",
22+
label: "website",
23+
});
24+
25+
export const twitterLink = (url: string): ProfileLink => ({
26+
url,
27+
icon: "/socials/twitter.png",
28+
label: "X/Twitter",
29+
});

src/data/schedule.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,171 +5,207 @@ export type Event = {
55
title?: string;
66
speakerIds?: SpeakerId[];
77
when?: string;
8+
until?: string;
9+
isKeynote?: boolean;
810
};
911

1012
export const SCHEDULE: Event[] = [
1113
{
1214
label: "Registration",
1315
when: "2026-05-09T09:30:00+02:00",
16+
until: "2026-05-09T10:00:00+02:00",
1417
},
1518
{
1619
label: "Opening",
1720
when: "2026-05-09T10:00:00+02:00",
21+
until: "2026-05-09T10:10:00+02:00",
1822
},
1923
{
2024
title:
2125
"The Python Dilemma on Microsoft Fabric: Data Wrangler, Pandas, or PySpark?",
2226
speakerIds: ["estera-kot"],
2327
when: "2026-05-09T10:10:00+02:00",
28+
until: "2026-05-09T10:34:00+02:00",
29+
isKeynote: true,
2430
},
2531
{
2632
title:
2733
"On negative motivation for programming, on reputation and ever neurodiversity",
2834
speakerIds: ["bartek-brak"],
2935
when: "2026-05-09T10:34:00+02:00",
36+
until: "2026-05-09T10:46:00+02:00",
3037
},
3138
{
3239
title:
3340
"It Doesn’t Have to Be Perfect: How I Shipped a Sales Forecasting Pipeline at 16",
3441
speakerIds: ["yevhen-maltsev"],
3542
when: "2026-05-09T10:46:00+02:00",
43+
until: "2026-05-09T10:58:00+02:00",
3644
},
3745
{
3846
title: "Building robust MCP servers with Python and FastMCP",
3947
speakerIds: ["vladyslav-fedoriuk"],
4048
when: "2026-05-09T10:58:00+02:00",
49+
until: "2026-05-09T11:10:00+02:00",
4150
},
4251
{
4352
label: "Coffee Break #1",
4453
when: "2026-05-09T11:10:00+02:00",
54+
until: "2026-05-09T11:34:00+02:00",
4555
},
4656
{
4757
title: "AI In Drug Design",
4858
speakerIds: ["jonas-cicenas"],
4959
when: "2026-05-09T11:34:00+02:00",
60+
until: "2026-05-09T11:46:00+02:00",
5061
},
5162
{
5263
title: "SuperDoc SDK: a modern alternative to python-docx",
5364
speakerIds: ["andrii-orlov"],
5465
when: "2026-05-09T11:34:00+02:00",
66+
until: "2026-05-09T11:46:00+02:00",
5567
},
5668
{
5769
title:
5870
"Beat the Pareto Principle: Let AI Handle the How, So You Can Focus on the Why",
5971
speakerIds: ["krzysiek-wilczynski"],
6072
when: "2026-05-09T11:46:00+02:00",
73+
until: "2026-05-09T11:58:00+02:00",
6174
},
6275
{
6376
title: "I vibecoded my wedding",
6477
speakerIds: ["dorota-ostrowska"],
6578
when: "2026-05-09T11:58:00+02:00",
79+
until: "2026-05-09T12:10:00+02:00",
6680
},
6781
{
6882
label: "Coffee Break #2",
6983
when: "2026-05-09T12:10:00+02:00",
84+
until: "2026-05-09T12:34:00+02:00",
7085
},
7186
{
7287
title:
7388
"One Logic, Two Worlds: Unified Large-Scale Feature Engineering with Polars",
7489
speakerIds: ["eliska-kosturova"],
7590
when: "2026-05-09T12:34:00+02:00",
91+
until: "2026-05-09T12:46:00+02:00",
7692
},
7793
{
7894
title: "Burn Your requirements.txt: The 10-Minute UV & Ruff Speedrun",
7995
speakerIds: ["cyprian-gburek"],
8096
when: "2026-05-09T12:46:00+02:00",
97+
until: "2026-05-09T12:58:00+02:00",
8198
},
8299
{
83100
title:
84101
"I am Python Engineer. How do I contribute to the Open Mercato - an open source Next.js ERP?",
85102
speakerIds: ["mateusz-staniaszek"],
86103
when: "2026-05-09T12:58:00+02:00",
104+
until: "2026-05-09T13:10:00+02:00",
87105
},
88106
{
89107
title: "Don't be scared when PostgreSQL Stops Using Your Indexes",
90108
speakerIds: ["szymon-cader"],
91109
when: "2026-05-09T13:10:00+02:00",
110+
until: "2026-05-09T13:22:00+02:00",
92111
},
93112
{
94113
label: "Pizza!",
95114
when: "2026-05-09T13:22:00+02:00",
115+
until: "2026-05-09T14:22:00+02:00",
96116
},
97117
{
98118
title: "Self Improving Expert Systems for medical sourcing",
99119
speakerIds: ["timothy-hobbs"],
100120
when: "2026-05-09T14:22:00+02:00",
121+
until: "2026-05-09T14:34:00+02:00",
101122
},
102123
{
103124
title: "TBA",
104125
speakerIds: ["marta-mulik-walczyna"],
105126
when: "2026-05-09T14:34:00+02:00",
127+
until: "2026-05-09T14:46:00+02:00",
106128
},
107129
{
108130
title: "Stealth Scraping 2026: Camoufox czy Nodriver?",
109131
speakerIds: ["jakub-melzacki", "daniel-goliszewski"],
110132
when: "2026-05-09T14:46:00+02:00",
133+
until: "2026-05-09T14:58:00+02:00",
111134
},
112135
{
113136
title: "Unsupervised Football Team Classification Using Clustering Techniques",
114137
speakerIds: ["aksa-fatima"],
115138
when: "2026-05-09T14:58:00+02:00",
139+
until: "2026-05-09T15:10:00+02:00",
116140
},
117141
{
118142
label: "Coffee Break #3",
119143
when: "2026-05-09T15:10:00+02:00",
144+
until: "2026-05-09T15:34:00+02:00",
120145
},
121146
{
122147
title: "DevOps: You Own More Than You Think",
123148
speakerIds: ["janusz-kamienski"],
124149
when: "2026-05-09T15:34:00+02:00",
150+
until: "2026-05-09T15:46:00+02:00",
125151
},
126152
{
127153
title: "Knowledge representation for efficient learning and communication",
128154
speakerIds: ["jan-bielecki"],
129155
when: "2026-05-09T15:46:00+02:00",
156+
until: "2026-05-09T15:58:00+02:00",
130157
},
131158
{
132159
title: "AI that doesn't lie",
133160
speakerIds: ["aleksandra-olszewska"],
134161
when: "2026-05-09T15:58:00+02:00",
162+
until: "2026-05-09T16:10:00+02:00",
135163
},
136164
{
137165
title:
138166
"Three Startups, One Pattern: What It Takes to Build with Python and AI",
139167
speakerIds: ["vadym-lishchynskyi"],
140168
when: "2026-05-09T16:10:00+02:00",
169+
until: "2026-05-09T16:22:00+02:00",
141170
},
142171
{
143172
label: "Coffee Break #4",
144173
when: "2026-05-09T16:22:00+02:00",
174+
until: "2026-05-09T16:46:00+02:00",
145175
},
146176
{
147177
title: "Wawa-Uiua! Very Nice Array Programming!",
148178
speakerIds: ["mateusz-zaremba"],
149179
when: "2026-05-09T16:46:00+02:00",
180+
until: "2026-05-09T16:58:00+02:00",
150181
},
151182
{
152183
title:
153184
"When the DATE type shouldn't be used for dates - a love letter to some programming languages",
154185
speakerIds: ["bartek-nowak"],
155186
when: "2026-05-09T16:58:00+02:00",
187+
until: "2026-05-09T17:10:00+02:00",
156188
},
157189
{
158190
title: "LLM made me install it",
159191
speakerIds: ["kinga-marszalkowska"],
160192
when: "2026-05-09T17:10:00+02:00",
193+
until: "2026-05-09T17:22:00+02:00",
161194
},
162195
{
163196
title: "Test more by checking less 👀",
164197
speakerIds: ["sebastian-buczynski"],
165198
when: "2026-05-09T17:22:00+02:00",
199+
until: "2026-05-09T17:34:00+02:00",
166200
},
167201
{
168202
label: "Lightning talks",
169203
when: "2026-05-09T17:34:00+02:00",
204+
until: "2026-05-09T17:58:00+02:00",
170205
},
171206
{
172207
label: "Closing Session",
173208
when: "2026-05-09T17:58:00+02:00",
209+
until: "2026-05-09T18:10:00+02:00",
174210
},
175211
];

0 commit comments

Comments
 (0)