Skip to content

Commit 3b00d59

Browse files
authored
graphqlconf 2025 — schedule improvements (#2039)
* Sync speakers * Display time range in session details * Add ics links to Schedule cards * Display clock icon and duration for lightning talks * Show a gradient in schedule cards if the talk is shorter than block * skip AM before PM * Add more options to [Add to calendar] * Fix colors in dark mode
1 parent d59382f commit 3b00d59

File tree

9 files changed

+297
-82
lines changed

9 files changed

+297
-82
lines changed

scripts/sync-sched/schedule-2025.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@
894894
"event_end": "2025-09-08 14:55",
895895
"event_type": "GraphQL in Production",
896896
"description": "In Booking.com we are heavily using Federated GraphQL approach, more than 150 backend sub-graph services are integrated from different domains of the company such as accommodations, partner, flights, cars, trips, and fintech.\n \n \nOur federated GraphQL layer hosts daily 11b+ incoming requests, Federation in the back distributes 14b+ requests to the sub-graphs per day. We have a diverse set of clients such as Booking traveller, partner native apps/web clients, 140+ SSR (Server Side Rendering) services for Web/Mobile rendering, and AI chatbots. This level of adoption brings unique challenges in terms of security and traffic management. In Booking.com we have a large attack surface since our GraphQL schema is huge, to be specific we have ~7k types with 27k+ fields. In this session, we will share our schema driven approaches to mitigate risks due to authN/Z leaks, DDoS attacks or exposure of sensitive PII/PCI data. These methodologies are designed with a high degree of generality, ensuring their applicability and scalability across every other Federated GraphQL system.",
897-
"goers": "0",
897+
"goers": "1",
898898
"seats": "0",
899899
"invite_only": "N",
900900
"venue": "Studio",

scripts/sync-sched/speakers.json

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@
739739
"_years": [
740740
2025
741741
],
742-
"~syncedDetailsAt": 1750181396120
742+
"~syncedDetailsAt": 1751036945383
743743
},
744744
{
745745
"username": "christian.ernst",
@@ -843,7 +843,7 @@
843843
"_years": [
844844
2025
845845
],
846-
"~syncedDetailsAt": 1750181396119
846+
"~syncedDetailsAt": 1751036922058
847847
},
848848
{
849849
"username": "danielle.man",
@@ -905,11 +905,20 @@
905905
"location": "",
906906
"url": "",
907907
"avatar": "//avatars.sched.co/3/1e/23098735/avatar.jpg.320x320px.jpg?7a3",
908-
"socialurls": [],
908+
"socialurls": [
909+
{
910+
"service": "Twitter",
911+
"url": "https://x.com/dotansimha"
912+
},
913+
{
914+
"service": "LinkedIn",
915+
"url": "https://www.linkedin.com/in/dotan-simha-36767b29/"
916+
}
917+
],
909918
"_years": [
910919
2025
911920
],
912-
"~syncedDetailsAt": 1750181396119
921+
"~syncedDetailsAt": 1751036922058
913922
},
914923
{
915924
"username": "dotansimha",
@@ -944,7 +953,7 @@
944953
"_years": [
945954
2025
946955
],
947-
"~syncedDetailsAt": 1750181396119
956+
"~syncedDetailsAt": 1751036922058
948957
},
949958
{
950959
"username": "eitan15",
@@ -1071,7 +1080,7 @@
10711080
"_years": [
10721081
2025
10731082
],
1074-
"~syncedDetailsAt": 1750181396119
1083+
"~syncedDetailsAt": 1751036922058
10751084
},
10761085
{
10771086
"username": "fionabronwen",
@@ -1106,7 +1115,7 @@
11061115
"_years": [
11071116
2025
11081117
],
1109-
"~syncedDetailsAt": 1750181396119
1118+
"~syncedDetailsAt": 1751036922058
11101119
},
11111120
{
11121121
"username": "gabrielschulhof",
@@ -1228,7 +1237,7 @@
12281237
"_years": [
12291238
2025
12301239
],
1231-
"~syncedDetailsAt": 1750181396119
1240+
"~syncedDetailsAt": 1751036922058
12321241
},
12331242
{
12341243
"username": "hello2358",
@@ -1308,7 +1317,7 @@
13081317
"_years": [
13091318
2025
13101319
],
1311-
"~syncedDetailsAt": 1750181396119
1320+
"~syncedDetailsAt": 1751036922058
13121321
},
13131322
{
13141323
"username": "jamie855",
@@ -1362,7 +1371,7 @@
13621371
"_years": [
13631372
2025
13641373
],
1365-
"~syncedDetailsAt": 1750181396119
1374+
"~syncedDetailsAt": 1751036922058
13661375
},
13671376
{
13681377
"username": "jared_cheney.7rad60v",
@@ -1439,11 +1448,16 @@
14391448
"location": "",
14401449
"url": "",
14411450
"avatar": "//avatars.sched.co/3/b5/23098759/avatar.jpg.320x320px.jpg?613",
1442-
"socialurls": [],
1451+
"socialurls": [
1452+
{
1453+
"service": "LinkedIn",
1454+
"url": "https://linkedin.com/in/jeffdolle"
1455+
}
1456+
],
14431457
"_years": [
14441458
2025
14451459
],
1446-
"~syncedDetailsAt": 1750181396119
1460+
"~syncedDetailsAt": 1751036922058
14471461
},
14481462
{
14491463
"username": "jens63",
@@ -1482,7 +1496,7 @@
14821496
"_years": [
14831497
2025
14841498
],
1485-
"~syncedDetailsAt": 1750181396119
1499+
"~syncedDetailsAt": 1751036922058
14861500
},
14871501
{
14881502
"username": "jesperrasmussen",
@@ -1541,7 +1555,7 @@
15411555
"_years": [
15421556
2025
15431557
],
1544-
"~syncedDetailsAt": 1750181396119
1558+
"~syncedDetailsAt": 1751036941512
15451559
},
15461560
{
15471561
"username": "jordaneldredge",
@@ -1580,7 +1594,7 @@
15801594
"_years": [
15811595
2025
15821596
],
1583-
"~syncedDetailsAt": 1750181396119
1597+
"~syncedDetailsAt": 1751036941512
15841598
},
15851599
{
15861600
"username": "juancarlosjr97",
@@ -1604,7 +1618,7 @@
16041618
"_years": [
16051619
2025
16061620
],
1607-
"~syncedDetailsAt": 1750181396120
1621+
"~syncedDetailsAt": 1751036945383
16081622
},
16091623
{
16101624
"username": "kamilkisiela",
@@ -1634,7 +1648,7 @@
16341648
2024,
16351649
2025
16361650
],
1637-
"~syncedDetailsAt": 1750181396119
1651+
"~syncedDetailsAt": 1751036941512
16381652
},
16391653
{
16401654
"username": "keerthan.ekbote",
@@ -1781,7 +1795,7 @@
17811795
"about": "Laurin Quast is a developer that started exploring GraphQL, by leading API development at a start-up. Realizing that there are still many unsolved problems and challenges within the space, he started contributing to famous JavaScript libraries, such as GraphQL Code Generator and Tools. Diving deeper, the transition into becoming a full-time open-source developer at The Guild was inevitable. Currently, he is working on Hive helping teams scale GraphQL across teams and organizations.",
17821796
"location": "",
17831797
"url": "https://the-guild.dev/",
1784-
"avatar": "//avatars.sched.co/2/a6/18743819/avatar.jpg.320x320px.jpg?705",
1798+
"avatar": "//avatars.sched.co/2/a6/18743819/avatar.jpg.320x320px.jpg?ebc",
17851799
"socialurls": [
17861800
{
17871801
"service": "Twitter",
@@ -1797,7 +1811,7 @@
17971811
2024,
17981812
2025
17991813
],
1800-
"~syncedDetailsAt": 1750181396119
1814+
"~syncedDetailsAt": 1751036941512
18011815
},
18021816
{
18031817
"username": "ldebruijn",
@@ -1833,7 +1847,7 @@
18331847
2024,
18341848
2025
18351849
],
1836-
"~syncedDetailsAt": 1750181396119
1850+
"~syncedDetailsAt": 1751036941512
18371851
},
18381852
{
18391853
"username": "lee_byron.25krdom6",
@@ -1887,7 +1901,7 @@
18871901
"_years": [
18881902
2025
18891903
],
1890-
"~syncedDetailsAt": 1750181396120
1904+
"~syncedDetailsAt": 1751036941512
18911905
},
18921906
{
18931907
"username": "lyonwj1",
@@ -1936,7 +1950,7 @@
19361950
2024,
19371951
2025
19381952
],
1939-
"~syncedDetailsAt": 1750181396119
1953+
"~syncedDetailsAt": 1751036941512
19401954
},
19411955
{
19421956
"username": "mail1232",
@@ -1951,7 +1965,7 @@
19511965
"_years": [
19521966
2025
19531967
],
1954-
"~syncedDetailsAt": 1750181396120
1968+
"~syncedDetailsAt": 1751036941512
19551969
},
19561970
{
19571971
"username": "mansi.mittal",
@@ -2026,7 +2040,7 @@
20262040
2024,
20272041
2025
20282042
],
2029-
"~syncedDetailsAt": 1750181396119
2043+
"~syncedDetailsAt": 1751036941512
20302044
},
20312045
{
20322046
"username": "martinbonnin42",
@@ -2156,7 +2170,7 @@
21562170
2023,
21572171
2025
21582172
],
2159-
"~syncedDetailsAt": 1750181396120
2173+
"~syncedDetailsAt": 1751036945383
21602174
},
21612175
{
21622176
"username": "mgiroux7",
@@ -2206,7 +2220,7 @@
22062220
2024,
22072221
2025
22082222
],
2209-
"~syncedDetailsAt": 1750181396120
2223+
"~syncedDetailsAt": 1751036945383
22102224
},
22112225
{
22122226
"username": "michael.astle",
@@ -2291,7 +2305,7 @@
22912305
2024,
22922306
2025
22932307
],
2294-
"~syncedDetailsAt": 1750181396120
2308+
"~syncedDetailsAt": 1751036945383
22952309
},
22962310
{
22972311
"username": "patrick.arminio",
@@ -2505,7 +2519,7 @@
25052519
2024,
25062520
2025
25072521
],
2508-
"~syncedDetailsAt": 1750181396120
2522+
"~syncedDetailsAt": 1751036945383
25092523
},
25102524
{
25112525
"username": "robrichard87",
@@ -2521,7 +2535,7 @@
25212535
2024,
25222536
2025
25232537
],
2524-
"~syncedDetailsAt": 1750181915102
2538+
"~syncedDetailsAt": 1751036945383
25252539
},
25262540
{
25272541
"username": "ruben.cagnie",
@@ -2552,7 +2566,7 @@
25522566
2024,
25532567
2025
25542568
],
2555-
"~syncedDetailsAt": 1750181953774
2569+
"~syncedDetailsAt": 1751036945383
25562570
},
25572571
{
25582572
"username": "saihaj",
@@ -2614,7 +2628,7 @@
26142628
"position": "Senior Software Engineer 2",
26152629
"name": "Sanver Tarmur",
26162630
"about": "Sanver is a Senior Software Engineer II at Booking.com with 15 years of industry experience. In recent years, he has been leading the Federated GraphQL transformation at Booking.com, focusing on scaling, enhancing the security of the GraphQL platform, and improving the developer experience for internal Graph users.",
2617-
"location": "",
2631+
"location": "Amsterdam",
26182632
"url": "",
26192633
"avatar": "//avatars.sched.co/0/9e/23098798/avatar.jpg.320x320px.jpg?318",
26202634
"socialurls": [],
@@ -2856,7 +2870,7 @@
28562870
2024,
28572871
2025
28582872
],
2859-
"~syncedDetailsAt": 1750181966765
2873+
"~syncedDetailsAt": 1751036945383
28602874
},
28612875
{
28622876
"username": "stefan239",
@@ -3142,7 +3156,7 @@
31423156
2024,
31433157
2025
31443158
],
3145-
"~syncedDetailsAt": 1750181973559
3159+
"~syncedDetailsAt": 1751036945383
31463160
},
31473161
{
31483162
"username": "vincent.desmares",
@@ -3192,7 +3206,7 @@
31923206
"_years": [
31933207
2025
31943208
],
3195-
"~syncedDetailsAt": 1750181396119
3209+
"~syncedDetailsAt": 1751036941512
31963210
},
31973211
{
31983212
"username": "watson17",

src/app/conf/2025/schedule/[id]/page.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { CtaCardSection } from "../../components/cta-card-section"
2222
import { Button } from "@/app/conf/_design-system/button"
2323
import { SessionTags } from "../../components/session-tags"
2424
import { formatDescription } from "./format-description"
25+
import { formatBlockTime } from "../_components/format-block-time"
2526

2627
type SessionProps = { params: { id: string } }
2728

@@ -194,10 +195,15 @@ function SessionHeader({
194195
<div className="flex items-center gap-2">
195196
<CalendarIcon className="size-5 text-sec-darker dark:text-sec-light/90 sm:size-6" />
196197
<time dateTime={event.event_start}>
197-
{new Date(event.event_start).toLocaleDateString("en-US", {
198+
{new Date(event.event_start).toLocaleString("en-US", {
198199
day: "numeric",
199200
month: "long",
200201
})}
202+
{", "}
203+
{formatBlockTime(
204+
event.event_start,
205+
event.event_end ? new Date(event.event_end) : undefined,
206+
)}
201207
</time>
202208
</div>
203209
<div className="flex items-center gap-2">
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { parseISO } from "date-fns"
2+
3+
const timeFormat = new Intl.DateTimeFormat(undefined, {
4+
hour: "2-digit",
5+
minute: "2-digit",
6+
})
7+
export const formatBlockTime = (start: string, end?: Date) => {
8+
const startDate = parseISO(start)
9+
if (end) {
10+
return timeFormat.formatRange(startDate, end).replace("AM –", "–")
11+
}
12+
return timeFormat.format(startDate)
13+
}

0 commit comments

Comments
 (0)