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 ( +
+
+ Upcoming Events +

Join us for livestreams, workshops, and discussions about goose and open source projects.

+
+ + {/* Embedded Calendar */} +