diff --git a/public/img/ambassadors/donna-zhou.jpg b/public/img/ambassadors/donna-zhou.jpg new file mode 100644 index 0000000000..7099b287bb Binary files /dev/null and b/public/img/ambassadors/donna-zhou.jpg differ diff --git a/public/img/ambassadors/itamar-kestenbaum.jpg b/public/img/ambassadors/itamar-kestenbaum.jpg new file mode 100644 index 0000000000..33a84c2988 Binary files /dev/null and b/public/img/ambassadors/itamar-kestenbaum.jpg differ diff --git a/public/img/ambassadors/jamie-barton.jpg b/public/img/ambassadors/jamie-barton.jpg new file mode 100644 index 0000000000..45d9cc2607 Binary files /dev/null and b/public/img/ambassadors/jamie-barton.jpg differ diff --git a/public/img/ambassadors/jeff-auriemma.jpg b/public/img/ambassadors/jeff-auriemma.jpg new file mode 100644 index 0000000000..4bf99a939e Binary files /dev/null and b/public/img/ambassadors/jeff-auriemma.jpg differ diff --git a/public/img/ambassadors/sarah-sanders.jpg b/public/img/ambassadors/sarah-sanders.jpg new file mode 100644 index 0000000000..5cafe14f52 Binary files /dev/null and b/public/img/ambassadors/sarah-sanders.jpg differ diff --git a/public/img/ambassadors/warren-day.jpeg b/public/img/ambassadors/warren-day.jpeg new file mode 100644 index 0000000000..6132f972f2 Binary files /dev/null and b/public/img/ambassadors/warren-day.jpeg differ diff --git a/src/components/ambassador-grid.tsx b/src/components/ambassador-grid.tsx new file mode 100644 index 0000000000..09950ba93a --- /dev/null +++ b/src/components/ambassador-grid.tsx @@ -0,0 +1,54 @@ +import type { Ambassador } from "./info-card/ambassador-data" +import { InfoCard, InfoCardRow } from "./info-card" + +function buildRows(ambassador: Ambassador): InfoCardRow[] { + return [ + { + type: "label", + label: ambassador.label, + }, + { + type: "image", + imageUrl: ambassador.imageUrl, + alt: ambassador.alt, + }, + { + type: "label", + label: ambassador.organization, + }, + { + type: "label", + label: + ambassador.tags.length > 0 ? ( +
+ {ambassador.tags.map(tag => ( + + {tag.icon ?? tag.label} + + ))} +
+ ) : null, + }, + ] +} + +export function AmbassadorGrid({ ambassadors }: { ambassadors: Ambassador[] }) { + return ( +
+ {ambassadors.map((ambassador, index) => ( + + ))} +
+ ) +} diff --git a/src/components/info-card/ambassador-data.tsx b/src/components/info-card/ambassador-data.tsx new file mode 100644 index 0000000000..f3ae7dbb17 --- /dev/null +++ b/src/components/info-card/ambassador-data.tsx @@ -0,0 +1,470 @@ +import { ReactNode } from "react" +import { + Bluesky2Icon, + FacebookIcon, + GitHubIcon, + GlobeIcon, + LinkedInIcon, + ThreadsIcon, + TwitterIcon, + YouTube2Icon, +} from "../../icons" + +export interface AmbassadorTag { + label: string + url: string + icon?: ReactNode +} + +export interface Ambassador { + label: string + imageUrl: string + alt: string + organization: string + tags: AmbassadorTag[] +} + +export const ambassadors: Ambassador[] = [ + { + label: "Artur Czemiel", + imageUrl: "https://github.com/aexol.png", + alt: "Artur Czemiel", + organization: "GraphQL Editor", + tags: [ + { + label: "Bluesky", + url: "https://bsky.app/profile/arturcz.bsky.social", + icon: , + }, + { + label: "GitHub", + url: "https://github.com/aexol/", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/arturczemiel/", + icon: , + }, + ], + }, + { + label: "Donna Zhou", + imageUrl: "/img/ambassadors/donna-zhou.jpg", + alt: "Donna Zhou", + organization: "GraphQL Java", + tags: [ + { + label: "GitHub", + url: "https://github.com/dondonz", + icon: , + }, + { + label: "LinkedIn", + url: "https://linkedin.com/in/donnazhou", + icon: , + }, + ], + }, + { + label: "Dotan Simha", + imageUrl: "https://github.com/dotansimha.png", + alt: "Dotan Simha", + organization: "The Guild", + tags: [ + { + label: "GitHub", + url: "https://github.com/dotansimha/", + icon: , + }, + { + label: "X", + url: "https://x.com/dotansimha", + icon: , + }, + ], + }, + { + label: "Eddy Nguyen", + imageUrl: "https://github.com/eddeee888.png", + alt: "Eddy Nguyen", + organization: "Code Generator", + tags: [ + { + label: "GitHub", + url: "https://github.com/eddeee888", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/eddeee888/", + icon: , + }, + { + label: "X", + url: "https://x.com/eddeee888", + icon: , + }, + { + label: "YouTube", + url: "https://www.youtube.com/@eddeee888", + icon: , + }, + ], + }, + { + label: "Erik Wrede", + imageUrl: "https://github.com/erikwrede.png", + alt: "Erik Wrede", + organization: "Strawberry GraphQL", + tags: [ + { + label: "GitHub", + url: "https://github.com/erikwrede/", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/erikwrede", + icon: , + }, + ], + }, + { + label: "Itamar Kestenbaum", + imageUrl: "/img/ambassadors/itamar-kestenbaum.jpg", + alt: "Itamar Kestenbaum", + organization: "Meta Platforms", + tags: [ + { + label: "Facebook", + url: "https://www.facebook.com/profile.php?id=504330120", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/itamarkestenbaum/", + icon: , + }, + { + label: "Threads", + url: "https://www.threads.com/@itamarok", + icon: , + }, + ], + }, + { + label: "Jamie Barton", + imageUrl: "/img/ambassadors/jamie-barton.jpg", + alt: "Jamie Barton", + organization: "CartQL", + tags: [ + { + label: "GitHub", + url: "https://github.com/notrab", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/notrab/", + icon: , + }, + { + label: "X", + url: "https://x.com/notrab", + icon: , + }, + { + label: "Website", + url: "https://notrab.dev/blog", + icon: , + }, + ], + }, + { + label: "Jeff Auriemma", + imageUrl: "/img/ambassadors/jeff-auriemma.jpg", + alt: "Jeff Auriemma", + organization: "Apollo", + tags: [ + { + label: "Bluesky", + url: "https://bsky.app/profile/jeff.auriemma.xyz", + icon: , + }, + { + label: "GitHub", + url: "https://github.com/bignimbus", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/jeffreyauriemma/", + icon: , + }, + { + label: "Website", + url: "https://jdauriemma.com/", + icon: , + }, + ], + }, + { + label: "Jem Gillam", + imageUrl: "https://github.com/jemgillam.png", + alt: "Jem Gillam", + organization: "Graphile", + tags: [ + { + label: "Bluesky", + url: "https://bsky.app/profile/jem.graphile.org", + icon: , + }, + { + label: "GitHub", + url: "https://github.com/jemgillam", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/jem-gillam-92063b14/", + icon: , + }, + ], + }, + { + label: "Jordan Eldredge", + imageUrl: "https://github.com/captbaritone.png", + alt: "Jordan Eldredge", + organization: "Meta", + tags: [ + { + label: "GitHub", + url: "https://github.com/captbaritone", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/jordaneldredge", + icon: , + }, + { + label: "Threads", + url: "https://www.threads.com/@captbaritone", + icon: , + }, + { + label: "Website", + url: "https://jordaneldredge.com/", + icon: , + }, + ], + }, + { + label: "Jovi De Croock", + imageUrl: "https://github.com/jovidecroock.png", + alt: "Jovi De Croock", + organization: "GraphQL.js", + tags: [ + { + label: "GitHub", + url: "https://github.com/jovidecroock", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/jovidecroock/", + icon: , + }, + { + label: "X", + url: "https://x.com/jovidecroock", + icon: , + }, + { + label: "Website", + url: "https://www.jovidecroock.com/blog/", + icon: , + }, + ], + }, + { + label: "Marc-Andre Giroux", + imageUrl: "https://github.com/xuorig.png", + alt: "Marc-Andre Giroux", + organization: "Netflix", + tags: [ + { + label: "BlueSky", + url: "https://bsky.app/profile/xuorig.bsky.social", + icon: , + }, + { + label: "GitHub", + url: "https://github.com/xuorig", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/magiroux/", + icon: , + }, + { + label: "Website", + url: "https://magiroux.com/", + icon: , + }, + ], + }, + { + label: "Michael Watson", + imageUrl: "https://github.com/michael-watson.png", + alt: "Michael Watson", + organization: "Apollo", + tags: [ + { + label: "BlueSky", + url: "https://bsky.app/profile/michael-watson.bsky.social", + icon: , + }, + { + label: "GitHub", + url: "https://github.com/michael-watson", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/michael-watson-%F0%9F%96%A5-85844442/", + icon: , + }, + ], + }, + { + label: "Patrick Arminio", + imageUrl: "https://github.com/patrick91.png", + alt: "Patrick Arminio", + organization: "Strawberry GraphQL", + tags: [ + { + label: "BlueSky", + url: "https://bsky.app/profile/patrick.wtf", + icon: , + }, + { + label: "GitHub", + url: "https://github.com/patrick91", + icon: , + }, + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/patrickarminio/", + icon: , + }, + ], + }, + { + label: "Phil Pluckthun", + imageUrl: "https://github.com/kitten.png", + alt: "Phil Pluckthun", + organization: "urql & gql.tada", + tags: [ + { + label: "BlueSky", + url: "https://bsky.app/profile/kitten.sh", + icon: , + }, + { + label: "GitHub", + url: "https://github.com/kitten", + icon: , + }, + { + label: "X", + url: "http://x.com/_philpl", + icon: , + }, + { + label: "Website", + url: "https://kitten.sh/", + icon: , + }, + ], + }, + { + label: "Sarah Sanders", + imageUrl: "/img/ambassadors/sarah-sanders.jpg", + alt: "Sarah Sanders", + organization: "Docker", + tags: [ + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/sarah-s-42913121a/", + icon: , + }, + { + label: "Website", + url: "https://www.sarahsanders.dev/", + icon: , + }, + ], + }, + { + label: "Stephen Spalding", + imageUrl: "https://github.com/fotoetienne.png", + alt: "Stephen Spalding", + organization: "Netflix", + tags: [ + { + label: "GitHub", + url: "https://github.com/fotoetienne", + icon: , + }, + { + label: "X", + url: "https://x.com/stephenspalding", + icon: , + }, + { + label: "Website", + url: "http://stephenspalding.com/", + icon: , + }, + ], + }, + { + label: "Taz Singh", + imageUrl: "https://github.com/tazsingh.png", + alt: "Taz Singh", + organization: "Guild", + tags: [ + { + label: "GitHub", + url: "https://github.com/tazsingh", + icon: , + }, + { + label: "X", + url: "https://x.com/tazsingh", + icon: , + }, + ], + }, + { + label: "Warren Day", + imageUrl: "/img/ambassadors/warren-day.jpeg", + alt: "Warren Day", + organization: "Overstacked", + tags: [ + { + label: "LinkedIn", + url: "https://www.linkedin.com/in/warren-day-86b0a15a", + icon: , + }, + { + label: "YouTube", + url: "https://www.youtube.com/@overstacked_io", + icon: , + }, + ], + }, +] diff --git a/src/components/info-card/index.tsx b/src/components/info-card/index.tsx new file mode 100644 index 0000000000..d90e9e9533 --- /dev/null +++ b/src/components/info-card/index.tsx @@ -0,0 +1,72 @@ +import { clsx } from "clsx" +import { ReactNode } from "react" + +export interface InfoCardLabelRow { + type: "label" + label: ReactNode +} + +export interface InfoCardTitleRow { + type: "title" + title: ReactNode +} + +export interface InfoCardImageRow { + type: "image" + imageUrl: string + alt?: string +} + +export type InfoCardRow = InfoCardLabelRow | InfoCardTitleRow | InfoCardImageRow + +export interface InfoCardProps { + rows: InfoCardRow[] + className?: string +} + +export function InfoCardRow({ row }: { row: InfoCardRow }) { + switch (row.type) { + case "label": { + return ( +
+ {row.label} +
+ ) + } + case "title": { + return ( +
+ {row.title} +
+ ) + } + case "image": { + return ( +
+ {row.alt} +
+ ) + } + } +} + +export function InfoCard({ rows, className }: InfoCardProps) { + return ( +
+
+ {rows.map((row, i) => ( + + ))} +
+
+ ) +} diff --git a/src/icons/bluesky2.svg b/src/icons/bluesky2.svg new file mode 100644 index 0000000000..4f56b3ecf3 --- /dev/null +++ b/src/icons/bluesky2.svg @@ -0,0 +1,10 @@ + + + + diff --git a/src/icons/index.ts b/src/icons/index.ts index d423b9ef11..7a864e4254 100644 --- a/src/icons/index.ts +++ b/src/icons/index.ts @@ -12,6 +12,7 @@ export { default as TwitterIcon } from "./twitter.svg" export { default as LinkedInIcon } from "./linkedin.svg" export { default as LinkedInFilledIcon } from "./linkedin-filled.svg" export { default as YouTubeIcon } from "./youtube.svg" +export { default as YouTube2Icon } from "./youtube2.svg" export { default as FacebookIcon } from "./facebook.svg" export { default as Facebook2Icon } from "./facebook2.svg" export { default as InstagramIcon } from "./instagram.svg" @@ -40,4 +41,6 @@ export { default as BusIcon } from "./bus.svg" export { default as ParkingIcon } from "./parking.svg" export { default as TrainIcon } from "./train.svg" export { default as BlueskyIcon } from "./bluesky.svg" +export { default as Bluesky2Icon } from "./bluesky2.svg" export { default as FoundationTalksChannel } from "./talks-channel.svg" +export { default as ThreadsIcon } from "./threads.svg" diff --git a/src/icons/threads.svg b/src/icons/threads.svg new file mode 100644 index 0000000000..fc6aca4460 --- /dev/null +++ b/src/icons/threads.svg @@ -0,0 +1,10 @@ + + + + diff --git a/src/icons/youtube2.svg b/src/icons/youtube2.svg new file mode 100644 index 0000000000..cc7dc2a10a --- /dev/null +++ b/src/icons/youtube2.svg @@ -0,0 +1,10 @@ + + + + diff --git a/src/pages/_meta.tsx b/src/pages/_meta.tsx index 1ba427e4ad..b37d873d66 100644 --- a/src/pages/_meta.tsx +++ b/src/pages/_meta.tsx @@ -22,6 +22,7 @@ export default { href: "/community/resources/official-channels", }, events: { title: "Events & Meetups" }, + ambassadors: { title: "Ambassador Program" }, contribute: { title: "Contribute to GraphQL", href: "/community/contribute/governance", diff --git a/src/pages/community/_meta.ts b/src/pages/community/_meta.ts index 829e9755b4..fe3b4d1f5b 100644 --- a/src/pages/community/_meta.ts +++ b/src/pages/community/_meta.ts @@ -6,6 +6,7 @@ export default { }, }, events: "", + ambassadors: "Ambassador Program", contribute: "Contribute to GraphQL", foundation: "Foundation", } diff --git a/src/pages/community/ambassadors/_meta.tsx b/src/pages/community/ambassadors/_meta.tsx new file mode 100644 index 0000000000..63116c8833 --- /dev/null +++ b/src/pages/community/ambassadors/_meta.tsx @@ -0,0 +1,5 @@ +export default { + index: "Ambassadors", + apply: "How to Apply", + standards: "Standards of Excellence", +} diff --git a/src/pages/community/ambassadors/apply.mdx b/src/pages/community/ambassadors/apply.mdx new file mode 100644 index 0000000000..82d14c7fac --- /dev/null +++ b/src/pages/community/ambassadors/apply.mdx @@ -0,0 +1,164 @@ +--- +description: How to apply to be a GraphQL Ambassador +--- + +import { Button } from "../../../app/conf/_components/button" +import { Steps } from 'nextra/components' + +# Become a GraphQL Ambassador + +GraphQL Ambassadors are trusted go-to community leaders driven by a passion for +GraphQL projects and strive to nurture the growing GraphQL community through +collaboration, education and outreach. + +As an Ambassador, you also gain the following: + +- Professional recognition for expertise and contributions to the GraphQL + community +- Opportunities to network with other GraphQL leaders, both in your local + community and online +- A closer relationship with the GraphQL Foundation & project, including + up-to-date news and insights on upcoming Specification edits and working group + topics +- Support, funding and mentoring from the GraphQL Foundation for hosting events, + speaking and creating content +- Exclusive benefits and swag + + + +## Ambassador Requirements + +- Knowledgeable about GraphQL and readily able to articulate those ideas +- A model community member: adhering to the Standards of Excellence especially + when critical of GraphQL or defending it against others' criticism; remaining + respectful, constructive and fair +- Do not come across to other community members as selling another product, + service or agenda when acting as an Ambassador +- Agree to have your face, name, chosen socials and other relevant information + displayed on the [Ambassadors](./) webpage +- Already participate in one or more of the Ambassador tasks outlined below + +## Ambassador Tasks + +GraphQL Ambassadors are an important touchstone for people interested in GraphQL +to learn more about it in a friendly and constructive way. + +As an Ambassador, you will do four or more Ambassador tasks throughout your one +year term. Your can do the same task four times, or a mixture of tasks. + +Ambassador tasks include: + + + +### Community Leadership + - Local Gathering organizer + - Organizer/program planner for a GraphQL focused event, conference track, or similar + - Mentorship hours + - GraphQL Foundation community Discord moderation + +### Public Speaking + - Speaking at industry, community or GraphQL Foundation events about GraphQL or GraphQL + projects + +### GraphQL Focused Content Creation + - Producing written content, both on GraphQL Foundation platforms and elsewhere + - Have written a GraphQL focused book + - Producing video and/or audio content, either on GraphQL Foundation platforms or elsewhere + - Building demo apps + +### Active Contribution to a GraphQL Foundation Project or Specification + - Have held a formal role in a GraphQL Foundation project + - Shared valuable insights or feedback at the GraphQL working group or sub-working groups + +### Maintainer or A Main Contributor of a Key Open-Source GraphQL Related Project + - For example, GraphQL clients, servers, tooling or implementations + +### Outreach for GraphQL Foundation initiatives + - Discussion and guidance helping a non-Foundation project to adopt, test and provide feedback on a GraphQL Specification proposal + - Organizing a venue for a GraphQL Local + - Media outreach with a measurable impact e.g. publication in a major tech outlet or mainstream media + + + +_Note: content should align with open-source principles and not be behind +paywalls_ + +## What the Foundation offers + +- Quarterly online meeting with Foundation / TSC representatives: + - 15 minute presentation from the Foundation on current projects, + Specification edits and working group topics + - followed by Q&A + - time for Ambassadors to give feedback on the current directions of the + GraphQL project, be that technical (eg Specification RFCs), or community + initiative focused +- Promotion of the Ambassador as a go-to GraphQL community leader: + - Website profile + - Biographies / interviews with each Ambassador + - Credly badge for social media profiles +- An Ambassador role on the community Discord and an associated private channel + for networking and discussions with Foundation / TSC / community reps +- Promotion of Ambassador material - conference talk videos and created content +- Exclusive GraphQL swag eg Ambassador hoodie +- Travel funding to approved conference & meetup + talks, applications to be evaluated on a case-by-case basis +- An honorarium available for content creation on a case-by-case basis + +## Ambassador Code of Conduct + +While the wider GraphQL community abides by the +[contributor covenant code of conduct](https://graphql.org/codeofconduct/), a +stronger set of standards is used for the Ambassador Program. This is because +the Foundation endorses Ambassadors as representatives and leaders; the +Standards of Excellence are designed to provide a set of guidelines and best +practices for engaging with the GraphQL Foundation and broader community. This +makes it easier for Ambassadors to contribute to a positive culture by providing +clarity around what and how we create a safe and collaborative environment. See +[Standards of Excellence](./standards-of-excellence.md). + +## Application Process + +Applications are open year-round and are received by a small panel of Foundation +and TSC members. Once the Ambassadors program is fully up-and-running, +Ambassadors will also have the option to review applications. The Ambassador +term is a year long, Ambassadors who continue to meet the expectations will be +invited to join again at the end of their term. + +Applications can be from the applicant themselves, or a nomination from another +community member. + +### Important Dates + +| Applications Open | Year Round | +| ----------------------------| ---------------| +| First Ambassador Cohort Announced | September 2025 | +| Applications Reviewed | November 2025 | +| Second Ambassador Cohort Announced | December 2025 | +| Applications Reviewed | February 2026| +| Third Ambassador Cohort Announced | March 2026 | +| Applications Reviewed | May 2026 | +| Fourth Ambassador Cohort Announced | June 2026 | +| First Ambassador Cohort Term Ends | August 2026 | +| Second Ambassador Cohort Term Ends | November 2026 | +| Third Ambassador Cohort Term Ends | February 2027 | +| Fourth Ambassador Cohort Term Ends | May 2027 | + + +## Apply + +Are you interested in becoming an official GraphQL Ambassador? + + + +Want to nominate someone else? [Fill in the nomination form instead](https://forms.gle/JcZ5XgUuRBsAF6T19).
+Have a question? Please ask [ambassadors@graphql.org](mailto:ambassadors@graphql.org) diff --git a/src/pages/community/ambassadors/index.mdx b/src/pages/community/ambassadors/index.mdx new file mode 100644 index 0000000000..123e835bd8 --- /dev/null +++ b/src/pages/community/ambassadors/index.mdx @@ -0,0 +1,24 @@ +--- +description: An introduction to the GraphQL Ambassador Program +--- + +import { Button } from "../../../app/conf/_components/button" +import { AmbassadorGrid } from "../../../components/ambassador-grid" +import {ambassadors} from "../../../components/info-card/ambassador-data" + +# GraphQL Ambassador Program + +Ambassadors are trusted go-to community leaders driven by a passion for GraphQL projects and strive to nurture the growing GraphQL community through collaboration, education and outreach. + +Interested in becoming an Ambassador? + + + +## Meet your GraphQL Ambassadors! + + diff --git a/src/pages/community/ambassadors/standards.mdx b/src/pages/community/ambassadors/standards.mdx new file mode 100644 index 0000000000..f893586f79 --- /dev/null +++ b/src/pages/community/ambassadors/standards.mdx @@ -0,0 +1,144 @@ +--- +description: Ambassador Standards of Excellence +--- + +# GraphQL Ambassador Program Standards of Excellence + +While the wider GraphQL community abides by the +[contributor covenant code of conduct](https://graphql.org/codeofconduct/), a +stronger set of standards is used for the Ambassador Program. This is because +the Foundation endorses Ambassadors as representatives and leaders; the +Standards of Excellence are designed to provide a set of guidelines and best +practices for engaging with the GraphQL Foundation and broader community. This +makes it easier for Ambassadors to contribute to a positive culture by providing +clarity around what and how we create a safe and collaborative environment. + +## Scope + +If you are a GraphQL Ambassador, these Standards apply to you. This means they +apply to your statements and actions in your capacity as a GraphQL Foundation +representative, whether they occur online or offline, and whether they occur +within community spaces or outside of community spaces. + +In addition to complying with these Standards of Excellence, GraphQL Ambassadors +are also required to comply with the [GraphQL Code of Conduct](https://graphql.org/) and the [Linux +Foundation Events Code of Conduct](https://events.linuxfoundation.org/about/code-of-conduct/), and all other applicable GraphQL Foundation +policies, rules, or guidelines. + +## Be Kind, Welcoming, and Inclusive + +- Be kind to others. +- Promote a friendly atmosphere where people feel comfortable asking questions, + participating in discussions, and making contributions. +- Show gratitude and appreciation for others. Look for opportunities to say + “thank you” and recognize people when they are being helpful or making + contributions. +- Make a conscious effort to welcome and be inclusive of newcomers and people + who are different from you. +- Show empathy, care, and concern for others’ feelings, perspectives, and + experiences. + +## Be Respectful and Professional + +- At all times, conduct yourself in a manner that is appropriate for a + professional environment. +- Always treat others with courtesy and respect. Rude, insulting, offensive, + disparaging, or threatening statements or behaviors are not permitted. + +## Handle Disagreements Respectfully + +We want to encourage the candid exchange of ideas and feedback and foster an +environment in which people can openly agree or disagree with each other, so +long as they do so respectfully. Disagreements are not an excuse for bad +behavior. As a GraphQL Ambassador, you are expected to: + +- Respond to differences of opinion in a respectful manner. +- Make a conscious effort to understand other people’s perspectives and learn + the facts before you publicly take a stand on any highly controversial issue. +- Seek to resolve conflict and disagreement in a respectful and collaborative + manner and encourage others to do the same. + +## Promote and Enhance the GraphQL Brand + +As a GraphQL Ambassador, part of your role is to promote and enhance the GraphQL +brand and contribute to goodwill and positive relations among the Foundation and +others in GraphQL ecosystem. Nonetheless, you can be honest and candid with +constructive criticism, holding others accountable, identifying opportunities +for improvement, and discussing potential challenges. However, always express +yourself in a manner that is respectful and professional, and strive to also be +tactful and sensitive to how your words may impact others. See the “Be Graceful +With Feedback” section below for suggestions on how to deliver feedback +constructively and kindly. + +As a GraphQL Ambassador, your actions can reflect either positively or poorly on +the GraphQL community, Foundation, and brand. Therefore, engaging in activity +that is illegal, immoral, fraudulent, deceptive, or is otherwise likely to +damage the reputation of the GraphQL community, Foundation, or Ambassador +Program, is grounds for immediate suspension or removal from the GraphQL +Ambassador Program. + +## Don’t use GraphQL community spaces or your role as an Ambassador to promote political causes + +Your role as a GraphQL Ambassador is to be used for the purpose of evangelizing +GraphQL and otherwise contributing to the GraphQL community and ecosystem. Both +the GraphQL Code of Conduct and these Standards of Excellence prohibit use of +GraphQL community spaces for political campaigning or promotion of political +causes that are unrelated to the advancement of GraphQL technology. + +Outside of GraphQL community spaces, you are free to engage in political +activities and support causes you choose. However, when you discuss political +causes that are unrelated to GraphQL, please keep those discussions separate +from your engagement in GraphQL and separate from your role as a GraphQL +Ambassador. For example, if you choose to promote a political cause unrelated to +technology on X or LinkedIn in your personal time, please do so in posts and +discussion threads that are separate from GraphQL-related discussions. + +## Be Graceful With Feedback + +- Giving others kudos and recognition is a great way to contribute to a positive + environment. Therefore, feel free to share positive feedback in both public + and private forums. +- When it comes to negative feedback or criticism, remember that none of us are + perfect. We all make mistakes. Most people are good people who are trying to + do good things. Therefore, when others make mistakes, strive to be + understanding. When you make a mistake, take responsibility and do your best + to learn and improve. +- Always share feedback or criticism in a respectful, courteous, and + professional manner. Additionally, always strive to present negative feedback + or criticism in a constructive manner (e.g. as suggestions for improvement) + rather than a destructive manner (e.g. insults or degrading language). +- When you have negative feedback or criticism about an individual (other than a + public figure), please share it privately to help the individual learn and + grow. Please avoid sharing negative feedback or criticism about an individual + (other than a public figure) publicly, because this could cause unnecessary + shame, embarrassment, or humiliation. +- When you have negative feedback or criticism about an organization or public + figure, you may share it publicly or privately, so long as you do so in a + respectful, courteous, and professional manner. + +## Consequences for Violation + +If the GraphQL Foundation determines that a GraphQL Ambassador has violated +these Standards of Excellence, or if a GraphQL Ambassador has been found in +violation of the GraphQL Code of Conduct or the Linux Foundation Events Code of +Conduct, the GraphQL Foundation, at its sole discretion, may take any action +that it deems appropriate under the circumstances, including asking the GraphQL +Ambassador to remove offending content from community spaces or public spaces, +or suspending or removing the individual from the GraphQL Ambassador Program. + +## Questions and Reporting + +If you have questions about these Standards of Excellence, or if you would like +to report a potential violation, please send an email to [insert email address] +and the current community manager will contact you. We will respond promptly to +all questions and reports. + +## Updates + +The GraphQL Foundation reserves the right to modify these Standards of +Excellence at any time, at its sole discretion. The GraphQL Foundation will +notify GraphQL Ambassadors of major changes to the guidelines by email [and via +the GraphQL Ambassador Discord channel]. However, any changes to these +guidelines will not apply retroactively. If these guidelines are updated and a +GraphQL Ambassador does not wish to agree, their participation in the GraphQL +Ambassador Program will cease until such time as they do agree.