Skip to content

feat: add contributors page and improve navigation - #189

Open
imrja8 wants to merge 7 commits into
Dokploy:mainfrom
imrja8:fix/remove-redundant-careers-link
Open

imrja8 wants to merge 7 commits into
Dokploy:mainfrom
imrja8:fix/remove-redundant-careers-link

Conversation

@imrja8

@imrja8 imrja8 commented Sep 19, 2026 •

Copy link
Copy Markdown
Collaborator

Description

This PR adds a new /contributors page to highlight the top open-source developers supporting Dokploy as a leaderboard. By showcasing their names and accurate contribution counts directly on the website, the goal is to show appreciation, encourage the community to come up with new solutions, and drive overall engagement. The PR also includes a few minor layout and navigation fixes.

Main Feature: The New Contributors Page

  • Built a new page to fetch and display the top ~100 open-source contributors of the Dokploy repository in a responsive grid layout.
  • Accurate Commit Counts: Uses GitHub's /stats/contributors endpoint exclusively, the only endpoint that returns mathematically correct commit totals matching the GitHub Web UI. No inflated or estimated numbers.
  • Total Contributor Count: A lightweight per_page=1 call with Link header parsing determines the total number of contributors without fetching them all, used to display a summary card.
  • "+ X More" Summary Card: The final card in the grid links to GitHub's contributors page and displays how many contributors exist beyond the top 100. This celebrates everyone outside the leaderboard without needing to fetch their data.
  • API Safeguards & Fallbacks: Handles GitHub's 202 Accepted calculation status with a retry loop, and filters out non-human "bot" accounts. If the GitHub API fails or rate-limits, it falls back to a 1-hour stale memory cache.
  • Hydration & Crash Safe: Mobile and desktop layouts share exactly 40 skeletons on initial SSR load. Mobile devices use CSS (hidden md:flex) to instantly hide the bottom 20 items, resulting in zero React hydration mismatch errors.
  • Added avatars.githubusercontent.com to next.config.js to support remote avatars.

Minor Fixes & Navigation Cleanup:

  • Responsive Navbar Bugfix: Fixed a bug where the desktop navbar was breaking out of the canvas in shorter widths (768px-1279px), forcing the entire page to over-scroll horizontally.
  • Freed up Navbar Space: Removed the duplicate "Careers" link from the Desktop and Mobile navbars (Header.tsx) to make room for the new "Contributors" link. The "Jobs" link remains intact inside the "Resources" dropdown.
  • Unified Wording: Updated the "Careers" text to "Jobs" under the Company section in the footer (Footer.tsx), and updated the AI documentation file (llms.txt) to reference "Jobs" instead of "Careers".

Note for Reviewers (Architectural Judgements)

  • Why only /stats/contributors? The paginated /contributors endpoint returns all 365+ users, but it inflates commit counts for top users. The /stats/contributors endpoint returns the accurate commit counts (matching the GitHub Web UI) but is capped at ~100 users. Rather than fetching both and merging (a dual-fetch strategy), we chose data accuracy over completeness — the top ~100 with correct numbers, plus a summary card for the rest.
  • Why a Custom In-Memory Cache? : Instead of using standard Next.js fetch caching, the api/contributors route is set up to match the existing caching patterns used in github-stars and github-contributors. It uses a 1-hour in-memory cache, combined with a fallback helper that serves stale data and forces a cooldown if GitHub goes down.
  • Why Client-Side Pagination? : Instead of hitting the server every time "Show More" is clicked, the server passes the full, cached array of ~100 contributors to the client component. Clicking "Show More" just reveals 20 more from the array in the browser's memory, making the pagination instant and free of network requests.
  • Why shift the navbar collapse breakpoint to xl? : The desktop navbar requires approximately 1060px of horizontal space. Changing the collapse breakpoint to xl guarantees the desktop navbar only renders when there is at least 1216px of container width. This completely eliminates the horizontal over-scroll bug while safely displaying the hamburger menu on anything smaller.
  • Why keep Discord + GitHub Stars visible in the collapsed view? : In the collapsed tablet view (768px–1280px), the layout shows the Discord icon, GitHub Stars widget, and hamburger menu. These are not duplicated inside the hamburger menu, so keeping them visible provides quick access to community links without opening the menu. Desktop and mobile views remain exactly as they were.

Checklist

  • The commit message follows the Conventional Commits specification
  • The documentation (llms.txt) is updated to reflect these changes
  • The website was run locally using pnpm run website:dev and changes were verified
  • Tested responsive layouts (Mobile, Tablet, Desktop)
  • Code is strictly typed, fully audited, and successfully passes biome check
  • No dead code, no unused logic, no duplicate data

Screenshots

1. The New Contributors Page:

Top of Page End of Page
Screenshot 2026-09-19 at 16 23 46 Screenshot 2026-09-19 at 16 24 23

2. Navbar Layout Fix (less screen width):

Before (Overflowing) After (Balanced)
Screenshot 2026-09-19 at 16 30 38 Screenshot 2026-09-19 at 16 30 13

@imrja8
imrja8 requested a review from Siumauricio as a code owner September 19, 2026 06:21
@imrja8

imrja8 commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

@narcisonunez Can you please look into this.

@imrja8 imrja8 changed the title refactor(website): remove redundant careers link from navigation feat: add contributors page and improve navigation Sep 19, 2026
@imrja8

imrja8 commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator Author

My changes are clean. CI failed because biome ci runs against the entire repo, errors are pre-existing in files this PR doesn't touch.

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.

1 participant