diff --git a/documentation/docusaurus.config.ts b/documentation/docusaurus.config.ts
index f656e5957105..3bcc2e3b3a01 100644
--- a/documentation/docusaurus.config.ts
+++ b/documentation/docusaurus.config.ts
@@ -196,6 +196,10 @@ const config: Config = {
{
title: "Community",
items: [
+ {
+ label: "Spotlight",
+ to: "community",
+ },
{
label: "Discord",
href: "https://discord.gg/block-opensource",
diff --git a/documentation/src/pages/community/data/README.md b/documentation/src/pages/community/data/README.md
new file mode 100644
index 000000000000..6ebcb6c88a67
--- /dev/null
+++ b/documentation/src/pages/community/data/README.md
@@ -0,0 +1,120 @@
+# Community All Stars - Monthly Update Guide
+
+This directory contains the data files for the Community All Stars section on the community page.
+
+## Monthly Update Process
+
+### Step 1: Create New Month Data File
+
+1. Copy `template.json` to create a new file named `MONTH-YEAR.json` (e.g., `june-2025.json`)
+2. Update the data in the new file:
+
+```json
+{
+ "month": "June 2025",
+ "featuredContributors": [
+ {
+ "name": "John Doe",
+ "handle": "johndoe"
+ }
+ ],
+ "risingStars": [
+ {
+ "name": "Jane Smith",
+ "handle": "janesmith"
+ }
+ ],
+ "leaderboard": [
+ { "handle": "johndoe", "rank": 1, "medal": "🥇" },
+ { "handle": "janesmith", "rank": 2, "medal": "🥈" },
+ { "handle": "contributor3", "rank": 3, "medal": "🥉" },
+ { "handle": "contributor4", "rank": 4 }
+ ]
+}
+```
+
+### Step 2: Update Configuration
+
+1. Open `config.json`
+2. Add the new month to the `availableMonths` array:
+
+```json
+{
+ "availableMonths": [
+ {
+ "id": "june-2025",
+ "display": "June 2025",
+ "file": "june-2025.json"
+ }
+ ],
+ "defaultMonth": "june-2025"
+}
+```
+
+3. Update `defaultMonth` to the new month's ID
+
+### Step 3: Update Code Imports
+
+1. Open `../pages/community.tsx`
+2. Add import for the new data file:
+
+```typescript
+import june2025Data from "../data/community/june-2025.json";
+```
+
+3. Add the new data to the `communityDataMap`:
+
+```typescript
+const communityDataMap = {
+ "june-2025": june2025Data,
+ // ... other months
+};
+```
+
+## Data Format
+
+### Community Stars & Team Stars
+- `name`: Full display name
+- `handle`: GitHub username (without @)
+
+### Monthly Leaderboard
+- `handle`: GitHub username (without @)
+- `rank`: Position number (1, 2, 3, etc.)
+- `medal`: Only for top 3 ("🥇", "🥈", "🥉")
+
+## Section Mapping
+
+The JSON data maps to these page sections:
+- `featuredContributors` → **Community Stars** section
+- `risingStars` → **Team Stars** section
+- `leaderboard` → **Monthly Leaderboard** section
+
+## Tips
+
+- Avatar images are automatically generated from GitHub usernames
+- GitHub links are automatically created using the handle
+- The medal field is optional - only include for top 3 positions
+- You can have any number of leaderboard entries
+- Names and handles are case-sensitive
+
+## File Structure
+
+```
+community/
+├── config.json # Main configuration
+├── template.json # Template for new months
+├── april-2025.json # April 2025 data
+├── may-2025.json # May 2025 data
+└── README.md # This file
+```
+
+## Quick Monthly Checklist
+
+- [ ] Copy template.json to new month file
+- [ ] Fill in contributor data for Community Stars
+- [ ] Fill in contributor data for Team Stars
+- [ ] Update Monthly Leaderboard rankings
+- [ ] Update config.json with new month
+- [ ] Add import to community.tsx
+- [ ] Add to communityDataMap
+- [ ] Test the page locally
\ No newline at end of file
diff --git a/documentation/src/pages/community/data/april-2025.json b/documentation/src/pages/community/data/april-2025.json
new file mode 100644
index 000000000000..6a40670a6bfc
--- /dev/null
+++ b/documentation/src/pages/community/data/april-2025.json
@@ -0,0 +1,83 @@
+{
+ "month": "April 2025",
+ "communityStars": [
+ {
+ "name": "Vinny Fiano",
+ "handle": "ynniv"
+ },
+ {
+ "name": "Carine B",
+ "handle": "TBD",
+ "avatarUrl": "https://cdn.discordapp.com/avatars/1177778226957926540/186b0898f793e7292a5b385de35a19fc?size=1024"
+ },
+ {
+ "name": "Best Codes",
+ "handle": "The-Best-Codes"
+ },
+ {
+ "name": "comoyomalove",
+ "handle": "TBD",
+ "avatarUrl": "https://cdn.discordapp.com/avatars/552168841992732673/2d88c30d3e0fc3fda6a3815b819f4546?size=1024"
+ },
+ {
+ "name": "jokellyfenton",
+ "handle": "jokellyfenton"
+ }
+ ],
+ "teamStars": [
+ {
+ "name": "Shea Craig",
+ "handle": "sheagcraig"
+ },
+ {
+ "name": "Jim Bennett",
+ "handle": "jimbobbennett"
+ },
+ {
+ "name": "Oliver",
+ "handle": "opdich"
+ }
+ ],
+ "leaderboard": [
+ { "handle": "yingjiehe-xyz", "rank": 1, "medal": "🥇" },
+ { "handle": "zanesq", "rank": 2, "medal": "🥈" },
+ { "handle": "angiejones", "rank": 3, "medal": "🥉" },
+ { "handle": "kalvinnchau", "rank": 4 },
+ { "handle": "lily-de", "rank": 5 },
+ { "handle": "blackgirlbytes", "rank": 6 },
+ { "handle": "alexhancock", "rank": 7 },
+ { "handle": "zakiali", "rank": 8 },
+ { "handle": "salman1993", "rank": 9 },
+ { "handle": "EbonyLouis", "rank": 10 },
+ { "handle": "iandouglas", "rank": 11 },
+ { "handle": "michaelneale", "rank": 12 },
+ { "handle": "JohnMAustin78", "rank": 13 },
+ { "handle": "wendytang", "rank": 14 },
+ { "handle": "Kvadratni", "rank": 15 },
+ { "handle": "ahau-square", "rank": 16 },
+ { "handle": "nahiyankhan", "rank": 17 },
+ { "handle": "The-Best-Codes", "rank": 18 },
+ { "handle": "baxen", "rank": 19 },
+ { "handle": "laanak08", "rank": 20 },
+ { "handle": "agiuliano-square", "rank": 21 },
+ { "handle": "acekyd", "rank": 22 },
+ { "handle": "taniashiba", "rank": 23 },
+ { "handle": "dbraduan", "rank": 24 },
+ { "handle": "sheagcraig", "rank": 25 },
+ { "handle": "sana-db", "rank": 26 },
+ { "handle": "jimbobbennett", "rank": 27 },
+ { "handle": "lifeizhou-ap", "rank": 28 },
+ { "handle": "alicehau", "rank": 29 },
+ { "handle": "opdich", "rank": 30 },
+ { "handle": "rockwotj", "rank": 31 },
+ { "handle": "alexgleason", "rank": 32 },
+ { "handle": "meenalc", "rank": 33 },
+ { "handle": "ArtBears", "rank": 34 },
+ { "handle": "GlyneG", "rank": 35 },
+ { "handle": "DOsinga", "rank": 36 },
+ { "handle": "omo", "rank": 37 },
+ { "handle": "allisonjoycarter", "rank": 38 },
+ { "handle": "mpaquettePax8", "rank": 39 },
+ { "handle": "capttrousers", "rank": 40 }
+ ]
+}
\ No newline at end of file
diff --git a/documentation/src/pages/community/data/config.json b/documentation/src/pages/community/data/config.json
new file mode 100644
index 000000000000..5fc8a6a86e30
--- /dev/null
+++ b/documentation/src/pages/community/data/config.json
@@ -0,0 +1,15 @@
+{
+ "availableMonths": [
+ {
+ "id": "april-2025",
+ "display": "April 2025",
+ "file": "april-2025.json"
+ },
+ {
+ "id": "may-2025",
+ "display": "May 2025",
+ "file": "may-2025.json"
+ }
+ ],
+ "defaultMonth": "may-2025"
+}
\ No newline at end of file
diff --git a/documentation/src/pages/community/data/may-2025.json b/documentation/src/pages/community/data/may-2025.json
new file mode 100644
index 000000000000..851b0dc53d5b
--- /dev/null
+++ b/documentation/src/pages/community/data/may-2025.json
@@ -0,0 +1,84 @@
+{
+ "month": "May 2025",
+ "communityStars": [
+ {
+ "name": "GitMurf",
+ "handle": "GitMurf"
+ },
+ {
+ "name": "Anil Muppalla",
+ "handle": "anilmuppalla"
+ },
+ {
+ "name": "Ben Walding",
+ "handle": "bwalding"
+ },
+ {
+ "name": "Gustavo Hoirisch",
+ "handle": "gugahoi"
+ },
+ {
+ "name": "Antonio Cheong",
+ "handle": "acheong08"
+ }
+ ],
+ "teamStars": [
+ {
+ "name": "Oliver",
+ "handle": "opdich"
+ },
+ {
+ "name": "Jack Amadeo",
+ "handle": "jamadeo"
+ },
+ {
+ "name": "Shea Craig",
+ "handle": "sheagcraig"
+ }
+ ],
+ "leaderboard": [
+ { "handle": "blackgirlbytes", "rank": 1, "medal": "🥇" },
+ { "handle": "zanesq", "rank": 2, "medal": "🥈" },
+ { "handle": "michaelneale", "rank": 3, "medal": "🥉" },
+ { "handle": "angiejones", "rank": 4 },
+ { "handle": "Kvadratni", "rank": 5 },
+ { "handle": "lifeizhou-ap", "rank": 6 },
+ { "handle": "dianed-square", "rank": 7 },
+ { "handle": "yingjiehe-xyz", "rank": 8 },
+ { "handle": "salman1993", "rank": 9 },
+ { "handle": "ahau-square", "rank": 10 },
+ { "handle": "iandouglas", "rank": 11 },
+ { "handle": "emma-squared", "rank": 12 },
+ { "handle": "dbraduan", "rank": 13 },
+ { "handle": "lily-de", "rank": 14 },
+ { "handle": "alexhancock", "rank": 15 },
+ { "handle": "EbonyLouis", "rank": 16 },
+ { "handle": "wendytang", "rank": 17 },
+ { "handle": "The-Best-Codes", "rank": 18 },
+ { "handle": "opdich", "rank": 19 },
+ { "handle": "agiuliano-square", "rank": 20 },
+ { "handle": "patrickReiis", "rank": 21 },
+ { "handle": "kalvinnchau", "rank": 22 },
+ { "handle": "acekyd", "rank": 23 },
+ { "handle": "nahiyankhan", "rank": 24 },
+ { "handle": "taniashiba", "rank": 25 },
+ { "handle": "JohnMAustin78", "rank": 26 },
+ { "handle": "sheagcraig", "rank": 27 },
+ { "handle": "alicehau", "rank": 28 },
+ { "handle": "bwalding", "rank": 29 },
+ { "handle": "jamadeo", "rank": 30 },
+ { "handle": "rockwotj", "rank": 31 },
+ { "handle": "danielzayas", "rank": 32 },
+ { "handle": "svenstaro", "rank": 33 },
+ { "handle": "adaug", "rank": 34 },
+ { "handle": "loganmoseley", "rank": 35 },
+ { "handle": "tiborvass", "rank": 36 },
+ { "handle": "xuv", "rank": 37 },
+ { "handle": "anilmuppalla", "rank": 38 },
+ { "handle": "spencrmartin", "rank": 39 },
+ { "handle": "gknoblauch", "rank": 40 },
+ { "handle": "acheong08", "rank": 41 },
+ { "handle": "faces-of-eth", "rank": 42 },
+ { "handle": "wesbillman", "rank": 43 }
+ ]
+}
\ No newline at end of file
diff --git a/documentation/src/pages/community/data/template.json b/documentation/src/pages/community/data/template.json
new file mode 100644
index 000000000000..4f45ac238dc3
--- /dev/null
+++ b/documentation/src/pages/community/data/template.json
@@ -0,0 +1,54 @@
+{
+ "month": "MONTH YEAR",
+ "communityStars": [
+ {
+ "name": "Full Name 1",
+ "handle": "github-username-1"
+ },
+ {
+ "name": "Full Name 2",
+ "handle": "github-username-2"
+ },
+ {
+ "name": "Full Name 3",
+ "handle": "github-username-3"
+ },
+ {
+ "name": "Full Name 4",
+ "handle": "github-username-4"
+ },
+ {
+ "name": "Full Name 5",
+ "handle": "github-username-5"
+ }
+ ],
+ "teamStars": [
+ {
+ "name": "Full Name 1",
+ "handle": "github-username-1"
+ },
+ {
+ "name": "Full Name 2",
+ "handle": "github-username-2"
+ },
+ {
+ "name": "Full Name 3",
+ "handle": "github-username-3"
+ },
+ {
+ "name": "Full Name 4",
+ "handle": "github-username-4"
+ },
+ {
+ "name": "Full Name 5",
+ "handle": "github-username-5"
+ }
+ ],
+ "leaderboard": [
+ { "handle": "github-username-1", "rank": 1, "medal": "🥇" },
+ { "handle": "github-username-2", "rank": 2, "medal": "🥈" },
+ { "handle": "github-username-3", "rank": 3, "medal": "🥉" },
+ { "handle": "github-username-4", "rank": 4 },
+ { "handle": "github-username-5", "rank": 5 }
+ ]
+}
\ No newline at end of file
diff --git a/documentation/src/pages/community/index.tsx b/documentation/src/pages/community/index.tsx
new file mode 100644
index 000000000000..c3ee2c5f850d
--- /dev/null
+++ b/documentation/src/pages/community/index.tsx
@@ -0,0 +1,266 @@
+import type { ReactNode } from "react";
+import React from "react";
+import Link from "@docusaurus/Link";
+import Layout from "@theme/Layout";
+import Heading from "@theme/Heading";
+
+// Import community data
+import communityConfig from "./data/config.json";
+import april2025Data from "./data/april-2025.json";
+import may2025Data from "./data/may-2025.json";
+
+// Create a data map for easy access
+const communityDataMap = {
+ "april-2025": april2025Data,
+ "may-2025": may2025Data,
+};
+
+function UpcomingEventsSection() {
+ return (
+ Join us for livestreams, workshops, and discussions about goose and open source projects.
+ Want to join us on a livestream or have ideas for future events?
+ Reach out to the team on Discord.
+ Every month, we take a moment and celebrate the open source community. Here are the top contributors and community champions!
+ Top 5 Contributors from the open source community!
+
+ Top 5 Contributors from all Block teams!
+
+ Rankings of all goose contributors getting loose this month!
+
+ Thank you all for contributing! ❤️
+
+ Future Community Star
+
+ ) : (
+