Skip to content

Conversation

@Shubhashish-Chakraborty
Copy link

@Shubhashish-Chakraborty Shubhashish-Chakraborty commented Dec 5, 2025

This PR adds a new /community/contributors page to the AsyncAPI website.

Ive discussed everything about it in #4658 , So i would urge y'all to check it out.😄

Changes made:

image

working (Do watch this 50 Secondrecording of the final working version):

ContributorsPagePR.mp4

Note:

  • Installed/Added a dependecy: framer-motion.
  • Added an Icon : GitFork : coz no icon was related to this.
  • I guess there needed a screenshot of the resultant page like in the newsroom and all, so taken screenshot of the contributors page and added in the /public/img/social/community-contributors.webp

And now i would love to know tweakings and changes from maintainers and the community 😄

Thankyou!

Related issue(s): #4658

Summary by CodeRabbit

  • New Features
    • Added a Contributors page under Community with navigation entry.
    • Searchable, paginated list of AsyncAPI repositories showing name, description, stars, forks and last updated.
    • View contributors for each repository with avatars and client-side username filtering.
    • Responsive layouts with smooth animations and enhanced header/hero visuals.

✏️ Tip: You can customize this high-level summary in your review settings.

@netlify
Copy link

netlify bot commented Dec 5, 2025

Deploy Preview for asyncapi-website ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit c44a62c
🔍 Latest deploy log https://app.netlify.com/projects/asyncapi-website/deploys/693d6bca9019590008bbc0cc
😎 Deploy Preview https://deploy-preview-4682--asyncapi-website.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 5, 2025

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

Adds a new Contributors feature: a React page that lists AsyncAPI GitHub repositories with search and pagination, lets users select a repo to load its contributors (with client-side username filtering), plus a new Git fork icon, navigation entry, Next.js page, and framer-motion dependency.

Changes

Cohort / File(s) Summary
Contributors UI & page
components/contributors/Contributors.tsx, pages/community/contributors.tsx
New React component (default export) that fetches AsyncAPI repositories (pagination, search), loads per-repo contributors (with client-side username filter), handles loading/errors, and is wrapped by a Next.js page using GenericLayout.
Icon
components/icons/GitFork.tsx
New SVG React component IconGitFork (default export) rendering a git fork icon with optional className and style props.
Navigation
components/navigation/communityItems.tsx
Added a "Contributors" navigation item linking to /community/contributors and imported the users icon.
Dependencies
package.json
Added framer-motion dependency (version ^12.23.25) for animations.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Browser
    participant Page as Contributors Page
    participant GH as GitHub API
    participant UI as UI Renderer

    User->>Browser: Navigate to /community/contributors
    Browser->>Page: mount
    Page->>GH: fetch repositories (page, per_page)
    GH-->>Page: repositories list + metadata
    Page->>UI: render repositories list (search, pagination controls)

    User->>UI: Search or change page
    UI->>Page: update filters/pagination
    Page->>Page: filter repos (client-side) / fetch new page

    User->>UI: Select repository
    UI->>Page: request contributors for repo
    Page->>GH: fetch contributors for repo
    GH-->>Page: contributors list
    Page->>UI: render contributors (with avatar, counts)

    User->>UI: Filter contributors by username
    UI->>Page: apply contributor filter
    Page->>UI: render filtered contributors
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Pay attention to: repo/contributor fetch logic and pagination, error/loading states, GitHub API rate/error handling, framer-motion usage in UI.

Possibly related issues

Possibly related PRs

Suggested reviewers

  • derberg
  • devilkiller-ag
  • akshatnema
  • sambhavgupta0705
  • vishvamsinh28
  • anshgoyalevil
  • asyncapi-bot-eve
  • Mayaleeeee

Poem

🐰
I hopped to fetch the repos bright,
Listed stars and forks in light,
I nudged the nav and drew a fork,
Called contributors after the fork,
Happy hops — the community’s in sight!

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and concisely summarizes the main change: adding a new centralized contributors page to the AsyncAPI website.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Shubhashish-Chakraborty Shubhashish-Chakraborty changed the title Added a centralized contributors page feat: Add a centralized contributors page Dec 5, 2025
@asyncapi-bot
Copy link
Contributor

asyncapi-bot commented Dec 5, 2025

⚡️ Lighthouse report for the changes in this PR:

Category Score
🔴 Performance 39
🟢 Accessibility 98
🟢 Best practices 92
🟢 SEO 100
🔴 PWA 33

Lighthouse ran on https://deploy-preview-4682--asyncapi-website.netlify.app/

@Shubhashish-Chakraborty Shubhashish-Chakraborty changed the title feat: Add a centralized contributors page feat: add a centralized contributors page Dec 5, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (6)
components/navigation/communityItems.tsx (1)

12-12: Contributors nav item wiring looks good

The new Contributors community entry is consistent with existing items (internal href, icon usage, description). Only tiny nit: you might consider rephrasing the description to something like “See who the developers behind AsyncAPI are.” for smoother grammar, but current text is fine if you prefer it.

Also applies to: 82-87

components/icons/GitFork.tsx (1)

1-13: New GitFork icon is fine; consider minor a11y and cleanup tweaks

The icon component is consistent with other icons and works as‑is. Optionally, you could:

  • Mark it as decorative with aria-hidden="true" on the <svg> to avoid extra noise for screen readers.
  • Drop the explicit import React from 'react'; if your tooling is on the modern JSX runtime and doesn’t require it.

Neither is blocking.

components/contributors/Contributors.tsx (3)

48-78: GitHub API pagination works but could be more efficient and resilient

The while (hasMore) loops for repos and contributors will work with GitHub’s empty‑array termination, but they:

  • Always perform an extra “empty” page request (N+1 calls).
  • Have no guard on total pages or backoff, so they can be a bit wasteful and are more likely to run into rate limits on large orgs.

Not blocking, but consider:

  • Using the Link header or response.data.length === per_page to decide whether to continue, avoiding the extra request.
  • Adding a hard cap on pages (e.g., 10–20) and surfacing a clearer “too many results” message if that’s hit.
  • Optionally moving these calls behind a small API route for caching and centralizing rate‑limit handling.

Also applies to: 80-109


425-431: Tailwind arbitrary focus:ring-[…] classes won’t be generated with runtime interpolation

Using template strings like:

className={`... focus:ring-[${themeColors.primary}]`}

means Tailwind’s class scanner never sees the final focus:ring-[#3B82F6] literal, so that utility is unlikely to be generated and your focus ring color won’t apply.

Safer options:

  • Use existing semantic Tailwind colors (e.g. focus:ring-blue-500 / focus:ring-purple-500), or
  • Hard‑code the arbitrary value literal directly in the source, without string interpolation.

For example:

- className={`w-full ... focus:ring-[${themeColors.primary}]`}
+ className="w-full px-4 py-3 pl-12 border border-gray-200 rounded-full focus:outline-none focus:ring-2 shadow-sm bg-white text-gray-700 focus:ring-blue-500"

and similarly for the contributors search input (using a purple/indigo token as appropriate).

Also applies to: 491-497


475-481: Use a proper link for the repo name instead of span + window.open

The repo name is currently a clickable span that calls window.open, which:

  • Is not announced as a link to assistive tech.
  • Doesn’t give you rel="noopener noreferrer" protections.
  • Requires JS to be enabled.

Consider changing it to an <a>:

- <span onClick={() => {
-   window.open(`https://github.com/asyncapi/${selectedRepo}`);
- }} className="text-blue-600 hover:text-blue-700 cursor-pointer underline">
-   {selectedRepo}
- </span>
+ <a
+   href={`https://github.com/asyncapi/${selectedRepo}`}
+   target="_blank"
+   rel="noopener noreferrer"
+   className="text-blue-600 hover:text-blue-700 cursor-pointer underline"
+ >
+   {selectedRepo}
+ </a>

This improves accessibility and follows security best practices.

pages/community/contributors.tsx (1)

9-19: Page wiring is correct; inner Container may be redundant

The page correctly wires ContributorsPage into GenericLayout with the right metadata and image. Since GenericLayout already wraps children in a Container, the extra <Container wide> around <ContributorsPage /> is probably unnecessary and might slightly constrain the layout compared to other pages.

If other community pages pass their content directly as children to GenericLayout, consider aligning with that pattern:

-  return (
-    <GenericLayout title='AsyncAPI Contributors' description={description} image={image} wide>
-      <Container wide>
-        <ContributorsPage />
-      </Container>
-    </GenericLayout>
-  );
+  return (
+    <GenericLayout title='AsyncAPI Contributors' description={description} image={image} wide>
+      <ContributorsPage />
+    </GenericLayout>
+  );
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a677dc6 and 62893da.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (5)
  • components/contributors/Contributors.tsx (1 hunks)
  • components/icons/GitFork.tsx (1 hunks)
  • components/navigation/communityItems.tsx (2 hunks)
  • package.json (1 hunks)
  • pages/community/contributors.tsx (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
pages/community/contributors.tsx (1)
components/layout/GenericLayout.tsx (1)
  • GenericLayout (25-51)
components/contributors/Contributors.tsx (3)
components/icons/GitFork.tsx (1)
  • IconGitFork (7-13)
components/icons/SearchIcon.tsx (1)
  • SearchIcon (7-24)
components/icons/Code.tsx (1)
  • IconCode (7-13)
⏰ Context from checks skipped due to timeout of 180000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - asyncapi-website
  • GitHub Check: Header rules - asyncapi-website
  • GitHub Check: Pages changed - asyncapi-website
  • GitHub Check: Lighthouse CI
🔇 Additional comments (2)
components/contributors/Contributors.tsx (1)

243-362: Contributors list logic and UX look solid overall

The contributors panel handles the main states (no repo selected, loading, API error, no contributors, no matches for search) cleanly, and the filtered list computation is straightforward and performant for expected list sizes. The githubSearch filtering is also nicely scoped to login names and only applied when there’s input.

No changes needed here from a correctness/UX standpoint.

package.json (1)

76-76: [email protected] is compatible with React ^18 and Next.js 15.5.2

Version compatibility is confirmed — [email protected] supports React ^18.0.0. When using this with Next.js 15, ensure any component importing from framer-motion is marked as a client component with "use client" at the top to avoid runtime errors like "Element type is invalid." Verify that the new animated Contributors UI component follows this pattern.

@Shubhashish-Chakraborty
Copy link
Author

hey maintainers, ive tried my best to fix the issues, now can you guide me what else i should do from here..
is it good to go??
@derberg @akshatnema @anshgoyalevil

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants