Skip to content

Commit 746546e

Browse files
committed
Singapore: schedule replaces bottom CTA, drops sub-headings
Schedule moves from above the fold to where the CTA card was — the bold final block on the page. Day heading and "Session description" / "Session speaker" labels removed; the descriptions and speaker cards read on their own. Hero "View the schedule" button still anchors to this section.
1 parent c73e9d8 commit 746546e

2 files changed

Lines changed: 14 additions & 66 deletions

File tree

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

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { Hero, HeroDateAndLocation } from "../components/hero"
55
import { AboutSection } from "../components/about-section"
66
import { WhyAttendSection } from "../components/why-attend-section"
77
import { EventPartnersSection } from "../components/event-partners"
8-
import { CtaCardSection } from "../components/cta-card-section"
98
import { MarqueeRows } from "@/app/conf/2026/components/marquee-rows"
109
import { PastSpeakersSection } from "../components/past-speakers"
1110
import { NavbarPlaceholder } from "../components/navbar"
@@ -57,23 +56,11 @@ export default function SingaporePage() {
5756
items={MARQUEE_ITEMS}
5857
/>
5958
<div className="gql-container gql-conf-navbar-strip text-neu-900 before:bg-white/40 before:dark:bg-blk/30">
60-
<ScheduleSection />
6159
<WhyAttendSection />
6260
<PastSpeakersSection />
6361
<EventPartnersSection />
6462
<GallerySection moving />
65-
<CtaCardSection
66-
title="View the schedule"
67-
description="Catch up on the talks, descriptions, and speakers from GraphQL Day @ FOST Singapore."
68-
>
69-
<Button
70-
href={SCHEDULE_ANCHOR}
71-
variant="primary"
72-
className="whitespace-nowrap"
73-
>
74-
View the schedule
75-
</Button>
76-
</CtaCardSection>
63+
<ScheduleSection />
7764
<MarqueeRows
7865
variant="secondary"
7966
className="my-8 xl:mb-16 xl:mt-10"

src/app/day/2026/singapore/schedule-section.tsx

Lines changed: 13 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import Image from "next/image"
22
import clsx from "clsx"
3-
import { format, parseISO } from "date-fns"
43

54
import { Tag } from "@/app/conf/_design-system/tag"
65
import { CalendarIcon } from "@/app/conf/_design-system/pixelarticons/calendar-icon"
@@ -28,14 +27,6 @@ const DATE_FORMAT = new Intl.DateTimeFormat("en-US", {
2827
})
2928

3029
export function ScheduleSection() {
31-
const sessionsByDay = new Map<string, SingaporeSession[]>()
32-
for (const session of singaporeSessions) {
33-
const day = session.start.slice(0, 10)
34-
const list = sessionsByDay.get(day) ?? []
35-
list.push(session)
36-
sessionsByDay.set(day, list)
37-
}
38-
3930
return (
4031
<section
4132
id="schedule"
@@ -49,20 +40,8 @@ export function ScheduleSection() {
4940
</p>
5041
</div>
5142

52-
{Array.from(sessionsByDay.entries()).map(([day, sessions], dayIdx) => (
53-
<div key={day}>
54-
<Hr className="mt-8 lg:mt-12" />
55-
<h3 className="typography-h3 px-2 pb-2 pt-8 text-neu-700 sm:px-3 lg:pt-12">
56-
{format(parseISO(day), "EEEE, MMMM d, yyyy")}
57-
</h3>
58-
{sessions.map((session, i) => (
59-
<SessionBlock
60-
key={session.id}
61-
session={session}
62-
isFirst={dayIdx === 0 && i === 0}
63-
/>
64-
))}
65-
</div>
43+
{singaporeSessions.map((session, i) => (
44+
<SessionBlock key={session.id} session={session} isFirst={i === 0} />
6645
))}
6746
</div>
6847
</section>
@@ -78,25 +57,21 @@ function SessionBlock({
7857
}) {
7958
return (
8059
<article>
81-
<Hr className={isFirst ? "mt-4" : "mt-12 lg:mt-16"} />
60+
<Hr className={isFirst ? "mt-8 lg:mt-12" : "mt-12 lg:mt-16"} />
8261
<SessionHeader session={session} className="px-2 pt-8 sm:px-3 lg:pt-12" />
8362
{session.description && (
84-
<>
85-
<Hr className="mt-10 2xl:mt-16" />
86-
<SessionDescription session={session} />
87-
</>
63+
<div
64+
className="typography-body-lg mt-8 flex flex-col gap-4 px-2 pb-8 sm:px-3 lg:mt-12 xl:pb-12 [&_a]:break-words"
65+
dangerouslySetInnerHTML={{
66+
__html: formatDescription(session.description),
67+
}}
68+
/>
8869
)}
8970
{session.speakers.length > 0 && (
90-
<>
91-
<Hr />
92-
<h4 className="typography-h2 my-8 max-w-[408px] px-2 sm:px-3 lg:my-12">
93-
Session {session.speakers.length === 1 ? "speaker" : "speakers"}
94-
</h4>
95-
<SessionSpeakers
96-
speakers={session.speakers}
97-
className="-mx-px -mb-px"
98-
/>
99-
</>
71+
<SessionSpeakers
72+
speakers={session.speakers}
73+
className="-mx-px -mb-px border-t border-neu-200 dark:border-neu-100"
74+
/>
10075
)}
10176
</article>
10277
)
@@ -146,20 +121,6 @@ function SessionHeader({
146121
)
147122
}
148123

149-
function SessionDescription({ session }: { session: SingaporeSession }) {
150-
return (
151-
<div className="mt-8 flex gap-4 px-2 pb-8 max-lg:flex-col sm:px-3 lg:mt-16 lg:gap-8 xl:pb-16">
152-
<h4 className="typography-h2 min-w-[320px]">Session description</h4>
153-
<div
154-
className="typography-body-lg flex flex-col gap-4 [&_a]:break-words"
155-
dangerouslySetInnerHTML={{
156-
__html: formatDescription(session.description),
157-
}}
158-
/>
159-
</div>
160-
)
161-
}
162-
163124
function SessionSpeakers({
164125
speakers,
165126
className,

0 commit comments

Comments
 (0)