@@ -4,13 +4,15 @@ import Image from "next-image-export-optimizer"
44import { Button } from "@/app/conf/_design-system/button"
55import { Accordion } from "@/app/conf/_design-system/accordion"
66
7+ import GraphQLFoundationWordmark from "../../assets/graphql-foundation-wordmark.svg?svgr"
78import { Hero , HeroStripes } from "../../components/hero"
89import { NavbarPlaceholder } from "../../components/navbar"
910import { CalendarIcon } from "../../../_design-system/pixelarticons/calendar-icon"
1011import { PinIcon } from "../../../_design-system/pixelarticons/pin-icon"
1112import { CtaCardSection } from "../../components/cta-card-section"
1213
1314import heroPhoto from "./hero-photo.webp"
15+ import { Anchor } from "../../../_design-system/anchor"
1416
1517export const metadata : Metadata = {
1618 title : "GraphQL Day at FOST" ,
@@ -21,8 +23,6 @@ const CFP_LINK =
2123const TICKETS_LINK =
2224 "https://ticket.apidays.global/event/apidays-paris-2025/3cccd07f-acb2-466e-8d91-cb1f208ecf42"
2325
24- const API_DAYS_COLOR = "#02B3B6"
25-
2626export default function ResourcesPage ( ) {
2727 return (
2828 < >
@@ -68,12 +68,12 @@ export default function ResourcesPage() {
6868 < main className = "gql-all-anchors-focusable gql-conf-navbar-strip text-neu-900 before:bg-white/40 before:dark:bg-blk/30" >
6969 < div className = "gql-container" >
7070 < AboutEventSection />
71- < WhatToExpectSection />
7271 < ExpertMeetupSection />
7372 < VenueAndLocationSection />
73+ < EventPartnersSection />
7474 </ div >
7575 < CtaCardSection
76- title = "Join the community "
76+ title = "Stay in the know "
7777 description = "Meet the experts, share best practices, and discover the latest innovations shaping the future of APIs."
7878 >
7979 < div className = "flex gap-4 max-sm:flex-col sm:items-center" >
@@ -107,16 +107,16 @@ function HeroDateAndLocation() {
107107
108108function AboutEventSection ( ) {
109109 return (
110- < section className = "gql-section flex gap-6 max-md:flex-col" >
111- < h3 className = "typography-h2 md:flex-1 " > About GraphQL Day </ h3 >
110+ < section className = "gql-section flex gap-6 bg-neu-100 max-md:flex-col xl:py-12 " >
111+ < h3 className = "typography-h2 md:flex-[.5] " > About</ h3 >
112112 < div className = "flex flex-col gap-6 md:flex-1" >
113113 < p className = "typography-body-lg" >
114114 Join us for a special GraphQL Day as part of the Future of Software
115- Week, co- located with API Days Paris. This focused event brings
115+ Week, co‑ located with API Days Paris. This focused event brings
116116 together GraphQL practitioners, innovators, and thought leaders for a
117117 day of deep technical discussions and hands-on learning.
118118 </ p >
119- < p className = "typography-body-lg" >
119+ < p className = "typography-body-lg text-pretty " >
120120 Whether you're already using GraphQL in production or just getting
121121 started, this is your opportunity to connect with the community, share
122122 best practices, and discover the latest developments in the GraphQL
@@ -127,60 +127,32 @@ function AboutEventSection() {
127127 )
128128}
129129
130- function WhatToExpectSection ( ) {
131- return (
132- < section className = "gql-section flex gap-6 max-md:flex-col" >
133- < h3 className = "typography-h2 md:flex-1" > What to expect</ h3 >
134- < ul className = "flex flex-col gap-6 uppercase md:flex-1" >
135- < ListItem number = "8+" text = "Expert talks" />
136- < ListItem number = "12+" text = "Speakers" />
137- < ListItem number = "3" text = "Lightning talks" />
138- < ListItem number = "2" text = "Panel discussions" />
139- < ListItem number = "300+" text = "Attendees" />
140- </ ul >
141- </ section >
142- )
143- }
144-
145- function ListItem ( { number, text } : { number : string | number ; text : string } ) {
146- return (
147- < li className = "list-none bg-gradient-to-r from-[#CDF27E] p-6 dark:from-[#507501]" >
148- < span className = "inline-block text-[72px]/none [text-box:trim-both_cap_alphabetic]" >
149- { number }
150- </ span > { " " }
151- < span className = "typography-menu mb-2 inline-block" > { text } </ span >
152- </ li >
153- )
154- }
155-
156130function ExpertMeetupSection ( ) {
157131 return (
158- < section className = "gql-section" >
159- < h3 className = "typography-h2 mb-12" >
160- Meet the experts, share your experience
161- </ h3 >
132+ < section className = "gql-section xl:py-12" >
133+ < h3 className = "typography-h2 mb-12" > Why attend GraphQL Day?</ h3 >
162134 < div className = "grid gap-8 md:grid-cols-2 lg:grid-cols-3" >
163- < ExpertCard
135+ < Card
164136 title = "Technical Deep Dives"
165137 description = "Learn advanced patterns, performance optimization techniques, and architectural decisions from teams running GraphQL at scale."
166138 />
167- < ExpertCard
139+ < Card
168140 title = "Best Practices Exchange"
169141 description = "Share your learnings and challenges with fellow practitioners. Discover how others solve common GraphQL problems."
170142 />
171- < ExpertCard
143+ < Card
172144 title = "Innovation Showcase"
173145 description = "Explore cutting-edge tools, upcoming features, and experimental approaches that are shaping GraphQL's future."
174146 />
175- < ExpertCard
147+ < Card
176148 title = "Community Building"
177149 description = "Connect with the European GraphQL community. Build relationships that extend beyond the conference."
178150 />
179- < ExpertCard
151+ < Card
180152 title = "Hands-on Learning"
181153 description = "Interactive sessions where you can experiment with new tools and techniques in real-time."
182154 />
183- < ExpertCard
155+ < Card
184156 title = "Q& A Sessions "
185157 description = "Direct access to library maintainers and core contributors. Get your specific questions answered."
186158 />
@@ -189,15 +161,9 @@ function ExpertMeetupSection() {
189161 )
190162}
191163
192- function ExpertCard ( {
193- title,
194- description,
195- } : {
196- title : string
197- description : string
198- } ) {
164+ function Card ( { title, description } : { title : string ; description : string } ) {
199165 return (
200- < article className = "flex flex-col gap-4 border border-neu-200 p-6 dark:border-neu-700 " >
166+ < article className = "flex flex-col gap-4 border border-neu-200 p-6" >
201167 < h4 className = "typography-h3" > { title } </ h4 >
202168 < p className = "typography-body-md text-neu-700 dark:text-neu-300" >
203169 { description }
@@ -208,7 +174,7 @@ function ExpertCard({
208174
209175function VenueAndLocationSection ( ) {
210176 return (
211- < section className = "gql-section" >
177+ < section className = "gql-section xl:py-12 " >
212178 < h3 className = "typography-h2 mb-12" > Venue & Location </ h3 >
213179 < div className = "flex gap-x-12 gap-y-10 max-lg:flex-col" >
214180 < article className = "flex flex-col gap-6 lg:flex-1" >
@@ -223,21 +189,19 @@ function VenueAndLocationSection() {
223189 </ p >
224190 < div className = "typography-body-lg" >
225191 < address className = "not-italic" >
226- Centre des nouvelles industries et technologies (CNIT)
192+ Centre des nouvelles industries et technologies
227193 < br />
228194 2 Pl. de la Défense
229195 < br />
230196 92800 Puteaux, France
231197 </ address >
232198 </ div >
233- < Button href = "https://maps.app.goo.gl/example" className = "w-fit" >
234- View on Google Maps
235- </ Button >
236199 </ article >
237200
238201 < div className = "lg:flex-1" >
239202 < h4 className = "typography-h3 mb-6" > Getting There</ h4 >
240203 < Accordion
204+ className = "lg:min-h-[327px]"
241205 items = { [
242206 {
243207 title : "By Metro/RER" ,
@@ -279,7 +243,7 @@ function VenueAndLocationSection() {
279243 </ div >
280244 </ div >
281245 < iframe
282- src = "https://www.google.com/maps/embed?pb=!1m14!1m8 !1m3!1d1311.5979270428409 !2d2.2390248 !3d48.8926045! 3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47e66502128aae1f%3A0xe5e22af4aa16ed38!2sWestfield%20CNIT!5e0!3m2!1sen!2spl!4v1756917405738 !5m2!1sen!2spl"
246+ src = "https://www.google.com/maps/embed?pb=!1m18!1m12 !1m3!1d57929.22297036571 !2d2.1992477079806285 !3d48.896253935132876!2m3!1f0!2f0!3f0! 3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47e66502128aae1f%3A0xe5e22af4aa16ed38!2sWestfield%20CNIT!5e0!3m2!1sen!2spl!4v1756923974711 !5m2!1sen!2spl"
283247 width = "100%"
284248 height = "450"
285249 allowFullScreen
@@ -290,3 +254,46 @@ function VenueAndLocationSection() {
290254 </ section >
291255 )
292256}
257+
258+ function EventPartnersSection ( ) {
259+ return (
260+ < section className = "gql-section" >
261+ < h3 className = "typography-h2 mb-12 text-center" > Event Partners</ h3 >
262+ < div className = "flex flex-col gap-8" >
263+ < div className = "text-center" >
264+ < div className = "flex items-center justify-center gap-12 max-md:flex-col md:gap-16" >
265+ < div className = "flex items-center justify-center" >
266+ < Anchor
267+ href = "https://www.apidays.global/events/paris"
268+ className = "p-8 hover:bg-neu-100"
269+ >
270+ < img
271+ src = "https://cdn.prod.website-files.com/67a0938d08d1902cd6974340/68112b11f6895235885793a7_Apidays%20logo%20v2.png"
272+ alt = "API Days"
273+ className = "h-24 w-auto object-contain invert dark:invert-0"
274+ />
275+ </ Anchor >
276+ </ div >
277+ < span className = "typography-h2 text-neu-400 lg:typography-d1 max-md:hidden" >
278+ &
279+ </ span >
280+ < div className = "flex items-center justify-center" >
281+ < Anchor
282+ href = "https://graphql.org/community/foundation/"
283+ className = "p-8 hover:bg-neu-100"
284+ >
285+ < GraphQLFoundationWordmark className = "h-24 w-auto [&_g]:fill-neu-900" />
286+ </ Anchor >
287+ </ div >
288+ </ div >
289+ </ div >
290+
291+ < p className = "typography-body-lg mx-auto max-w-2xl text-pretty text-center" >
292+ GraphQL Day is organized by API Days and GraphQL Foundation, as
293+ part of the Future of Software Week.
294+ { /* todo: link to some FOST page? */ }
295+ </ p >
296+ </ div >
297+ </ section >
298+ )
299+ }
0 commit comments