Skip to content
Open
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
Binary file added public/img/ambassadors/chanda-raj-kumar.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/ambassadors/giuseppe-abrignani.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/ambassadors/jayant-acharya.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/ambassadors/sabrina-wasserman.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 9 additions & 1 deletion src/components/ambassador-grid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ function buildRows(ambassador: Ambassador): InfoCardRow[] {
},
{
type: "label",
hideInConciseMode: true,
label:
ambassador.tags.length > 0 ? (
<div className="flex flex-wrap items-center gap-3">
Expand All @@ -39,14 +40,21 @@ function buildRows(ambassador: Ambassador): InfoCardRow[] {
]
}

export function AmbassadorGrid({ ambassadors }: { ambassadors: Ambassador[] }) {
export function AmbassadorGrid({
ambassadors,
concise,
}: {
ambassadors: Ambassador[]
concise?: boolean
}) {
return (
<div className="mx-auto mt-10 flex w-full max-w-6xl flex-wrap justify-center gap-8">
{ambassadors.map((ambassador, index) => (
<InfoCard
key={`${ambassador.label}-${index}`}
rows={buildRows(ambassador)}
className="h-full"
concise={concise}
/>
))}
</div>
Expand Down
247 changes: 245 additions & 2 deletions src/components/info-card/ambassador-data.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export interface Ambassador {
tags: AmbassadorTag[]
}

export const ambassadors: Ambassador[] = [
export const ambassadors202509: Ambassador[] = [
{
label: "Artur Czemiel",
imageUrl: "https://github.com/aexol.png",
Expand Down Expand Up @@ -227,7 +227,7 @@ export const ambassadors: Ambassador[] = [
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/jem-gillam-92063b14/",
url: "https://www.linkedin.com/in/jemgillam/",
icon: <LinkedInIcon className="size-5" />,
},
],
Expand Down Expand Up @@ -468,3 +468,246 @@ export const ambassadors: Ambassador[] = [
],
},
]

export const ambassadors202512: Ambassador[] = [
{
label: "An Ngo",
imageUrl: "https://github.com/vliegveld5.png",
alt: "An Ngo",
organization: "bol",
tags: [
{
label: "GitHub",
url: "https://github.com/vliegveld5",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/vliegveld5/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
{
label: "Aurélien David",
imageUrl: "https://github.com/spyl94.png",
alt: "Aurélien David",
organization: "Pennylane",
tags: [
{
label: "GitHub",
url: "https://github.com/spyl94/",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/aurel-spyl/",
icon: <LinkedInIcon className="size-5" />,
},
{
label: "Twitter",
url: "https://x.com/spyl94",
icon: <TwitterIcon className="size-5" />,
},
],
},
{
label: "Chanda Raj Kumar",
imageUrl: "/img/ambassadors/chanda-raj-kumar.jpg",
alt: "Chanda Raj Kumar",
organization: "KL University",
tags: [
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/chanda-raj-kumar-88799a1b3/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
{
label: "Derek Kuz",
imageUrl: "https://github.com/dariuszkuc.png",
alt: "Derek Kuz",
organization: "Apollo",
tags: [
{
label: "Bluesky",
url: "https://bsky.app/profile/dkuc.bsky.social",
icon: <Bluesky2Icon className="size-5" />,
},
{
label: "GitHub",
url: "https://github.com/dariuszkuc",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/dkuc/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
{
label: "Gil Gardosh",
imageUrl: "https://github.com/gilgardosh.png",
alt: "Gil Gardosh",
organization: "The Guild",
tags: [
{
label: "GitHub",
url: "https://github.com/gilgardosh/",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/gil-gardosh-9a5088a5/",
icon: <LinkedInIcon className="size-5" />,
},
{
label: "Twitter",
url: "https://x.com/gilgardosh",
icon: <TwitterIcon className="size-5" />,
},
],
},
{
label: "Giuseppe Abrignani",
imageUrl: "/img/ambassadors/giuseppe-abrignani.jpg",
alt: "Giuseppe Abrignani",
organization: "Oranj Tech",
tags: [
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/giuseppeabrignani/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
{
label: "Jayant Acharya",
imageUrl: "/img/ambassadors/jayant-acharya.jpg",
alt: "Jayant Acharya",
organization: "Techsophy",
tags: [
{
label: "GitHub",
url: "https://github.com/jayant99acharya",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/jayantacharya/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
{
label: "Laurin Quast",
imageUrl: " https://github.com/n1ru4l.png",
alt: "Laurin Quast",
organization: "The Guild",
tags: [
{
label: "GitHub",
url: " https://github.com/n1ru4l",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/laurin-quast-a47b871b4/",
icon: <LinkedInIcon className="size-5" />,
},
{
label: "Twitter",
url: "https://x.com/n1rual",
icon: <TwitterIcon className="size-5" />,
},
],
},
{
label: "Lenz Weber-Tronic",
imageUrl: "https://github.com/phryneas.png",
alt: "Lenz Weber-Tronic",
organization: "Apollo",
tags: [
{
label: "Bluesky",
url: "https://bsky.app/profile/phry.dev",
icon: <Bluesky2Icon className="size-5" />,
},
{
label: "GitHub",
url: "https://github.com/phryneas",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/lenz-w-069040113/",
icon: <LinkedInIcon className="size-5" />,
},
{
label: "Website",
url: "https://phryneas.de/",
icon: <GlobeIcon className="size-5" />,
},
],
},
{
label: "Rigin Oommen",
imageUrl: "https://github.com/riginoommen.png",
alt: "Rigin Oommen",
organization: "Red Hat",
tags: [
{
label: "GitHub",
url: "https://github.com/riginoommen",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/riginoommen/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
{
label: "Sabrina Wasserman",
imageUrl: "/img/ambassadors/sabrina-wasserman.jpg",
alt: "Sabrina Wasserman",
organization: "Facebook",
tags: [
{
label: "GitHub",
url: "https://github.com/s3wasser",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/sabrina-wasserman-251045138/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
{
label: "Valentin Cocaud",
imageUrl: "https://github.com/EmrysMyrddin.png",
alt: "Valentin Cocaud",
organization: "The Guild",
tags: [
{
label: "GitHub",
url: "https://github.com/EmrysMyrddin",
icon: <GitHubIcon className="size-5" />,
},
{
label: "LinkedIn",
url: "https://www.linkedin.com/in/valentin-cocaud/",
icon: <LinkedInIcon className="size-5" />,
},
],
},
]

export const ambassadors = [...ambassadors202509, ...ambassadors202512].sort(
(a, z) => a.label.localeCompare(z.label, "en-US"),
)
14 changes: 10 additions & 4 deletions src/components/info-card/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,28 @@ import { ReactNode } from "react"
export interface InfoCardLabelRow {
type: "label"
label: ReactNode
hideInConciseMode?: boolean
}

export interface InfoCardTitleRow {
type: "title"
title: ReactNode
hideInConciseMode?: boolean
}

export interface InfoCardImageRow {
type: "image"
imageUrl: string
alt?: string
hideInConciseMode?: boolean
}

export type InfoCardRow = InfoCardLabelRow | InfoCardTitleRow | InfoCardImageRow

export interface InfoCardProps {
rows: InfoCardRow[]
className?: string
concise?: boolean
}

export function InfoCardRow({ row }: { row: InfoCardRow }) {
Expand Down Expand Up @@ -54,7 +58,7 @@ export function InfoCardRow({ row }: { row: InfoCardRow }) {
}
}

export function InfoCard({ rows, className }: InfoCardProps) {
export function InfoCard({ rows, concise, className }: InfoCardProps) {
return (
<div
className={clsx(
Expand All @@ -63,9 +67,11 @@ export function InfoCard({ rows, className }: InfoCardProps) {
)}
>
<div className="flex flex-1 flex-col">
{rows.map((row, i) => (
<InfoCardRow key={i} row={row} />
))}
{rows.map((row, i) =>
!concise || !row.hideInConciseMode ? (
<InfoCardRow key={i} row={row} />
) : null,
)}
</div>
</div>
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
---
title: "Announcing Our GraphQL Ambassadors"
tags: ["blog"]
tags: ["announcements"]
date: 2025-09-08
byline: Jem Gillam and Jory Burson
featured: true
---

The GraphQL Foundation is thrilled to announce the launch of the GraphQL Ambassadors Program — a new initiative to recognize and support community leaders who are helping to grow the GraphQL ecosystem worldwide.
Expand Down
38 changes: 38 additions & 0 deletions src/pages/blog/2025-12-18-announcing-graphql-ambassadors/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: "Meet the December Ambassador Cohort"
tags: ["announcements"]
date: 2025-12-18
byline: Jem Gillam
featured: true
---

import { AmbassadorGrid } from "../../../components/ambassador-grid"
import {ambassadors202512} from "../../../components/info-card/ambassador-data"

The GraphQL Foundation is happy to announce the next cohort of GraphQL Ambassadors!
Ambassadors are nominated and represent a diverse range of geographies, backgrounds, and use cases — from maintainers of popular libraries, to meetup organizers, to educators writing guides and tutorials. Join us in welcoming these 12 incredible individuals to the team!

<AmbassadorGrid ambassadors={ambassadors202512} concise />

## **News from the Ambassadors**

Our Ambassadors hit the ground running, with new local meetup groups being organized in Amsterdam, Philadelphia and Poland.

Our Ambassadors Erik and An were also busy representing GraphQL at API Days Paris, and they along with
Aurélien also gave talks at the co-located [GraphQL.Day event](https://graphql.day).

Along the way, our Ambassadors have also been hard at work behind the scenes shaping the new Ambassador program to become something truly impactful for the community.

## **How to Get Involved**

- **Nominate an Ambassador.** Do you know someone doing incredible work with GraphQL? [Nominate them](https://forms.gle/hN7reX8aKQ6BqSJm7) (or [yourself](https://forms.gle/zRKVfcTPQ9kFn4Ps6))!

- **Connect locally.** Attend events and workshops hosted by Ambassadors in your region.

- **Share your story.** If you’re publishing, teaching, or building with GraphQL, we’d love to hear from you.

## **What’s Next**

The Ambassadors program is part of our broader effort to strengthen community engagement and education around GraphQL. Look forward to spotlights on our Ambassador team, upcoming blogs and speaking opportunities, and ways you can collaborate with these leaders.

Together, we’re building not just technology, but a thriving, global GraphQL community.
Loading