Skip to content

graphqlconf 2025 — schedule improvements #2039

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jun 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion scripts/sync-sched/schedule-2025.json
Original file line number Diff line number Diff line change
Expand Up @@ -894,7 +894,7 @@
"event_end": "2025-09-08 14:55",
"event_type": "GraphQL in Production",
"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.",
"goers": "0",
"goers": "1",
"seats": "0",
"invite_only": "N",
"venue": "Studio",
Expand Down
82 changes: 48 additions & 34 deletions scripts/sync-sched/speakers.json
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036945383
},
{
"username": "christian.ernst",
Expand Down Expand Up @@ -843,7 +843,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "danielle.man",
Expand Down Expand Up @@ -905,11 +905,20 @@
"location": "",
"url": "",
"avatar": "//avatars.sched.co/3/1e/23098735/avatar.jpg.320x320px.jpg?7a3",
"socialurls": [],
"socialurls": [
{
"service": "Twitter",
"url": "https://x.com/dotansimha"
},
{
"service": "LinkedIn",
"url": "https://www.linkedin.com/in/dotan-simha-36767b29/"
}
],
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "dotansimha",
Expand Down Expand Up @@ -944,7 +953,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "eitan15",
Expand Down Expand Up @@ -1071,7 +1080,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "fionabronwen",
Expand Down Expand Up @@ -1106,7 +1115,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "gabrielschulhof",
Expand Down Expand Up @@ -1228,7 +1237,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "hello2358",
Expand Down Expand Up @@ -1308,7 +1317,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "jamie855",
Expand Down Expand Up @@ -1362,7 +1371,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "jared_cheney.7rad60v",
Expand Down Expand Up @@ -1439,11 +1448,16 @@
"location": "",
"url": "",
"avatar": "//avatars.sched.co/3/b5/23098759/avatar.jpg.320x320px.jpg?613",
"socialurls": [],
"socialurls": [
{
"service": "LinkedIn",
"url": "https://linkedin.com/in/jeffdolle"
}
],
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "jens63",
Expand Down Expand Up @@ -1482,7 +1496,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036922058
},
{
"username": "jesperrasmussen",
Expand Down Expand Up @@ -1541,7 +1555,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "jordaneldredge",
Expand Down Expand Up @@ -1580,7 +1594,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "juancarlosjr97",
Expand All @@ -1604,7 +1618,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036945383
},
{
"username": "kamilkisiela",
Expand Down Expand Up @@ -1634,7 +1648,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "keerthan.ekbote",
Expand Down Expand Up @@ -1781,7 +1795,7 @@
"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.",
"location": "",
"url": "https://the-guild.dev/",
"avatar": "//avatars.sched.co/2/a6/18743819/avatar.jpg.320x320px.jpg?705",
"avatar": "//avatars.sched.co/2/a6/18743819/avatar.jpg.320x320px.jpg?ebc",
"socialurls": [
{
"service": "Twitter",
Expand All @@ -1797,7 +1811,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "ldebruijn",
Expand Down Expand Up @@ -1833,7 +1847,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "lee_byron.25krdom6",
Expand Down Expand Up @@ -1887,7 +1901,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036941512
},
{
"username": "lyonwj1",
Expand Down Expand Up @@ -1936,7 +1950,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "mail1232",
Expand All @@ -1951,7 +1965,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036941512
},
{
"username": "mansi.mittal",
Expand Down Expand Up @@ -2026,7 +2040,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "martinbonnin42",
Expand Down Expand Up @@ -2156,7 +2170,7 @@
2023,
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036945383
},
{
"username": "mgiroux7",
Expand Down Expand Up @@ -2206,7 +2220,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036945383
},
{
"username": "michael.astle",
Expand Down Expand Up @@ -2291,7 +2305,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036945383
},
{
"username": "patrick.arminio",
Expand Down Expand Up @@ -2505,7 +2519,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181396120
"~syncedDetailsAt": 1751036945383
},
{
"username": "robrichard87",
Expand All @@ -2521,7 +2535,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181915102
"~syncedDetailsAt": 1751036945383
},
{
"username": "ruben.cagnie",
Expand Down Expand Up @@ -2552,7 +2566,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181953774
"~syncedDetailsAt": 1751036945383
},
{
"username": "saihaj",
Expand Down Expand Up @@ -2614,7 +2628,7 @@
"position": "Senior Software Engineer 2",
"name": "Sanver Tarmur",
"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.",
"location": "",
"location": "Amsterdam",
"url": "",
"avatar": "//avatars.sched.co/0/9e/23098798/avatar.jpg.320x320px.jpg?318",
"socialurls": [],
Expand Down Expand Up @@ -2856,7 +2870,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181966765
"~syncedDetailsAt": 1751036945383
},
{
"username": "stefan239",
Expand Down Expand Up @@ -3142,7 +3156,7 @@
2024,
2025
],
"~syncedDetailsAt": 1750181973559
"~syncedDetailsAt": 1751036945383
},
{
"username": "vincent.desmares",
Expand Down Expand Up @@ -3192,7 +3206,7 @@
"_years": [
2025
],
"~syncedDetailsAt": 1750181396119
"~syncedDetailsAt": 1751036941512
},
{
"username": "watson17",
Expand Down
8 changes: 7 additions & 1 deletion src/app/conf/2025/schedule/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { CtaCardSection } from "../../components/cta-card-section"
import { Button } from "@/app/conf/_design-system/button"
import { SessionTags } from "../../components/session-tags"
import { formatDescription } from "./format-description"
import { formatBlockTime } from "../_components/format-block-time"

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

Expand Down Expand Up @@ -194,10 +195,15 @@ function SessionHeader({
<div className="flex items-center gap-2">
<CalendarIcon className="size-5 text-sec-darker dark:text-sec-light/90 sm:size-6" />
<time dateTime={event.event_start}>
{new Date(event.event_start).toLocaleDateString("en-US", {
{new Date(event.event_start).toLocaleString("en-US", {
day: "numeric",
month: "long",
})}
{", "}
{formatBlockTime(
event.event_start,
event.event_end ? new Date(event.event_end) : undefined,
)}
</time>
</div>
<div className="flex items-center gap-2">
Expand Down
13 changes: 13 additions & 0 deletions src/app/conf/2025/schedule/_components/format-block-time.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { parseISO } from "date-fns"

const timeFormat = new Intl.DateTimeFormat(undefined, {
hour: "2-digit",
minute: "2-digit",
})
export const formatBlockTime = (start: string, end?: Date) => {
const startDate = parseISO(start)
if (end) {
return timeFormat.formatRange(startDate, end).replace("AM –", "–")
}
return timeFormat.format(startDate)
}
Loading