Skip to content
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
9 changes: 9 additions & 0 deletions src/app/(main)/community/events/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@ export const events: Event[] = [
host: "FOST & GraphQL Community",
hostLink: "https://www.joinfost.io",
},
{
name: "GraphQL Day at FOST Bengaluru",
slug: "graphql-day-fost-bengaluru-2026",
location: "Bengaluru",
date: "2026-08-19T09:00:00+05:30",
eventLink: "/day/2026/bengaluru",
host: "FOST & GraphQL Community",
hostLink: "https://www.joinfost.io",
},
{
name: "WG Day 2026",
slug: "wg-day-2026",
Expand Down
90 changes: 90 additions & 0 deletions src/app/day/2026/bengaluru/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import { Metadata } from "next"

import { Button } from "@/app/conf/_design-system/button"
import { Hero, HeroDateAndLocation } from "../components/hero"
import { AboutSection } from "../components/about-section"
import { WhyAttendSection } from "../components/why-attend-section"
import {
BecomeASpeakerSection,
CfpButton,
} from "../components/become-a-speaker"
import { EventPartnersSection } from "../components/event-partners"
import { CtaCardSection } from "../components/cta-card-section"
import { MarqueeRows } from "@/app/conf/2026/components/marquee-rows"
import { PastSpeakersSection } from "../components/past-speakers"
import { NavbarPlaceholder } from "../components/navbar"
import { GallerySection } from "../../gallery-section"

const CFP_LINK = "https://confengine.com/conferences/apidays-india-2026"

const MARQUEE_ITEMS = [
["BENGALURU", "AUGUST 2026", "GRAPHQL DAY", "FOST", "COMMUNITY", "APIs"],
[
"OPEN SOURCE",
"WORKSHOPS",
"FEDERATION",
"DEVELOPER EXPERIENCE",
"GRAPHQL DAY",
"BENGALURU",
],
]

export const metadata: Metadata = {
title: "GraphQL Day @ FOST BENGALURU — Aug 19-20",
}

export default function BengaluruPage() {
return (
<>
<NavbarPlaceholder className="top-0 bg-neu-100 before:bg-white/30 dark:bg-neu-50/50 dark:before:bg-blk/40" />
<main className="gql-all-anchors-focusable">
<Hero subtitle="@ FOST Bengaluru" colorScheme="neutral">
<HeroDateAndLocation
date="Aug 19-20, 2026"
dateTime="2026-08-19"
location="Conrad Bengaluru, India"
/>
<div className="flex flex-wrap items-center gap-x-4 gap-y-2 max-sm:*:flex-1">
<Button disabled className="whitespace-nowrap opacity-55 md:w-fit">
Tickets coming soon
</Button>
<CfpButton
cfpLink={CFP_LINK}
className="whitespace-nowrap md:w-fit"
/>
</div>
</Hero>
<AboutSection />
<MarqueeRows
variant="primary"
className="z-10 bg-neu-0 py-4 max-sm:pb-1 sm:py-6 md:space-y-2 md:py-12"
items={MARQUEE_ITEMS}
/>
<div className="gql-container gql-conf-navbar-strip text-neu-900 before:bg-white/40 before:dark:bg-blk/30">
<WhyAttendSection />
<BecomeASpeakerSection cfpLink={CFP_LINK} />
<PastSpeakersSection />
<EventPartnersSection />
<GallerySection moving />
<CtaCardSection
title="Stay tuned"
description="Join us for a day of GraphQL talks, networking, and hands-on learning at FOST Bengaluru."
>
<Button
disabled
variant="primary"
className="whitespace-nowrap opacity-55"
>
Tickets coming soon
</Button>
</CtaCardSection>
<MarqueeRows
variant="secondary"
className="my-8 xl:mb-16 xl:mt-10"
items={MARQUEE_ITEMS}
/>
</div>
</main>
</>
)
}
14 changes: 11 additions & 3 deletions src/app/day/2026/components/become-a-speaker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,26 @@ import { Button } from "@/app/conf/_design-system/button"

const CFP_LINK = "https://forms.gle/M1kiuvwK2wLJyNzi9"

export function CfpButton({ className }: { className?: string }) {
export function CfpButton({
className,
cfpLink,
}: {
className?: string
cfpLink?: string
}) {
return (
<Button href={CFP_LINK} className={className}>
<Button href={cfpLink || CFP_LINK} className={className}>
Submit a talk
</Button>
)
}

export function BecomeASpeakerSection({
cfpDeadline,
cfpLink,
}: {
cfpDeadline?: string
cfpLink?: string
}) {
return (
<section className="gql-section xl:py-12">
Expand All @@ -36,7 +44,7 @@ export function BecomeASpeakerSection({
{cfpDeadline && (
<p className="typography-body-lg">The CFP closes on {cfpDeadline}.</p>
)}
<CfpButton className="whitespace-nowrap md:w-fit" />
<CfpButton cfpLink={cfpLink} className="whitespace-nowrap md:w-fit" />
</div>
</section>
)
Expand Down
8 changes: 8 additions & 0 deletions src/app/day/events-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ export const EVENTS: EventMapItem[] = [
lon: 4.9041,
lat: 52.3676,
},
{
id: "bengaluru",
city: "Bengaluru",
date: "Aug 19-20",
href: "/day/2026/bengaluru",
lon: 77.5946,
lat: 12.9716,
},
{
id: "melbourne",
city: "Melbourne",
Expand Down
6 changes: 3 additions & 3 deletions src/app/day/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ import { NavbarPlaceholder } from "./2026/components/navbar"
import fostLogo from "./2026/assets/fost-logo.avif"
import { GallerySection } from "./gallery-section"

const NUMBER_OF_CITIES_SPELLED_OUT = "four"
const NUMBER_OF_CITIES_SPELLED_OUT = "six"
if (process.env.NODE_ENV === "development") {
if (EVENTS.length !== 4)
if (EVENTS.length !== 6)
throw new Error(
"EVENTS is expected to be 4, please update the NUMBER_OF_CITIES_SPELLED_OUT variable",
"EVENTS is expected to be 6, please update the NUMBER_OF_CITIES_SPELLED_OUT variable",
)
}

Expand Down
Loading