This is an automated email from the ASF dual-hosted git repository.
kparisa pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iggy-website.git
The following commit(s) were added to refs/heads/main by this push:
new d76449bc Add Community section and sub pages for Team, How to
Contribute, Become a Committer, How to Release, Brand Kit
d76449bc is described below
commit d76449bc9fabe8a4e3103d477895cf7189071bcb
Author: kparisa <[email protected]>
AuthorDate: Fri Jul 31 21:54:21 2026 -0700
Add Community section and sub pages for Team, How to Contribute, Become
a Committer, How to Release, Brand Kit
---
package.json | 1 +
.../community/_components/community-layout.tsx | 114 ++++++++++++++
.../(site)/community/become-a-committer/page.tsx | 80 ++++++++++
src/app/(site)/community/brand-kit/page.tsx | 117 ++++++++++++++
.../(site)/community/how-to-contribute/page.tsx | 95 +++++++++++
src/app/(site)/community/how-to-release/page.tsx | 85 ++++++++++
src/app/(site)/community/page.tsx | 60 +++++++
src/app/(site)/community/team/page.tsx | 174 +++++++++++++++++++++
src/components/community-dropdown.tsx | 89 +++++++++++
src/lib/layout.shared.tsx | 24 +++
10 files changed, 839 insertions(+)
diff --git a/package.json b/package.json
index cc1c0dcf..f5dcc95e 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,7 @@
"version": "0.1.0",
"private": true,
"scripts": {
+ "predev": "node scripts/fetch-github-stars.mjs",
"dev": "next dev",
"prebuild": "node scripts/fetch-github-stars.mjs",
"build": "next build",
diff --git a/src/app/(site)/community/_components/community-layout.tsx
b/src/app/(site)/community/_components/community-layout.tsx
new file mode 100644
index 00000000..205eced6
--- /dev/null
+++ b/src/app/(site)/community/_components/community-layout.tsx
@@ -0,0 +1,114 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import Link from "next/link";
+
+export const communityPages = [
+ {
+ title: "Team",
+ href: "/community/team",
+ description: "Meet the people stewarding Apache Iggy.",
+ },
+ {
+ title: "Brand Kit",
+ href: "/community/brand-kit",
+ description: "Use Apache Iggy names and marks correctly.",
+ },
+ {
+ title: "Become a Committer",
+ href: "/community/become-a-committer",
+ description: "Understand the path from contributor to committer.",
+ },
+ {
+ title: "How to Contribute",
+ href: "/community/how-to-contribute",
+ description: "Find the right first issue, discussion or doc task.",
+ },
+ {
+ title: "How to Release",
+ href: "/community/how-to-release",
+ description: "Follow the release-manager checklist.",
+ },
+];
+
+export function CommunityLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+ <main className="min-h-screen px-6 py-20 md:px-12">
+ <div className="mx-auto grid max-w-6xl gap-12 lg:grid-cols-[16rem_1fr]">
+ <aside className="lg:sticky lg:top-24 lg:self-start">
+ <Link
+ href="/community"
+ className="mb-5 block text-sm font-semibold uppercase
tracking-wide text-fd-muted-foreground transition-colors
hover:text-fd-foreground"
+ >
+ Community
+ </Link>
+ <nav className="space-y-1">
+ {communityPages.map((page) => (
+ <Link
+ key={page.href}
+ href={page.href}
+ className="block rounded-lg px-3 py-2 text-sm
text-fd-muted-foreground transition-colors hover:bg-fd-accent/60
hover:text-fd-foreground"
+ >
+ {page.title}
+ </Link>
+ ))}
+ </nav>
+ </aside>
+ <div className="min-w-0">{children}</div>
+ </div>
+ </main>
+ );
+}
+
+export function CommunityHeader({
+ title,
+ description,
+}: {
+ title: string;
+ description: string;
+}) {
+ return (
+ <header className="mb-12">
+ <h1 className="mb-4 text-4xl font-extrabold tracking-tight
text-fd-foreground md:text-5xl">
+ {title}
+ </h1>
+ <p className="max-w-3xl text-lg leading-relaxed
text-fd-muted-foreground">
+ {description}
+ </p>
+ </header>
+ );
+}
+
+export function ExternalLink({
+ href,
+ children,
+}: {
+ href: string;
+ children: React.ReactNode;
+}) {
+ return (
+ <Link href={href} className="text-fd-primary hover:underline">
+ {children}
+ </Link>
+ );
+}
diff --git a/src/app/(site)/community/become-a-committer/page.tsx
b/src/app/(site)/community/become-a-committer/page.tsx
new file mode 100644
index 00000000..f8ed32b8
--- /dev/null
+++ b/src/app/(site)/community/become-a-committer/page.tsx
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import type { Metadata } from "next";
+import {
+ CommunityHeader,
+ CommunityLayout,
+ ExternalLink,
+} from "../_components/community-layout";
+
+export const metadata: Metadata = {
+ title: "Become a Committer",
+ description: "How contributors become Apache Iggy committers.",
+};
+
+const practices = [
+ "Contribute useful changes over time: code, tests, documentation, examples,
benchmarks, reviews or release help.",
+ "Discuss decisions in public on issues, pull requests and the dev mailing
list.",
+ "Review other contributors' work and help keep conversations constructive.",
+ "Show good judgment around compatibility, licensing, security and release
quality.",
+];
+
+export default function BecomeACommitterPage() {
+ return (
+ <CommunityLayout>
+ <CommunityHeader
+ title="Become a Committer"
+ description="Committership is granted by the project when someone has
earned trust through sustained, constructive contributions."
+ />
+
+ <p className="mb-8 max-w-3xl text-base leading-relaxed
text-fd-muted-foreground">
+ There is no application form, checklist or required timeline. The PPMC
+ looks for contributors who make the project healthier and who can be
+ trusted with repository write access.
+ </p>
+
+ <h2 className="mb-4 text-2xl font-bold text-fd-foreground">
+ What Helps
+ </h2>
+ <ul className="list-disc space-y-2 pl-6 text-base leading-relaxed
text-fd-muted-foreground">
+ {practices.map((practice) => (
+ <li key={practice}>{practice}</li>
+ ))}
+ </ul>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ How It Works
+ </h2>
+ <p className="max-w-3xl text-base leading-relaxed
text-fd-muted-foreground">
+ Existing PPMC members privately discuss and vote on new committers. If
+ the vote passes and the contributor accepts, Apache account setup and
+ project access follow the ASF process.
+ </p>
+
+ <p className="mt-6 max-w-3xl text-sm leading-relaxed
text-fd-muted-foreground">
+ For broader ASF guidance, read Apache Community Development's{" "}
+ <ExternalLink
href="https://community.apache.org/contributors/becomingacommitter.html">
+ Becoming a Committer
+ </ExternalLink>{" "}
+ page.
+ </p>
+ </CommunityLayout>
+ );
+}
diff --git a/src/app/(site)/community/brand-kit/page.tsx
b/src/app/(site)/community/brand-kit/page.tsx
new file mode 100644
index 00000000..b94db237
--- /dev/null
+++ b/src/app/(site)/community/brand-kit/page.tsx
@@ -0,0 +1,117 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import Image from "next/image";
+import type { Metadata } from "next";
+import {
+ CommunityHeader,
+ CommunityLayout,
+ ExternalLink,
+} from "../_components/community-layout";
+
+export const metadata: Metadata = {
+ title: "Brand Kit",
+ description: "Apache Iggy logo assets and brand guidance.",
+};
+
+const logoAssets = [
+ {
+ title: "Dark background",
+ src: "/img/apache-iggy-color-darkbg0.5x.png",
+ href: "/img/apache-iggy-color-darkbg0.5x.png",
+ },
+ {
+ title: "Light background",
+ src: "/img/apache-iggy-color-lightbg0.5x.png",
+ href: "/img/apache-iggy-color-lightbg0.5x.png",
+ },
+ {
+ title: "SVG mark",
+ src: "/img/iggy-apache-color-darkbg.svg",
+ href: "/img/iggy-apache-color-darkbg.svg",
+ },
+];
+
+export default function BrandKitPage() {
+ return (
+ <CommunityLayout>
+ <CommunityHeader
+ title="Brand Kit"
+ description="Use these resources when presenting, writing about or
linking to Apache Iggy. Please follow Apache trademark and branding policy when
using project marks."
+ />
+
+ <div className="grid gap-4 md:grid-cols-3">
+ {logoAssets.map((asset) => (
+ <a
+ key={asset.href}
+ href={asset.href}
+ className="rounded-xl border border-fd-border bg-fd-card p-5
transition-colors hover:bg-fd-accent/60"
+ >
+ <div className="mb-4 flex h-28 items-center justify-center
rounded-lg bg-fd-background p-4">
+ <Image
+ src={asset.src}
+ alt={asset.title}
+ width={220}
+ height={72}
+ className="max-h-20 w-auto object-contain"
+ unoptimized
+ />
+ </div>
+ <h2 className="text-base font-bold text-fd-foreground">
+ {asset.title}
+ </h2>
+ </a>
+ ))}
+ </div>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ Naming
+ </h2>
+ <ul className="list-disc space-y-2 pl-6 text-base leading-relaxed
text-fd-muted-foreground">
+ <li>
+ Use <strong className="text-fd-foreground">Apache Iggy</strong> on
+ first mention.
+ </li>
+ <li>
+ While the project is incubating, use{" "}
+ <strong className="text-fd-foreground">
+ Apache Iggy (Incubating)
+ </strong>{" "}
+ where formal ASF context is needed.
+ </li>
+ <li>
+ Do not imply that non-release artifacts, nightly builds or downstream
+ packages are official Apache releases.
+ </li>
+ </ul>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ Trademark Guidance
+ </h2>
+ <p className="max-w-3xl text-base leading-relaxed
text-fd-muted-foreground">
+ Apache project names and logos are trademarks of the Apache Software
+ Foundation. For complete guidance, see the{" "}
+ <ExternalLink href="https://www.apache.org/foundation/marks/">
+ ASF trademark policy
+ </ExternalLink>
+ .
+ </p>
+ </CommunityLayout>
+ );
+}
diff --git a/src/app/(site)/community/how-to-contribute/page.tsx
b/src/app/(site)/community/how-to-contribute/page.tsx
new file mode 100644
index 00000000..3968c277
--- /dev/null
+++ b/src/app/(site)/community/how-to-contribute/page.tsx
@@ -0,0 +1,95 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import type { Metadata } from "next";
+import {
+ CommunityHeader,
+ CommunityLayout,
+ ExternalLink,
+} from "../_components/community-layout";
+
+export const metadata: Metadata = {
+ title: "How to Contribute",
+ description: "Start contributing to Apache Iggy.",
+};
+
+const contributionAreas = [
+ "Fix bugs or improve performance in the server, SDKs, connectors or
tooling.",
+ "Improve documentation, examples, diagrams and release notes.",
+ "Report reproducible issues with version, platform, logs and a minimal test
case.",
+ "Review pull requests and help validate behavior across supported
transports.",
+ "Join design discussions and propose changes before starting large work.",
+];
+
+export default function HowToContributePage() {
+ return (
+ <CommunityLayout>
+ <CommunityHeader
+ title="How to Contribute"
+ description="Apache Iggy welcomes contributions from people using,
testing, documenting and building the project."
+ />
+
+ <h2 className="mb-4 text-2xl font-bold text-fd-foreground">
+ Good Places to Start
+ </h2>
+ <ul className="list-disc space-y-2 pl-6 text-base leading-relaxed
text-fd-muted-foreground">
+ {contributionAreas.map((area) => (
+ <li key={area}>{area}</li>
+ ))}
+ </ul>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ Project Channels
+ </h2>
+ <div className="grid gap-4 md:grid-cols-2">
+ <section className="rounded-xl border border-fd-border bg-fd-card p-5">
+ <h3 className="mb-2 text-lg font-bold text-fd-foreground">Code</h3>
+ <p className="text-sm leading-relaxed text-fd-muted-foreground">
+ Use the{" "}
+ <ExternalLink href="https://github.com/apache/iggy">
+ Apache Iggy repository
+ </ExternalLink>{" "}
+ for source code, pull requests and issue tracking.
+ </p>
+ </section>
+ <section className="rounded-xl border border-fd-border bg-fd-card p-5">
+ <h3 className="mb-2 text-lg font-bold text-fd-foreground">
+ Discussion
+ </h3>
+ <p className="text-sm leading-relaxed text-fd-muted-foreground">
+ Use <code>[email protected]</code> for project decisions and{"
"}
+ <ExternalLink href="https://discord.gg/apache-iggy">
+ Discord
+ </ExternalLink>{" "}
+ for informal conversation.
+ </p>
+ </section>
+ </div>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ Before Opening a Pull Request
+ </h2>
+ <p className="max-w-3xl text-base leading-relaxed
text-fd-muted-foreground">
+ Keep changes focused, explain why the change matters, include tests or
+ reproduction notes when possible, and make sure any large design change
+ has been discussed publicly first.
+ </p>
+ </CommunityLayout>
+ );
+}
diff --git a/src/app/(site)/community/how-to-release/page.tsx
b/src/app/(site)/community/how-to-release/page.tsx
new file mode 100644
index 00000000..86168042
--- /dev/null
+++ b/src/app/(site)/community/how-to-release/page.tsx
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import type { Metadata } from "next";
+import {
+ CommunityHeader,
+ CommunityLayout,
+ ExternalLink,
+} from "../_components/community-layout";
+
+export const metadata: Metadata = {
+ title: "How to Release",
+ description: "Release guidance for Apache Iggy release managers.",
+};
+
+const releaseSteps = [
+ "Prepare the release candidate from a clean source state and update
versioned metadata.",
+ "Build source artifacts, checksums and OpenPGP signatures.",
+ "Verify licenses, NOTICE files, dependency metadata and source-only release
contents.",
+ "Call a vote on the dev mailing list and allow the required voting period.",
+ "After approval, publish artifacts to Apache distribution infrastructure and
update the website.",
+ "Announce the release only after mirrors and public metadata have settled.",
+];
+
+export default function HowToReleasePage() {
+ return (
+ <CommunityLayout>
+ <CommunityHeader
+ title="How to Release"
+ description="Apache releases are source releases voted on by the
project community. This page gives release managers a high-level checklist for
Apache Iggy."
+ />
+
+ <h2 className="mb-4 text-2xl font-bold text-fd-foreground">
+ Release Checklist
+ </h2>
+ <ol className="list-decimal space-y-2 pl-6 text-base leading-relaxed
text-fd-muted-foreground">
+ {releaseSteps.map((step) => (
+ <li key={step}>{step}</li>
+ ))}
+ </ol>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ Required Reading
+ </h2>
+ <ul className="list-disc space-y-2 pl-6 text-base leading-relaxed
text-fd-muted-foreground">
+ <li>
+ <ExternalLink
href="https://incubator.apache.org/guides/releasemanagement.html">
+ Apache Incubator release management
+ </ExternalLink>
+ </li>
+ <li>
+ <ExternalLink
href="https://www.apache.org/legal/release-policy.html">
+ ASF release policy
+ </ExternalLink>
+ </li>
+ <li>
+ <ExternalLink href="https://www.apache.org/dev/release-distribution">
+ ASF release distribution
+ </ExternalLink>
+ </li>
+ </ul>
+
+ <p className="mt-8 max-w-3xl text-sm leading-relaxed
text-fd-muted-foreground">
+ Because Apache Iggy is incubating, release managers should make sure
the
+ release follows both project practice and Apache Incubator policy.
+ </p>
+ </CommunityLayout>
+ );
+}
diff --git a/src/app/(site)/community/page.tsx
b/src/app/(site)/community/page.tsx
new file mode 100644
index 00000000..c1d41bb5
--- /dev/null
+++ b/src/app/(site)/community/page.tsx
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import Link from "next/link";
+import type { Metadata } from "next";
+import {
+ CommunityHeader,
+ CommunityLayout,
+ communityPages,
+} from "./_components/community-layout";
+
+export const metadata: Metadata = {
+ title: "Community",
+ description:
+ "Join the Apache Iggy community and learn how to contribute, release and
use project brand resources.",
+};
+
+export default function CommunityPage() {
+ return (
+ <CommunityLayout>
+ <CommunityHeader
+ title="Community"
+ description="Apache Iggy is built in the open by contributors,
committers, mentors and users. These pages collect the people, practices and
resources that keep the project moving."
+ />
+
+ <div className="grid gap-4 md:grid-cols-2">
+ {communityPages.map((page) => (
+ <Link
+ key={page.href}
+ href={page.href}
+ className="rounded-xl border border-fd-border bg-fd-card p-5
transition-colors hover:bg-fd-accent/60"
+ >
+ <h2 className="mb-2 text-xl font-bold text-fd-foreground">
+ {page.title}
+ </h2>
+ <p className="text-sm leading-relaxed text-fd-muted-foreground">
+ {page.description}
+ </p>
+ </Link>
+ ))}
+ </div>
+ </CommunityLayout>
+ );
+}
diff --git a/src/app/(site)/community/team/page.tsx
b/src/app/(site)/community/team/page.tsx
new file mode 100644
index 00000000..34b0abaf
--- /dev/null
+++ b/src/app/(site)/community/team/page.tsx
@@ -0,0 +1,174 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import type { Metadata } from "next";
+import {
+ CommunityHeader,
+ CommunityLayout,
+ ExternalLink,
+} from "../_components/community-layout";
+
+export const metadata: Metadata = {
+ title: "Team",
+ description: "Apache Iggy PPMC members, mentors and committers.",
+};
+
+const members = [
+ { name: "Grzegorz Koszyk", apacheId: "gkoszyk", roles: ["PPMC Member"] },
+ { name: "Hubert Gruszecki", apacheId: "hgruszecki", roles: ["PPMC Member"] },
+ { name: "Hulk Lin", apacheId: "hulk", roles: ["Mentor", "PPMC Member"] },
+ { name: "Kranti Parisa", apacheId: "kranti", roles: ["PPMC Member"] },
+ { name: "Patryk Huzarski", apacheId: "patryk", roles: ["PPMC Member"] },
+ { name: "Piotr Gankiewicz", apacheId: "piotr", roles: ["PPMC Member"] },
+ { name: "Zili Chen", apacheId: "tison", roles: ["Mentor", "PPMC Member"] },
+ { name: "Hao Ding", apacheId: "xuanwo", roles: ["Mentor", "PPMC Member"] },
+ {
+ name: "Yonik Seeley",
+ apacheId: "yonik",
+ roles: ["Champion", "Mentor", "PPMC Member"],
+ },
+ { name: "Atharva Lade", apacheId: "atharva", roles: ["Committer"] },
+ {
+ name: "Bakytgerey Ashirbekov",
+ apacheId: "bashirbekov",
+ roles: ["Committer"],
+ },
+ { name: "Bartosz Ciesla", apacheId: "bciesla", roles: ["Committer"] },
+ { name: "Kyle Downey", apacheId: "kdowney", roles: ["Committer"] },
+ { name: "Krishna Vishal", apacheId: "krishna", roles: ["Committer"] },
+ { name: "Lukasz Zborek", apacheId: "lzborek", roles: ["Committer"] },
+ { name: "Maciej Modzelewski", apacheId: "maciej", roles: ["Committer"] },
+ {
+ name: "Raveendra Yerraguntla",
+ apacheId: "raviyerraguntla",
+ roles: ["Committer"],
+ },
+ { name: "Rimuksh Kansal", apacheId: "rimuksh", roles: ["Committer"] },
+ { name: "Thibaut Lambert", apacheId: "t1b0", roles: ["Committer"] },
+];
+
+const roleDescriptions = [
+ {
+ title: "Champion",
+ body: "The champion helps introduce the podling to the Apache Incubator
and supports the project through incubation.",
+ },
+ {
+ title: "Mentor",
+ body: "Mentors are experienced Apache members who guide the podling on
Apache governance, releases, community health and ASF policy.",
+ },
+ {
+ title: "PPMC Member",
+ body: "The Podling Project Management Committee stewards the project while
it is in incubation, including community growth, releases and project
oversight.",
+ },
+ {
+ title: "Committer",
+ body: "Committers have write access to project repositories and help
review, merge, test, document and discuss project work in public.",
+ },
+];
+
+export default function TeamPage() {
+ return (
+ <CommunityLayout>
+ <CommunityHeader
+ title="Team"
+ description="We would like to thank the members, mentors and
committers who help build Apache Iggy and guide the project through incubation."
+ />
+
+ <p className="mb-8 max-w-3xl text-base leading-relaxed
text-fd-muted-foreground">
+ This page mirrors the public Apache roster for convenience. The
canonical
+ project roster is maintained by the Apache Software Foundation on{" "}
+ <ExternalLink
href="https://people.apache.org/phonebook.html?podling=iggy">
+ people.apache.org
+ </ExternalLink>
+ .
+ </p>
+
+ <h2 className="mb-4 text-2xl font-bold text-fd-foreground">Members</h2>
+ <div className="overflow-x-auto rounded-xl border border-fd-border">
+ <table className="w-full text-left text-sm text-fd-foreground">
+ <thead>
+ <tr className="bg-fd-accent/60">
+ <th className="border-b border-fd-border px-5 py-3.5 text-xs
font-semibold uppercase tracking-wide text-fd-muted-foreground">
+ Public Name
+ </th>
+ <th className="border-b border-fd-border px-5 py-3.5 text-xs
font-semibold uppercase tracking-wide text-fd-muted-foreground">
+ Apache ID
+ </th>
+ <th className="border-b border-fd-border px-5 py-3.5 text-xs
font-semibold uppercase tracking-wide text-fd-muted-foreground">
+ Role(s)
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {members.map((member) => (
+ <tr
+ key={member.apacheId}
+ className="border-b border-fd-border/50 transition-colors
last:border-b-0 hover:bg-fd-accent/30"
+ >
+ <td className="px-5 py-4 font-semibold">{member.name}</td>
+ <td className="px-5 py-4">
+ <ExternalLink
+
href={`https://people.apache.org/committer-index.html#${member.apacheId}`}
+ >
+ {member.apacheId}
+ </ExternalLink>
+ </td>
+ <td className="px-5 py-4 text-fd-muted-foreground">
+ {member.roles.join(", ")}
+ </td>
+ </tr>
+ ))}
+ </tbody>
+ </table>
+ </div>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ Roles
+ </h2>
+ <div className="grid gap-4 md:grid-cols-2">
+ {roleDescriptions.map((role) => (
+ <section
+ key={role.title}
+ className="rounded-xl border border-fd-border bg-fd-card p-5"
+ >
+ <h3 className="mb-2 text-lg font-bold text-fd-foreground">
+ {role.title}
+ </h3>
+ <p className="text-sm leading-relaxed text-fd-muted-foreground">
+ {role.body}
+ </p>
+ </section>
+ ))}
+ </div>
+
+ <h2 className="mb-4 mt-12 text-2xl font-bold text-fd-foreground">
+ Contributors
+ </h2>
+ <p className="max-w-3xl text-base leading-relaxed
text-fd-muted-foreground">
+ Many more people contribute through issues, pull requests, discussions,
+ testing, documentation and community support. You can find a broader
+ contributor list in the{" "}
+ <ExternalLink
href="https://github.com/apache/iggy/graphs/contributors">
+ Apache Iggy GitHub repository
+ </ExternalLink>
+ .
+ </p>
+ </CommunityLayout>
+ );
+}
diff --git a/src/components/community-dropdown.tsx
b/src/components/community-dropdown.tsx
new file mode 100644
index 00000000..944435d1
--- /dev/null
+++ b/src/components/community-dropdown.tsx
@@ -0,0 +1,89 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+"use client";
+
+import { useEffect, useRef, useState } from "react";
+import Link from "next/link";
+
+export const communityLinks = [
+ { text: "Team", url: "/community/team" },
+ { text: "How to Contribute", url: "/community/how-to-contribute" },
+ { text: "Become a Committer", url: "/community/become-a-committer" },
+ { text: "How to Release", url: "/community/how-to-release" },
+ { text: "Brand Kit", url: "/community/brand-kit" },
+];
+
+export function CommunityDropdown() {
+ const [open, setOpen] = useState(false);
+ const ref = useRef<HTMLDivElement>(null);
+
+ useEffect(() => {
+ function handleClick(e: MouseEvent) {
+ if (ref.current && !ref.current.contains(e.target as Node)) {
+ setOpen(false);
+ }
+ }
+
+ document.addEventListener("mousedown", handleClick);
+ return () => document.removeEventListener("mousedown", handleClick);
+ }, []);
+
+ return (
+ <div ref={ref} className="relative">
+ <button
+ onClick={() => setOpen(!open)}
+ className="inline-flex items-center gap-1 rounded-md px-2.5 py-1.5
text-sm font-medium text-fd-muted-foreground transition-colors
hover:text-fd-foreground"
+ aria-expanded={open}
+ >
+ Community
+ <svg
+ width="10"
+ height="10"
+ viewBox="0 0 10 10"
+ className={`transition-transform ${open ? "rotate-180" : ""}`}
+ aria-hidden="true"
+ >
+ <path
+ d="M2 4l3 3 3-3"
+ fill="none"
+ stroke="currentColor"
+ strokeLinecap="round"
+ strokeLinejoin="round"
+ strokeWidth="1.5"
+ />
+ </svg>
+ </button>
+ {open && (
+ <div className="absolute left-0 top-full z-50 mt-1 min-w-[190px]
rounded-lg border border-fd-border bg-fd-popover py-1 shadow-lg">
+ {communityLinks.map((link) => (
+ <Link
+ key={link.url}
+ href={link.url}
+ className="block px-3.5 py-1.5 text-sm text-fd-muted-foreground
transition-colors hover:bg-fd-accent hover:text-fd-foreground"
+ onClick={() => setOpen(false)}
+ >
+ {link.text}
+ </Link>
+ ))}
+ </div>
+ )}
+ </div>
+ );
+}
diff --git a/src/lib/layout.shared.tsx b/src/lib/layout.shared.tsx
index f9ce32d5..cdbd4f28 100644
--- a/src/lib/layout.shared.tsx
+++ b/src/lib/layout.shared.tsx
@@ -23,11 +23,29 @@ import { Logo } from "@/components/logo";
import { GitHubStars } from "@/components/github-stars";
import { ASFDropdown } from "@/components/asf-dropdown";
import { ASFMobileLinks } from "@/components/asf-mobile-links";
+import {
+ CommunityDropdown,
+ communityLinks,
+} from "@/components/community-dropdown";
+
+const communityMobileMenu = {
+ type: "menu" as const,
+ text: "Community",
+ url: "/community",
+ on: "menu" as const,
+ items: communityLinks,
+};
const sharedLinks: BaseLayoutProps["links"] = [
{ text: "Docs", url: "/docs" },
{ text: "Blogs", url: "/blogs" },
{ text: "Downloads", url: "/downloads" },
+ {
+ type: "custom",
+ on: "nav",
+ children: <CommunityDropdown />,
+ },
+ communityMobileMenu,
{
text: "Benchmarks",
url: "https://benchmarks.iggy.apache.org",
@@ -96,6 +114,12 @@ export function docsOptions(): BaseLayoutProps {
{ text: "Home", url: "/" },
{ text: "Blogs", url: "/blogs" },
{ text: "Downloads", url: "/downloads" },
+ {
+ type: "custom",
+ on: "nav",
+ children: <CommunityDropdown />,
+ },
+ communityMobileMenu,
{
type: "custom",
on: "nav",