Skip to content

Commit c73e9d8

Browse files
committed
Singapore: embed FOST schedule on the page
Reproduce the three GraphQL track talks (titles, descriptions, speakers, times) from the FOST portal directly on /day/2026/singapore so visitors no longer need to leave the site to see what was on. Layout mirrors the GraphQLConf schedule detail page: speaker → big title → date/venue/tag row → split "Session description" → speaker card. Hero and bottom CTA buttons now anchor to #schedule. Footer link in the shared /day layout switches from "Singapore Tickets" to "Singapore Schedule" pointing at the same anchor. Speaker avatars are downloaded, optimized to webp, and colocated under singapore/speakers/.
1 parent e13967b commit c73e9d8

7 files changed

Lines changed: 370 additions & 6 deletions

File tree

src/app/day/2026/singapore/page.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import { MarqueeRows } from "@/app/conf/2026/components/marquee-rows"
1010
import { PastSpeakersSection } from "../components/past-speakers"
1111
import { NavbarPlaceholder } from "../components/navbar"
1212
import { GallerySection } from "../../gallery-section"
13+
import { ScheduleSection } from "./schedule-section"
1314

14-
const SCHEDULE_LINK =
15-
"https://portal.joinfost.io/event/future-of-software-technologies-singapore-2026/9521470b-6661-4c85-8594-b74d9d7cf2e3/graphql-day-at-fost-singapore#tab-content-program"
15+
const SCHEDULE_ANCHOR = "#schedule"
1616

1717
const MARQUEE_ITEMS = [
1818
["SINGAPORE", "APRIL 2026", "GRAPHQL DAY", "FOST", "COMMUNITY", "APIs"],
@@ -42,7 +42,10 @@ export default function SingaporePage() {
4242
location="Singapore"
4343
/>
4444
<div className="flex flex-wrap items-center gap-x-4 gap-y-2 max-sm:*:flex-1">
45-
<Button href={SCHEDULE_LINK} className="whitespace-nowrap md:w-fit">
45+
<Button
46+
href={SCHEDULE_ANCHOR}
47+
className="whitespace-nowrap md:w-fit"
48+
>
4649
View the schedule
4750
</Button>
4851
</div>
@@ -54,6 +57,7 @@ export default function SingaporePage() {
5457
items={MARQUEE_ITEMS}
5558
/>
5659
<div className="gql-container gql-conf-navbar-strip text-neu-900 before:bg-white/40 before:dark:bg-blk/30">
60+
<ScheduleSection />
5761
<WhyAttendSection />
5862
<PastSpeakersSection />
5963
<EventPartnersSection />
@@ -63,7 +67,7 @@ export default function SingaporePage() {
6367
description="Catch up on the talks, descriptions, and speakers from GraphQL Day @ FOST Singapore."
6468
>
6569
<Button
66-
href={SCHEDULE_LINK}
70+
href={SCHEDULE_ANCHOR}
6771
variant="primary"
6872
className="whitespace-nowrap"
6973
>
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import type { StaticImageData } from "next/image"
2+
3+
import akshatSharmaAvatar from "./speakers/akshat-sharma.webp"
4+
import michaelStaibAvatar from "./speakers/michael-staib.webp"
5+
import pascalSennAvatar from "./speakers/pascal-senn.webp"
6+
7+
export interface SingaporeSpeaker {
8+
id: number
9+
name: string
10+
company: string
11+
jobtitle: string
12+
avatar: StaticImageData
13+
}
14+
15+
export interface SingaporeSession {
16+
id: number
17+
uuid: string
18+
title: string
19+
/** ISO 8601 in venue local time, Asia/Singapore */
20+
start: string
21+
/** ISO 8601 in venue local time, Asia/Singapore */
22+
end: string
23+
type: string
24+
/** HTML */
25+
description: string
26+
venue: string
27+
speakers: SingaporeSpeaker[]
28+
}
29+
30+
export const SINGAPORE_TIMEZONE = "Asia/Singapore"
31+
32+
export const singaporeSessions: SingaporeSession[] = [
33+
{
34+
id: 3224,
35+
uuid: "80952503-07dd-4e31-acaf-b9e400f55126",
36+
title: "Securing GraphQL at Scale with Zero Trust APIs",
37+
start: "2026-04-15T15:55:00+08:00",
38+
end: "2026-04-15T16:20:00+08:00",
39+
type: "Talk",
40+
description:
41+
"<p>Modern microservice architectures often decentralize authentication and authorization, leading to inconsistent security policies and increased attack surfaces. GraphQL, while powerful, introduces unique risks such as over-fetching, query batching abuse, and introspection-based attacks that many teams underestimate.</p>\n<p>In this talk, I present a real-world case study of building a secure, identity-aware GraphQL gateway that enforces Zero Trust principles across distributed services. By integrating centralized identity management with Keycloak and leveraging service mesh technologies like Istio and Envoy, we created a unified layer for authentication, authorization, and traffic governance.</p>\n<p>The session will walk through practical challenges, including enforcing fine-grained access control, implementing query cost analysis, and mitigating abuse patterns in production. Attendees will gain insights into designing secure GraphQL APIs that scale without compromising performance or developer experience.</p>\n<p>This talk matters because API security is no longer optional. As organizations increasingly adopt GraphQL, understanding how to secure it in real-world systems is critical to preventing data leaks and maintaining trust.</p>\n",
42+
venue: "Stage 3",
43+
speakers: [
44+
{
45+
id: 4557,
46+
name: "Akshat Sharma",
47+
company: "Deskree",
48+
jobtitle: "Technology Advocate",
49+
avatar: akshatSharmaAvatar,
50+
},
51+
],
52+
},
53+
{
54+
id: 3225,
55+
uuid: "2a24223a-16d0-40fa-821b-b91c491ff9a6",
56+
title: "GraphQL as the Execution Layer for AI Agents",
57+
start: "2026-04-15T16:20:00+08:00",
58+
end: "2026-04-15T16:45:00+08:00",
59+
type: "Talk",
60+
description:
61+
"<p>Your next million API consumers won't be developers. They'll be AI agents. And they don't read documentation, parse hypermedia links, or guess which of your 200 REST endpoints returns the data they need.</p>\n<p>This talk examines what happens when autonomous AI agents become the primary consumers of your API layer. Drawing on real data from Singapore's public government APIs, I'll show how REST responses waste 30–60% of an agent's token budget on structural overhead, and how a typed, self-describing schema changes the equation entirely.</p>\n<p>We'll walk through the three properties that make an API truly agent-native: discoverability, precision, and composability. We'll look at what it would take to unify API estates like Singapore's 3,000+ government APIs across 75+ agencies into a single, self-describing surface. A pattern Gartner expects 30% of enterprises to adopt by 2027.</p>\n<p>You'll leave with a framework for what makes an API truly agent-native, why GraphQL's type system and federation model get you there, and how to start without a rewrite.</p>\n",
62+
venue: "Stage 3",
63+
speakers: [
64+
{
65+
id: 2446,
66+
name: "Pascal Senn",
67+
company: "ChilliCream",
68+
jobtitle: "Founder",
69+
avatar: pascalSennAvatar,
70+
},
71+
],
72+
},
73+
{
74+
id: 3226,
75+
uuid: "02d9d427-d1ff-4f78-8d8c-243565d0f1cd",
76+
title:
77+
"Closing the Loop: How GraphQL Gives Coding Agents Eyes on What Actually Matters",
78+
start: "2026-04-15T16:45:00+08:00",
79+
end: "2026-04-15T17:10:00+08:00",
80+
type: "Talk",
81+
description:
82+
"<p>Coding agents are reshaping how we build software. Implementing features, refactoring systems, and shipping changes at a pace unthinkable 6 months ago. But to be successful with agents you need the right feedback loop. One that guides your agent to success, not into the spiral of death.</p>\n<p>Ask Claude to add a review system to your product API. Without knowing what's in use, it might reshape your types, move fields, and break your deployed clients because it is missing a crucial feedback loop of what's in use in your clients.</p>\n<p>GraphQL changes this. Every client operation explicitly declares the exact fields and types it needs. That gives you something rare: field-level usage data across your entire consumer base. Not endpoint hits, but actual demand, broken down to the individual field.</p>\n<p>When coding agents can access this data, they stop guessing. Evolve your schema grounded in reality, not assumptions.</p>\n<p>This talk shows how GraphQL's inherent usage visibility and the rise of coding agents create a feedback loop that didn't exist before. And why it matters for anyone building APIs that need to evolve fast.</p>\n",
83+
venue: "Stage 3",
84+
speakers: [
85+
{
86+
id: 1881,
87+
name: "Michael Staib",
88+
company: "ChilliCream",
89+
jobtitle: "Founder",
90+
avatar: michaelStaibAvatar,
91+
},
92+
],
93+
},
94+
]

0 commit comments

Comments
 (0)