Skip to content

2025 Code of Conduct page #2029

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: source
Choose a base branch
from
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
20 changes: 20 additions & 0 deletions next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,25 @@ export default withLess(
withNextra({
// reactStrictMode: true, provoke duplicated codemirror editors
webpack(config) {
// #region MDX
const mdxRule = config.module.rules.find(rule =>
rule.test?.test?.(".mdx"),
)
if (mdxRule) {
mdxRule.resourceQuery = {
not: /raw/,
}
}
// Instead of transforming MDX, with ?source we can get
// the raw content to process in a Server Component.
config.module.rules.push({
test: /\.mdx$/i,
resourceQuery: /raw/,
type: "asset/source",
})
// #endregion MDX

// #region SVGs
const fileLoaderRule = config.module.rules.find(rule =>
rule.test?.test?.(".svg"),
)
Expand Down Expand Up @@ -62,6 +81,7 @@ export default withLess(
},
},
)
// #endregion SVGs

return config
},
Expand Down
53 changes: 53 additions & 0 deletions src/app/conf/2025/code-of-conduct/code-of-conduct.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
The Linux Foundation and its project communities are dedicated to providing a harassment-free experience for participants at all of our events, whether they are held in person or virtually. Linux Foundation events are working conferences intended for professional networking and collaboration within the open source community. They exist to encourage the open exchange of ideas and expression and require an environment that recognizes the inherent worth of every person and group. While at Linux Foundation events or related ancillary or social events, any participants, including members, speakers, attendees, volunteers, sponsors, exhibitors, booth staff and anyone else, must not engage in harassment in any form.

This Code of Conduct may be revised at any time by The Linux Foundation and the terms are non-negotiable. Your registration for or attendance at any Linux Foundation event, whether it's held in person or virtually, indicates your agreement to abide by this policy and its terms.

<Callout>

Check failure on line 5 in src/app/conf/2025/code-of-conduct/code-of-conduct.mdx

View workflow job for this annotation

GitHub Actions / prettier-check

'Callout' is not defined
## Expected Behavior

All event participants, whether they are attending an in-person event or a virtual event, are expected to behave in accordance with professional standards, with both this Code of Conduct as well as their respective employer's policies governing appropriate workplace behavior and applicable laws.
</Callout>

## Unacceptable Behavior

Harassment will not be tolerated in any form, whether in person or virtually, including, but not limited to, harassment based on gender, gender identity and expression, sexual orientation, disability, physical appearance, body size, race, age, religion or any other status protected by laws in which the conference or program is being held. Harassment includes the use of abusive, offensive or degrading language, intimidation, stalking, harassing photography or recording, inappropriate physical contact, sexual imagery and unwelcome sexual advances or requests for sexual favors. Any report of harassment at one of our events, whether in person or virtual, will be addressed immediately. Participants asked to stop any harassing behavior are expected to comply immediately. Anyone who witnesses or is subjected to unacceptable behavior should notify a conference organizer at once.

Individuals who participate (or plan to participate) in Linux Foundation events, whether its an in-person event or a virtual event, should conduct themselves at all times in a manner that comports with both the letter and spirit of this policy prohibiting harassment and abusive behavior, whether before, during or after the event. This includes statements made in social media postings, on-line publications, text messages, and all other forms of electronic communication.

Speakers should not use sexual language, images, or any language or images that would constitute harassment as defined above in their talks. Exhibitor booths serve as a platform for presenting businesses and/or projects and should maintain a professional and inclusive presence; therefore, the use of sexualized images, activities, materials, or attire, including costumes and uniforms that contribute to a sexualized environment, is strictly prohibited. Additionally, booths must not be utilized for political campaigning or promoting political causes, including the display or engagement in activities or materials that support such endeavors.

<Callout>

Check failure on line 19 in src/app/conf/2025/code-of-conduct/code-of-conduct.mdx

View workflow job for this annotation

GitHub Actions / prettier-check

'Callout' is not defined
## Consequences of Unacceptable Behavior

If a participant engages in harassing behavior, whether in person or virtually, the conference organizers may take any action they deem appropriate depending on the circumstances, ranging from issuance of a warning to the offending individual to expulsion from the conference with no refund. The Linux Foundation reserves the right to exclude any participant found to be engaging in harassing behavior from participating in any further Linux Foundation events, trainings or other activities.

If a participant (or individual wishing to participate in a Linux Foundation event, in-person and/or virtual), through postings on social media or other online publications or another form of electronic communication, engages in conduct that violates this policy, whether before, during or after a Linux Foundation event, The Linux Foundation may take appropriate corrective action, which could include imposing a temporary or permanent ban on an individual's participation in future Linux Foundation events.
</Callout>

## What To Do If You Witness or Are Subject To Unacceptable Behavior

If you are being harassed, notice that someone else is being harassed, or have any other concerns relating to harassment, please contact a member of the conference staff immediately. You are also encouraged to contact Angela Brown, Senior VP & General Manager of Events, at [[email protected]](mailto:[email protected]).

<Callout>

Check failure on line 31 in src/app/conf/2025/code-of-conduct/code-of-conduct.mdx

View workflow job for this annotation

GitHub Actions / prettier-check

'Callout' is not defined
## Incident Response

Our staff has taken incident response training and responds to harassment reports quickly and thoroughly. As referenced above, if a participant engages in harassing behavior, whether in-person or virtually, the conference organizers may take any action they deem appropriate, ranging from issuance of a warning to the offending individual to expulsion from the conference with no refund, depending on the circumstances. The Linux Foundation reserves the right to exclude any participant found to be engaging in harassing behavior from participating in any further Linux Foundation events, trainings or other activities.

Conference staff will also provide support to victims, including, but not limited to:
- Providing an Escort
- Contacting Hotel/Venue Security or Local Law Enforcement
- Briefing Key Event Staff For Response/Victim Assistance
- And otherwise assisting those experiencing harassment to ensure that they feel safe for the duration of the conference.
</Callout>

## Health and Safety Requirements

It is necessary for all attendees to cooperate and protect one another. For this reason, The Linux Foundation's events may have health and safety requirements (the "Health and Safety Requirements"). The specific requirements may vary from event to event, and will be communicated in writing prior to and during the event.

If an attendee fails to comply with any of the Health and Safety Requirements, The Linux Foundation may (but is not obligated to) take appropriate corrective action, which could include immediate removal from the event and venue without a refund, and/or imposing a temporary or permanent ban on an individual's participation in future Linux Foundation events.

<Callout>

Check failure on line 49 in src/app/conf/2025/code-of-conduct/code-of-conduct.mdx

View workflow job for this annotation

GitHub Actions / prettier-check

'Callout' is not defined
## Pre-Event Concerns

If you are planning to attend an upcoming event, whether in-person or virtually and have concerns regarding another individual who may be present, please contact Angela Brown ([[email protected]](mailto:[email protected])). Precautions will be taken to ensure your comfort and safety, including, but not limited to providing an escort, prepping onsite event staff, keeping victim and harasser from attending the same talks/social events and providing onsite contact cell phone numbers for immediate contact.
</Callout>
77 changes: 77 additions & 0 deletions src/app/conf/2025/code-of-conduct/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import type { Metadata } from "next"
import clsx from "clsx"

import { Anchor } from "@/app/conf/_design-system/anchor"
import { ServerComponentMarkdown } from "@/app/conf/_components/server-component-markdown"
import { Button } from "@/app/conf/_design-system/button"

import { NavbarPlaceholder } from "../components/navbar"
import "../resources/prose.css"
import { Hero, HeroStripes } from "../components/hero"

import markdown from "./code-of-conduct.mdx?raw"

export const metadata: Metadata = {
title: "Code of Conduct | GraphQLConf 2025",
}

export default function ResourcesPage() {
return (
<>
<NavbarPlaceholder className="top-0 bg-neu-100 before:bg-white/30 dark:bg-[#181A12] dark:before:bg-blk/40" />
<Hero
pageName="Code of conduct"
subtitle="The Linux Foundation"
colorScheme="neutral"
stripes={
<HeroStripes
className="-scale-x-100 dark:data-[loaded=true]:opacity-80"
evenClassName="bg-[linear-gradient(180deg,hsl(var(--color-sec-light))_0%,hsl(319deg_100%_90%_/_0.2)_100%)] dark:bg-[linear-gradient(180deg,hsl(var(--color-sec-dark))_0%,hsl(var(--color-neu-100))_100%)]"
oddClassName="bg-[linear-gradient(180deg,hsl(319deg_100%_90%_/_0.2)_0%,hsl(var(--color-sec-base))_100%)] dark:bg-[linear-gradient(180deg,hsl(var(--color-sec-dark))_0%,hsl(var(--color-neu-0))_100%)]"
/>
}
>
<Button
href="https://events.linuxfoundation.org/about/code-of-conduct/"
className="mt-[18px] w-fit"
>
See on The Linux Foundation
</Button>
</Hero>
<main className="gql-all-anchors-focusable gql-conf-navbar-strip text-neu-900 before:bg-white/40 before:dark:bg-blk/30">
<div className="gql-conf-container gql-conf-section gql-prose">
<ServerComponentMarkdown
markdown={markdown}
components={{
a: (props: React.AnchorHTMLAttributes<HTMLAnchorElement>) => {
return (
<Anchor
{...props}
href={props.href ?? ""}
className={clsx(props.className, "typography-link")}
/>
)
},
ul: (props: React.HTMLAttributes<HTMLUListElement>) => {
return (
<ul {...props} className={clsx(props.className, "-mt-6")} />
)
},
Callout: (props: React.HTMLAttributes<HTMLDivElement>) => {
return (
<div
{...props}
className={clsx(
props.className,
"gql-prose-inner -mx-4 w-fit border border-neu-300 bg-neu-50 p-4 dark:border-neu-100 dark:bg-neu-50/50 xl:my-4",
)}
/>
)
},
}}
/>
</div>
</main>
</>
)
}
2 changes: 1 addition & 1 deletion src/app/conf/2025/components/call-for-proposals.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ function NotesTab() {
All speakers are required to adhere to our{" "}
<Link
className="typography-link dark:text-neu-50"
href="/conf/2025/resources/#code-of-conduct"
href="/conf/2025/code-of-conduct"
>
Code of Conduct
</Link>
Expand Down
101 changes: 62 additions & 39 deletions src/app/conf/2025/components/hero/index.tsx
Original file line number Diff line number Diff line change
@@ -1,53 +1,85 @@
import { ReactNode } from "react"

import { CalendarIcon } from "@/app/conf/_design-system/pixelarticons/calendar-icon"
import { PinIcon } from "@/app/conf/_design-system/pixelarticons/pin-icon"

import GraphQLFoundationWordmark from "../../assets/graphql-foundation-wordmark.svg?svgr"

import { ImageLoaded } from "../image-loaded"
import blurBean from "./blur-bean-cropped.webp"
import clsx from "clsx"
import {
StripesDecoration,
StripesDecorationProps,
} from "@/app/conf/_design-system/stripes-decoration"

export function Hero({
pageName,
year,
children,
bottom,
}: {
export type HeroProps = {
pageName?: string
year: string
children: React.ReactNode
bottom?: React.ReactNode
}) {
colorScheme?: "primary" | "neutral"
stripes?: ReactNode
} & (
| { year: string | number; subtitle?: never }
| { year?: never; subtitle: string }
)

export function Hero(props: HeroProps) {
const colorScheme = props.colorScheme || "primary"

return (
<article className="gql-conf-navbar-strip relative isolate flex flex-col justify-center bg-pri-base text-neu-0 selection:bg-blk/40 before:bg-white/30 dark:bg-pri-darker dark:text-neu-900 dark:selection:bg-white/40 before:dark:bg-blk/40">
<article
className={clsx(
"gql-conf-navbar-strip relative isolate flex flex-col justify-center selection:bg-blk/40 before:bg-white/30 before:dark:bg-blk/40",
colorScheme === "primary"
? "bg-pri-base text-neu-0 dark:bg-pri-darker dark:text-neu-900 dark:selection:bg-white/40"
: "bg-neu-100 dark:bg-neu-50/25",
)}
>
<article className="relative">
<HeroStripes />
{props.stripes || <HeroStripes />}
<div className="gql-conf-container mx-auto flex max-w-full flex-col gap-12 overflow-hidden p-4 pt-6 sm:p-8 sm:pt-12 md:gap-12 md:bg-left md:p-12 lg:px-24 lg:pb-16 lg:pt-24">
<div className="flex gap-10 max-md:flex-col md:justify-between">
{pageName ? (
{props.pageName ? (
<div>
<span className="typography-h3 text-sec-base">
GraphQLConf {year}
<span
className={clsx(
"typography-body-lg lg:typography-h3",
colorScheme === "primary"
? "text-sec-base"
: "text-pri-base",
)}
>
{props.year ? `GraphQLConf ${props.year}` : props.subtitle}
</span>
<h1 className="typography-d1">{pageName}</h1>
<h1 className="typography-d1">{props.pageName}</h1>
</div>
) : (
<h1 className="typography-d1 flex flex-wrap gap-2">
<span>GraphQLConf</span>
<span className="text-sec-base">{year}</span>
<span className="text-sec-base">
{props.year || props.subtitle}
</span>
</h1>
)}
<div className="flex h-min items-center gap-4">
<span className="typography-body-sm whitespace-pre">
hosted by
</span>
<GraphQLFoundationWordmark width={128} height={34.877} />
<GraphQLFoundationWordmark
width={128}
height={34.877}
className={
colorScheme === "neutral" ? "[&_path]:fill-primary" : ""
}
/>
</div>
</div>

<div className="flex flex-col gap-8">{children}</div>
<div className="flex flex-col gap-8">{props.children}</div>
</div>
</article>
{bottom}
{props.bottom}
</article>
)
}
Expand All @@ -69,40 +101,31 @@ export function HeroDateAndLocation() {
)
}

const maskEven =
"repeating-linear-gradient(to right, transparent, transparent 12px, black 12px, black 24px)"
const maskOdd =
"repeating-linear-gradient(to right, black, black 12px, transparent 12px, transparent 24px)"

export function HeroStripes() {
export interface HeroStripesProps extends StripesDecorationProps {
className?: string
}
export function HeroStripes({ className, ...rest }: HeroStripesProps) {
return (
<ImageLoaded
role="presentation"
image={blurBean}
className="pointer-events-none absolute inset-x-0 bottom-[-385px] top-[-203px] -z-10 translate-y-12 opacity-0 transition duration-[400ms] ease-linear [mask-size:100%_50%] data-[loaded=true]:translate-y-0 data-[loaded=true]:opacity-100 sm:[mask-size:125%] xl:[mask-size:100%]"
className={clsx(
"pointer-events-none absolute inset-x-0 bottom-[-385px] top-[-203px] -z-10 translate-y-12 opacity-0 transition duration-[400ms] ease-linear [mask-size:100%_50%] data-[loaded=true]:translate-y-0 data-[loaded=true]:opacity-100 sm:[mask-size:125%] xl:[mask-size:100%]",
className,
)}
style={{
maskImage: `url(${blurBean.src})`,
WebkitMaskImage: `url(${blurBean.src})`,
// maskSize: "100%", // todo: (very low priority) need the newly exported full blur bean with rotation to match the mobile design 1-1
maskRepeat: "no-repeat",
WebkitMaskRepeat: "no-repeat",
maskPosition: "center",
WebkitMaskPosition: "center",
}}
>
<div
className="absolute inset-0 bg-[linear-gradient(180deg,hsl(var(--color-pri-light))_0%,hsl(319deg_100%_90%_/_0.2)_100%)] dark:bg-[linear-gradient(180deg,hsl(var(--color-pri-dark))_0%,hsl(319_100%_20%_/_1)_100%)]"
style={{
maskImage: maskEven,
WebkitMaskImage: maskEven,
}}
/>
<div
className="absolute inset-0 bg-[linear-gradient(180deg,hsl(319deg_100%_90%_/_0.2)_0%,hsl(var(--color-pri-base))_100%)] dark:bg-[linear-gradient(180deg,hsl(319_100%_30%_/_1)_0%,hsl(var(--color-pri-dark))_100%)]"
style={{
maskImage: maskOdd,
WebkitMaskImage: maskOdd,
}}
<StripesDecoration
evenClassName="bg-[linear-gradient(180deg,hsl(var(--color-pri-light))_0%,hsl(319deg_100%_90%_/_0.2)_100%)] dark:bg-[linear-gradient(180deg,hsl(var(--color-pri-dark))_0%,hsl(319_100%_20%_/_1)_100%)]"
oddClassName="bg-[linear-gradient(180deg,hsl(319deg_100%_90%_/_0.2)_0%,hsl(var(--color-pri-base))_100%)] dark:bg-[linear-gradient(180deg,hsl(319_100%_30%_/_1)_0%,hsl(var(--color-pri-dark))_100%)]"
{...rest}
/>
</ImageLoaded>
)
Expand Down
2 changes: 1 addition & 1 deletion src/app/conf/2025/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default function Layout({
[
{
children: "Code of Conduct",
href: "/conf/2025/resources/#code-of-conduct",
href: "/conf/2025/code-of-conduct",
},
{
children: "Inclusion & Accessibility",
Expand Down
17 changes: 16 additions & 1 deletion src/app/conf/2025/resources/prose.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
& > * {
grid-column: var(--grid-col-content);
}
}

.gql-prose,
.gql-prose-inner {
& h1 {
@apply typography-h2 lg:col-span-full xl:pb-16;
}
Expand All @@ -23,12 +26,24 @@
& > p,
& > ul,
& > ol {
@apply max-w-[var(--prose-width)];
@apply max-w-[var(--prose-width)] text-neu-800;
}

& > p {
@apply text-pretty;
}

& > ul {
@apply list-disc pl-4;
}

& > ol {
@apply list-decimal pl-4;
}
}

.gql-prose-inner {
@apply grid grid-cols-1 gap-6;
}

.gql-sticky-aside {
Expand Down
Loading
Loading