Skip to content

Commit 003878b

Browse files
committed
Add missing pictures and improve styling
1 parent 0284e4b commit 003878b

9 files changed

Lines changed: 67 additions & 40 deletions

File tree

8.31 KB
Loading
9.61 KB
Loading
10.2 KB
Loading
13.9 KB
Loading
22.2 KB
Loading

src/app/day/2026/components/past-speakers.tsx

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import benjaminImg from "../assets/speakers/benjamin-coenen.webp"
1515
import jensImg from "../assets/speakers/jens-neuse.webp"
1616
import pascalImg from "../assets/speakers/pascal-senn.webp"
1717
import matthiasImg from "../assets/speakers/matthias-le-brun.webp"
18+
import aurelienImg from "../assets/speakers/aurelien-david.webp"
19+
import anImg from "../assets/speakers/an-ngo.webp"
20+
import jonathanImg from "../assets/speakers/jonathan-rainer.webp"
21+
import vanessaImg from "../assets/speakers/vanessa-johnson.webp"
1822

1923
interface PastSpeaker {
2024
name: string
@@ -57,11 +61,13 @@ const PAST_SPEAKERS: PastSpeaker[] = [
5761
{
5862
name: "Aurélien David",
5963
role: "Co-founder & CTO, Pennylane",
64+
avatar: aurelienImg,
6065
link: "https://www.linkedin.com/in/aurel-spyl/",
6166
},
6267
{
6368
name: "An Ngo",
6469
role: "Lead Engineer, bol",
70+
avatar: anImg,
6571
link: "https://www.linkedin.com/in/vliegveld5/",
6672
},
6773
{
@@ -85,48 +91,59 @@ const PAST_SPEAKERS: PastSpeaker[] = [
8591
{
8692
name: "Vanessa Johnson",
8793
role: "Android Engineer, The New York Times",
94+
avatar: vanessaImg,
8895
link: "https://www.linkedin.com/in/vanessa-johnson999/",
8996
},
9097
{
9198
name: "Jonathan Rainer",
9299
role: "Staff Engineer, Apollo GraphQL",
100+
avatar: jonathanImg,
93101
link: "https://www.linkedin.com/in/jonathan-rainer/",
94102
},
95103
]
96104

97105
const ROW_1 = PAST_SPEAKERS.slice(0, 6)
106+
ROW_1.push(...ROW_1)
98107
const ROW_2 = PAST_SPEAKERS.slice(6)
108+
ROW_2.push(...ROW_2)
99109

100110
export function PastSpeakersSection() {
101111
return (
102-
<section className="py-8 xl:py-12">
112+
<section className="gql-container py-8 xl:py-12 3xl:[mask-image:linear-gradient(to_right,transparent,black_5%,black_95%,transparent)]">
103113
<div className="px-4 lg:px-12 xl:px-24">
104114
<h3 className="typography-h2 mb-2">Past Speakers</h3>
105115
<p className="typography-body-md mb-8 text-neu-700">
106116
GraphQL Day Paris 2025
107117
</p>
108118
</div>
109-
<div className="flex flex-col gap-4 overflow-hidden">
110-
<Marquee speed={30} speedOnHover={15} gap={0}>
119+
<div className="flex flex-col overflow-hidden">
120+
<Marquee speed={25} speedOnHover={12} gap={0}>
111121
{ROW_1.map(s => (
112122
<PastSpeakerCard key={s.name} {...s} />
113123
))}
114124
</Marquee>
115125
<Marquee speed={25} speedOnHover={12} gap={0} reverse>
116126
{ROW_2.map(s => (
117-
<PastSpeakerCard key={s.name} {...s} />
127+
<PastSpeakerCard key={s.name} {...s} className="border-t-0" />
118128
))}
119129
</Marquee>
120130
</div>
121131
</section>
122132
)
123133
}
124134

125-
function PastSpeakerCard({ name, role, avatar, link }: PastSpeaker) {
135+
function PastSpeakerCard({
136+
name,
137+
role,
138+
avatar,
139+
link,
140+
className,
141+
}: PastSpeaker & { className?: string }) {
126142
return (
127143
<article
128144
className={clsx(
129-
"group relative w-[300px] shrink-0 overflow-hidden border border-r-0 border-neu-200 bg-neu-0 @container dark:border-neu-100",
145+
"group relative w-[300px] shrink-0 overflow-hidden border border-r-0 border-neu-200 bg-neu-0 @container",
146+
className,
130147
styles.speakerCard,
131148
)}
132149
>

src/app/day/events-map.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const markerPoints: MarkerPoint[] = EVENTS.map(e => ({
4141

4242
type MapStatus = "loading" | "ready" | "error"
4343

44-
export function EventsMap() {
44+
export function EventsMap({ children }: { children: React.ReactNode }) {
4545
const canvasRef = useRef<HTMLCanvasElement>(null)
4646
const handleRef = useRef<MapHandle>()
4747
const { resolvedTheme } = useTheme()
@@ -187,15 +187,15 @@ export function EventsMap() {
187187
activeEventId={activeEventId}
188188
/>
189189

190-
<InfoTip />
191-
192190
<MapSkeleton className={status === "loading" ? "" : "!opacity-0"} />
193191

194192
{status === "error" && (
195193
<div className="pointer-events-none absolute inset-0 flex items-center justify-center text-center text-sm text-neu-600">
196194
Unable to load the map{errorMessage ? ` (${errorMessage})` : ""}
197195
</div>
198196
)}
197+
198+
{children}
199199
</div>
200200
</div>
201201
)
@@ -223,11 +223,3 @@ function EventMapTooltip({
223223
</span>
224224
)
225225
}
226-
227-
function InfoTip() {
228-
return (
229-
<div className="pointer-events-none absolute bottom-0 left-0 w-fit translate-y-0.5 px-1 py-0.5 text-[11px] text-neu-700/90 opacity-0 blur-[0.5px] backdrop-blur-sm transition-[transform,opacity,filter] duration-200 ease-out before:inset-0 before:bg-[--sea] before:opacity-30 group-hover/map:translate-y-0 group-hover/map:opacity-100 group-hover/map:blur-0 hover-none:hidden">
230-
Pinch or ctrl+scroll to zoom
231-
</div>
232-
)
233-
}

src/app/day/layout.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,17 @@ export default function DayLayout({
2828
<Navbar
2929
links={[
3030
{ children: "All GraphQL Events", href: "/community/events/" },
31-
{ children: "GraphQL.org", href: "/" },
3231
{ children: "GraphQLConf", href: "/conf/2026" },
3332
{
3433
children: "GraphQL Day Singapore",
35-
href: "https://portal.joinfost.io/event/future-of-software-technologies-singapore-2026/9521470b-6661-4c85-8594-b74d9d7cf2e3/graphql-day-at-fost-singapore",
34+
href: "/day/2026/singapore",
3635
},
3736
]}
3837
/>
3938
<ThemeProvider attribute="class">
40-
<div className="bg-neu-0 text-neu-900 antialiased">{children}</div>
39+
<div className="gql-all-anchors-focusable bg-neu-0 text-neu-900 antialiased">
40+
{children}
41+
</div>
4142
</ThemeProvider>
4243
<Footer
4344
logo={<GraphQLDayLogoLink />}
@@ -58,6 +59,7 @@ export default function DayLayout({
5859
href: "https://www.futureofsoftwaretechnologies.com/manifesto",
5960
},
6061
{ children: "All GraphQL Events", href: "/community/events/" },
62+
// todo: we need to find a better link to use here. the .day website will probably be updated to redirect to this or match this.
6163
{ children: "GraphQL Day Paris 2025", href: "https://graphql.day" },
6264
]}
6365
/>

src/app/day/page.tsx

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import {
99
import { EventsMap } from "./events-map"
1010
import { EVENTS } from "./events-data"
1111
import { PastSpeakersSection } from "./2026/components/past-speakers"
12+
import { NavbarPlaceholder } from "./2026/components/navbar"
13+
import fostLogo from "./2026/assets/fost-logo.svg"
14+
import Image from "next/image"
1215

1316
export const metadata: Metadata = {
1417
title: "GraphQL Day 2026",
@@ -19,36 +22,49 @@ export const metadata: Metadata = {
1922
export default function DayIndexPage() {
2023
return (
2124
<>
25+
<NavbarPlaceholder className="top-0 bg-[#FBFCF4] before:bg-[#FBFCF4]/30 dark:bg-[#181A12] dark:before:bg-blk/40" />
2226
<header
23-
className="relative bg-[--sea] [--sea:--sea-light] dark:[--sea:--sea-dark]"
27+
className="bg-[--sea] [--sea:--sea-light] dark:[--sea:--sea-dark]"
2428
style={
2529
{
2630
"--sea-dark": asRgbString(MAP_COLORS.dark.sea),
2731
"--sea-light": asRgbString(MAP_COLORS.light.sea),
2832
} as React.CSSProperties
2933
}
3034
>
31-
{/* Mobile: map full width, text overlaid */}
32-
{/* Desktop: map right-aligned at 75%, text on left */}
33-
<div className="relative lg:ml-auto lg:w-3/4">
34-
<EventsMap />
35-
{/* Gradient fade — bottom-up on mobile, left-to-right on desktop */}
36-
{/* eslint-disable-next-line tailwindcss/no-contradicting-classname */}
37-
<div className="pointer-events-none absolute inset-0 z-10 bg-gradient-to-t from-[--sea] via-[hsl(var(--sea)/0.6)] via-40% to-transparent lg:bg-gradient-to-r lg:from-[--sea] lg:via-[hsl(var(--sea)/0.4)] lg:via-30% lg:to-transparent" />
38-
</div>
39-
<div className="gql-container pointer-events-none absolute inset-0 z-20 flex flex-col justify-end px-4 lg:justify-center lg:px-12 xl:px-24">
40-
<div className="pointer-events-auto pb-8 pt-20 md:pb-12 lg:max-w-md lg:py-0 xl:max-w-2xl">
41-
<h1 className="typography-d1 mb-4 text-neu-900">GraphQL Day</h1>
42-
<p className="typography-body-lg text-neu-700 dark:text-neu-200">
43-
Community-organized GraphQL events at FOST conferences worldwide.
44-
</p>
35+
<div className="gql-container relative isolate">
36+
<EventsMap>
37+
<div className="pointer-events-none absolute inset-0 z-10 bg-gradient-to-t from-[--sea] to-transparent lg:bg-gradient-to-r lg:from-[--sea] lg:to-transparent lg:to-40%" />
38+
</EventsMap>
39+
<div className="gql-container pointer-events-none absolute inset-0 z-20 flex flex-col justify-end px-4 lg:justify-center lg:px-12 xl:px-24">
40+
<div className="pointer-events-auto pb-8 pt-20 md:pb-12 lg:max-w-md lg:py-0 xl:max-w-2xl">
41+
<h1 className="typography-d1 mb-4 text-neu-900">GraphQL Day</h1>
42+
<p className="typography-body-lg text-neu-700 dark:text-neu-400">
43+
Community-organized GraphQL events at FOST conferences
44+
worldwide.
45+
</p>
46+
<a
47+
href="https://www.joinfost.io"
48+
target="_blank"
49+
rel="noopener noreferrer"
50+
className="mt-8"
51+
>
52+
<Image src={fostLogo.src} alt="FOST" width={120} height={40} />
53+
</a>
54+
</div>
4555
</div>
4656
</div>
4757
</header>
4858

49-
<main className="gql-container px-4 pb-12 md:pb-20 lg:px-12 xl:px-24">
50-
<h2 className="typography-h2 mb-8 mt-6 md:mt-12">2026 Events</h2>
51-
<div className="flex flex-col gap-4">
59+
<main className="gql-container gql-section">
60+
<h2 className="typography-h2 my-6 md:mt-12">GraphQL Days in 2026</h2>
61+
<p className="typography-body-md text-neu-700 dark:text-neu-400">
62+
Started in Paris. Now in{" "}
63+
{Intl.NumberFormat("en-US").format(EVENTS.length)} cities worldwide.
64+
Whether you're deep in production or just getting started, this is
65+
your chance to connect, share best practices, and see what's new.
66+
</p>
67+
<div className="mt-8 flex flex-col gap-4">
5268
{EVENTS.map(event => (
5369
<NextLink
5470
key={event.href}
@@ -69,9 +85,9 @@ export default function DayIndexPage() {
6985
</NextLink>
7086
))}
7187
</div>
72-
73-
<PastSpeakersSection />
7488
</main>
89+
90+
<PastSpeakersSection />
7591
</>
7692
)
7793
}

0 commit comments

Comments
 (0)