Skip to content

feat(app): add a contribute/donate page#155

Merged
kzndotsh merged 10 commits intomainfrom
contribute
Feb 6, 2026
Merged

feat(app): add a contribute/donate page#155
kzndotsh merged 10 commits intomainfrom
contribute

Conversation

@Atmois
Copy link
Contributor

@Atmois Atmois commented Feb 5, 2026

Summary by Sourcery

Add a new Contribute page centralizing donation and contribution options and wire it into site navigation and routing.

New Features:

  • Introduce a dedicated Contribute page outlining financial support, volunteering, wiki contributions, code contributions, and community support options.
  • Add a reusable dialog component and a financial support info dialog explaining donation methods and fees.

Enhancements:

  • Update header navigation and primary call-to-action labels/targets to drive users to the new Contribute experience.
  • Change the home donate CTA to route through the new Contribute page instead of directly to Open Collective.
  • Extend metadata configuration with SEO metadata for the Contribute page.
  • Add a redirect from /donate to /contribute for backward compatibility.

@sourcery-ai
Copy link
Contributor

sourcery-ai bot commented Feb 5, 2026

Reviewer's Guide

Implements a new /contribute page consolidating donation and contribution options, wires it into navigation and metadata, adds a /donate → /contribute redirect, and introduces a reusable dialog UI for explaining financial support details.

Sequence diagram for opening the financial support dialog

sequenceDiagram
  actor User
  participant ContributePage
  participant FinancialSupportDialog
  participant Dialog
  participant DialogContent

  User->>ContributePage: Click Learn_More_button
  ContributePage->>FinancialSupportDialog: Render component
  FinancialSupportDialog->>Dialog: Activate DialogTrigger
  Dialog->>DialogContent: Render modal_with_title_description_and_fee_list
  User-->>DialogContent: Read_information
  User->>Dialog: Close_dialog_via_close_button_or_overlay
Loading

Updated class diagram for contribute page and dialog components

classDiagram
  class ContributePage {
    +metadata Metadata
    +ContributePage() ReactElement
  }

  class FinancialSupportDialog {
    +FinancialSupportDialog() ReactElement
  }

  class Dialog {
    <<RadixWrapper>>
    +children ReactNode
  }

  class DialogTrigger {
    <<RadixWrapper>>
    +asChild boolean
    +children ReactNode
  }

  class DialogContent {
    <<RadixWrapper>>
    +children ReactNode
    +className string
  }

  class DialogOverlay {
    <<RadixWrapper>>
    +className string
  }

  class DialogHeader {
    +className string
  }

  class DialogFooter {
    +className string
  }

  class DialogTitle {
    <<RadixWrapper>>
    +className string
  }

  class DialogDescription {
    <<RadixWrapper>>
    +className string
  }

  class Button {
    +variant string
    +size string
  }

  class Link {
    +href string
    +target string
    +rel string
  }

  class Card {
  }

  class CardHeader {
  }

  class CardContent {
  }

  class CardDescription {
  }

  class CardTitle {
  }

  ContributePage --> FinancialSupportDialog : uses
  ContributePage --> Button : uses
  ContributePage --> Link : uses
  ContributePage --> Card : uses
  ContributePage --> CardHeader : uses
  ContributePage --> CardContent : uses
  ContributePage --> CardDescription : uses
  ContributePage --> CardTitle : uses

  FinancialSupportDialog --> Dialog : wraps
  FinancialSupportDialog --> DialogTrigger : uses
  FinancialSupportDialog --> DialogContent : uses
  FinancialSupportDialog --> DialogHeader : uses
  FinancialSupportDialog --> DialogTitle : uses
  FinancialSupportDialog --> DialogDescription : uses
  FinancialSupportDialog --> Button : uses

  DialogContent --> DialogOverlay : composed_with
Loading

Flow diagram for donate to contribute routing and navigation

flowchart LR
  subgraph Routing
    A[User enters /donate URL] --> B[Next_config_redirects_to /contribute]
    B --> C[Render ContributePage]
  end

  subgraph Navigation
    D[User clicks Donate_Now_on_homepage] --> E[Client_side_navigation_to /contribute]
    F[User clicks Contribute_And_Donate_header_CTA] --> E
    E --> C

    G[User clicks Get_Involved_nav_item] --> H[Render get_involved_page]
  end
Loading

File-Level Changes

Change Details Files
Add a dedicated Contribute/Donate page that aggregates financial, volunteer, wiki, code, and community contribution paths.
  • Create app/contribute route with layout, hero, and explanatory copy for contribution options.
  • Implement financial support section with multiple external payment providers and an internal link to financial records.
  • Add cards for volunteering, wiki contributions, code contributions, and community support with appropriate external and internal links.
  • Use lucide-react icons for visual differentiation of contribution types.
app/contribute/page.tsx
Update navigation and CTAs to point to the new Contribute page and surface it more prominently.
  • Add a "Get Involved" navigation item pointing to /get-involved in the header nav items.
  • Change header CTA button to link to /contribute and update label to "Contribute & Donate".
  • Update home donate CTA button to navigate to /contribute instead of directly to OpenCollective and remove the inline link icon.
components/layout/header.tsx
components/pages/home/donate-cta.tsx
Configure routing and metadata for the new Contribute page.
  • Add /donate → /contribute permanent redirect in Next.js configuration.
  • Extend page metadata map with a contribute entry (title and description).
next.config.ts
app/metadata.ts
Introduce a shared dialog UI abstraction and a specific financial support information dialog used on the Contribute page.
  • Create a Radix-based dialog UI wrapper with overlay, content, header/footer, title/description, and trigger/close exports.
  • Implement FinancialSupportDialog component explaining fee structures, payment methods, and contact info, used from the Financial Support card.
components/ui/dialog.tsx
components/pages/contribute/financial-support-dialog.tsx

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@gemini-code-assist
Copy link

Summary of Changes

Hello @Atmois, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a comprehensive 'Contribute' page to the application, consolidating all avenues for community involvement and support. The page aims to clearly outline how users can contribute, from financial donations with transparent fee breakdowns to volunteering time, contributing to the wiki, writing code, or providing community support. This change enhances user engagement by providing a clear, centralized resource for those looking to support the project's mission.

Highlights

  • New Contribute/Donate Page: A dedicated '/contribute' page has been added, serving as a central hub for various ways users can support the project, including financial donations, volunteering, wiki contributions, code contributions, and community support.
  • Financial Support Details Dialog: A new dialog component, 'FinancialSupportDialog', has been introduced to provide detailed information about financial donation methods, including platform fees and recommendations for different payment types.
  • Navigation and CTA Updates: The main navigation header now includes a 'Get Involved' link, and the primary Call-to-Action button has been updated to 'Contribute & Donate', both directing users to the new contribution page.
  • Donate Page Redirect: A permanent redirect has been implemented in 'next.config.ts' to forward all traffic from '/donate' to the new '/contribute' page, ensuring a unified experience.
  • Metadata and UI Component Additions: Metadata for the new 'contribute' page has been added, and a generic 'Dialog' UI component has been introduced, likely to support the new financial support dialog and future modal needs.
Changelog
  • app/contribute/page.tsx
    • Added a new page for contributions, featuring sections for financial support, volunteering, wiki contributions, code contributions, and community support.
    • Included a hero section, detailed cards for each contribution type, and a 'Why Contribute?' section with project statistics and transparency information.
  • app/metadata.ts
    • Added new metadata entry for the '/contribute' page, including its title and description.
  • components/layout/header.tsx
    • Updated the 'navItems' array to include a 'Get Involved' link pointing to '/get-involved'.
    • Modified the 'CTAButton' component to link to '/contribute' and changed its text from 'Get Involved' to 'Contribute & Donate'.
    • Minor formatting adjustment in 'MobileNavigation' component.
  • components/pages/contribute/financial-support-dialog.tsx
    • Added a new React component for a dialog that explains financial support options, including a breakdown of fees for various payment methods like Stripe, Open Collective, PayPal, Every.org, and Cash App.
  • components/pages/home/donate-cta.tsx
  • components/ui/dialog.tsx
    • Added a new reusable UI component for a Dialog, built using Radix UI primitives, providing a consistent modal experience across the application.
  • next.config.ts
    • Added a permanent redirect from '/donate' to '/contribute' to consolidate donation-related URLs.
    • Minor whitespace formatting adjustments in webpack configuration.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 5, 2026

Warning

Rate limit exceeded

@kzndotsh has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 24 minutes and 20 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between e9d1a8a and cba10e9.

📒 Files selected for processing (5)
  • app/about/page.tsx
  • app/contribute/page.tsx
  • app/sitemap.ts
  • components/pages/about/values.tsx
  • components/pages/home/stats.tsx
📝 Walkthrough

Walkthrough

Adds a new Contribute page and metadata, a reusable Radix-based Dialog UI and a Financial Support dialog component, updates navigation and footer to include Apply and Contribute, introduces redirects (/donate → /contribute, several → /apply), and updates site manifest, sitemap, and some content links to use /apply.

Changes

Cohort / File(s) Summary
Contribute page & metadata
app/contribute/page.tsx, app/metadata.ts
Adds ContributePage and exports metadata = getPageMetadata('contribute'); adds a contribute metadata entry and replaces a prior get-involved key with apply.
Dialog primitives & UI
components/ui/dialog.tsx
New Radix-based Dialog module exporting composed, styled dialog parts (Dialog, Trigger, Portal, Overlay, Content, Header, Footer, Title, Description) with animations and built-in close control.
Financial support dialog
components/pages/contribute/financial-support-dialog.tsx
New client component FinancialSupportDialog that uses the Dialog primitives to show donation details, fee breakdowns, and contact mailto.
Header, footer & CTA updates
components/layout/header.tsx, components/layout/footer.tsx, components/pages/home/donate-cta.tsx
Adds new nav links for /apply and /contribute; updates CTA label to “Contribute & Donate” and routes CTA to /contribute; simplifies Donate CTA to internal link; footer links updated (Get Involved → Apply/Contribute) and social/index entries adjusted.
Routing & app pages
next.config.ts, app/apply/page.tsx, app/apply/[role]/page.tsx, app/sitemap.ts, app/contribute/page.tsx
Adds redirects() (permanent redirects: /donate/contribute, /get-involved//roles//careers/apply); updates apply page text/links and sitemap route substitutions.
Public assets & content links
public/site.webmanifest, public/.well-known/security.txt, content/blog/.../03-2025-roundup.mdx
Replaces shortcuts and security contact link from /get-involved to /apply; updates a blog link to /apply.
Miscellaneous
other touched files* components/pages/home/donate-cta.tsx, components/layout/..., content/...
Small accessibility and markup tweaks (button types, SVG title), and minor layout class adjustments.
Note: many files are within the same areas and have related, heterogeneous edits. Review attention: metadata mapping changes, new dialog exports (API surface), new page routing, and redirects.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately reflects the primary change: adding a new Contribute/donate page with related navigation and metadata updates.
Description check ✅ Passed The description is directly related to the changeset, detailing the new Contribute page, dialog components, metadata updates, redirects, and navigation enhancements.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch contribute

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.

Copy link

@amazon-q-developer amazon-q-developer bot left a comment

Choose a reason for hiding this comment

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

Review Summary

This PR successfully adds a comprehensive contribute/donate page with proper navigation updates and redirects. The implementation is well-structured with good responsive design and clear user experience.

Critical Issues

  • Unused import: Remove unused Heart import from the contribute page

Overall Assessment

The PR adds significant value by consolidating donation and contribution options into a single, well-organized page. The financial transparency information is commendable, and the routing changes (redirect from /donate to /contribute) are handled correctly. Once the unused import is removed, this is ready to merge.


You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.

Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey - I've found 1 issue, and left some high level feedback:

  • The header now has a "Get Involved" nav item pointing to /get-involved while the primary CTA and new page use /contribute and "Contribute & Donate`; consider aligning route and label naming across navigation and CTAs to avoid user confusion.
  • All donation URLs and fee details are hard-coded directly into the Contribute page and dialog; consider extracting these into a shared config or constants module so they can be reused and updated in one place.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The header now has a "Get Involved" nav item pointing to `/get-involved` while the primary CTA and new page use `/contribute` and "Contribute & Donate`; consider aligning route and label naming across navigation and CTAs to avoid user confusion.
- All donation URLs and fee details are hard-coded directly into the Contribute page and dialog; consider extracting these into a shared config or constants module so they can be reused and updated in one place.

## Individual Comments

### Comment 1
<location> `components/pages/contribute/financial-support-dialog.tsx:69-71` </location>
<code_context>
+            <a href="mailto:[email protected]">
+              [email protected]
+            </a>{' '}
+            to ensure as much as your donation as possible goes directly to
+            supporting our community. We will work with you to find the best way
+            to donate with the lowest fees possible.
</code_context>

<issue_to_address>
**suggestion (typo):** Grammar in this sentence is slightly off and can be made clearer.

Suggest: "to ensure as much of your donation as possible goes directly to supporting our community," which keeps the meaning while fixing the awkward phrasing.

```suggestion
            </a>{' '}
            to ensure as much of your donation as possible goes directly to
            supporting our community. We will work with you to find the best way
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +69 to +71
</a>{' '}
to ensure as much as your donation as possible goes directly to
supporting our community. We will work with you to find the best way
Copy link
Contributor

Choose a reason for hiding this comment

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

suggestion (typo): Grammar in this sentence is slightly off and can be made clearer.

Suggest: "to ensure as much of your donation as possible goes directly to supporting our community," which keeps the meaning while fixing the awkward phrasing.

Suggested change
</a>{' '}
to ensure as much as your donation as possible goes directly to
supporting our community. We will work with you to find the best way
</a>{' '}
to ensure as much of your donation as possible goes directly to
supporting our community. We will work with you to find the best way

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

No issues found across 7 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a new 'Contribute' page that centralizes various ways to support the project, including financial donations, volunteering, and code contributions. The changes include the new page itself, a dialog with details on financial support, updates to site navigation and metadata, and a redirect for backward compatibility. My review focuses on improving code maintainability by extracting hardcoded values, enhancing semantic HTML for better accessibility, and cleaning up the code by removing unused imports and improving layout practices.

Comment on lines 79 to 86

Choose a reason for hiding this comment

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

medium

The donation links are hardcoded throughout this section. To improve maintainability and make these URLs easier to manage, consider extracting them into a dedicated constants file or an object within this file.

For example, you could have a constants.ts file:

export const DONATION_LINKS = {
  OPEN_COLLECTIVE: 'https://opencollective.com/allthingslinux',
  STRIPE_ONETIME: 'https://donate.stripe.com/28EbJ27Dm9nAcHWdXk1wY06',
  // ... and so on
};

Then you can import and use them like href={DONATION_LINKS.OPEN_COLLECTIVE}. This centralizes configuration and reduces the chance of typos.

Comment on lines +26 to +40
<DialogDescription>
Your donations directly support our mission to build and maintain
the most welcoming Linux community. All donations are tax-deductible
as we are a registered 501(c)(3) non-profit organization.
<br /> <br />
Below is a breakdown of the fees that we are charged on your
donations. These are included in the total amount you donate, so you
don't have to worry about any additional fees.
<br /> <br />
In general Open Collective is the best platform to donate on, it has
the most donation options and charges the lowest fees (via Stripe
with no platform fee), however for Amex cards PayPal has lower fees.
For Crypto donations, Stripe has the lowest fees but every.org
provides more currency options.
</DialogDescription>

Choose a reason for hiding this comment

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

medium

Using multiple <br /> tags for spacing is not ideal for maintainability and semantic structure. It's better to wrap distinct paragraphs in <p> tags and use Tailwind CSS's spacing utilities (like space-y-4 on a parent div) to control the vertical rhythm. This leads to cleaner, more semantic, and more maintainable code.

By using asChild on DialogDescription, you can provide your own structure while retaining the component's accessibility properties.

          <DialogDescription asChild>
            <div className="space-y-4">
              <p>
                Your donations directly support our mission to build and maintain
                the most welcoming Linux community. All donations are tax-deductible
                as we are a registered 501(c)(3) non-profit organization.
              </p>
              <p>
                Below is a breakdown of the fees that we are charged on your
                donations. These are included in the total amount you donate, so you
                don't have to worry about any additional fees.
              </p>
              <p>
                In general Open Collective is the best platform to donate on, it has
                the most donation options and charges the lowest fees (via Stripe
                with no platform fee), however for Amex cards PayPal has lower fees.
                For Crypto donations, Stripe has the lowest fees but every.org
                provides more currency options.
              </p>
            </div>
          </DialogDescription>

@github-actions
Copy link

github-actions bot commented Feb 5, 2026

🚀 Deployment Status

Environment: Development
Branch: PR #155 (contribute )
Commit: 30a8ff2d706c0fc17312949491f7fe8a4e5384ef

URLs:

Deployment completed successfully! ✨

@github-actions
Copy link

github-actions bot commented Feb 5, 2026

🚀 Deployment Status

Environment: Development
Branch: PR #155 (contribute )
Commit: 8a52bcfad5357e2a0ff28dd24825878f72d8816b

URLs:

Deployment completed successfully! ✨

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: 2

🤖 Fix all issues with AI agents
In `@app/contribute/page.tsx`:
- Around line 186-188: Update the copy inside the CardDescription component in
app/contribute/page.tsx to fix the grammar: replace the awkward phrase
"contributing editing or writing articles and guides" with a clearer version
such as "by contributing, editing, or writing articles and guides" so the
CardDescription string reads smoothly; edit the text content within the
CardDescription element referenced in the diff.
- Around line 84-145: The current fixed 3-column grid ("grid grid-cols-3")
compresses button tap targets on mobile; update the container div that renders
the Button components to use responsive Tailwind classes (e.g., grid-cols-1 on
small screens, grid-cols-2 on tablets, grid-cols-3 on desktop) so the Button
(component) + Link elements keep accessible tap sizes; keep the existing w-full
on Button and gap-3 but replace the static "grid-cols-3" with a responsive set
like "grid-cols-1 sm:grid-cols-2 md:grid-cols-3" (or similar breakpoints) to
make the donation buttons responsive.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 56ffa66 and 103df87.

📒 Files selected for processing (1)
  • app/contribute/page.tsx
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{tsx,jsx}

📄 CodeRabbit inference engine (.cursor/rules/trigger.advanced-tasks.mdc)

Use useTaskTrigger hook from @trigger.dev/react-hooks for frontend task triggering with proper accessToken handling

Files:

  • app/contribute/page.tsx
**/*.{tsx,ts}

📄 CodeRabbit inference engine (.cursor/rules/trigger.realtime.mdc)

**/*.{tsx,ts}: Use useTaskTrigger hook for basic task triggering and useRealtimeTaskTrigger for real-time status updates in React frontends
Use useRealtimeRun hook to subscribe to specific run updates and useRealtimeRunsWithTag to subscribe to tagged runs in React components
Use useRealtimeStream hook with defined stream types for consuming streamed data in React with type safety and throttle control
Use useWaitToken hook to handle approval/completion of wait token operations in React components
Use useRun SWR hook with refreshInterval: 0 (disabled polling) for one-time run data fetches in React instead of realtime subscriptions

Files:

  • app/contribute/page.tsx
🧬 Code graph analysis (1)
app/contribute/page.tsx (3)
app/metadata.ts (1)
  • getPageMetadata (157-207)
components/ui/card.tsx (5)
  • Card (80-80)
  • CardHeader (81-81)
  • CardTitle (83-83)
  • CardDescription (84-84)
  • CardContent (85-85)
components/ui/button.tsx (1)
  • Button (57-57)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Seer Code Review
  • GitHub Check: cubic · AI code reviewer
  • GitHub Check: Deploy
🔇 Additional comments (4)
app/contribute/page.tsx (4)

1-31: Metadata and imports look solid.
Clear page metadata wiring and clean imports for this new route.


34-52: Hero section reads well and is cleanly structured.
No concerns with layout or copy here.


206-263: Code and community sections look great.
CTA flow and structure are clear.


267-306: Why Contribute + transparency section is well composed.
No issues to flag.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

@github-actions
Copy link

github-actions bot commented Feb 5, 2026

🚀 Deployment Status

Environment: Development
Branch: PR #155 (contribute )
Commit: ee28883e4ab43a63e30d2040c526b9488bc44aca

URLs:

Deployment completed successfully! ✨

- Added a new route for '/get-involved' redirecting to '/apply'.
- Updated metadata for the 'apply' page to reflect new application process.
- Replaced instances of 'Get Involved' with 'Apply' across the application.
- Introduced a new 'apply' page with role listings and application details.
…nd careers

- Added security headers to prevent clickjacking and enforce content security policies.
- Introduced new redirects for '/roles' and '/careers' to the '/apply' page.
- Updated the hero section background styling for improved visual consistency.
- Revised the community description for clarity and added emphasis on passion.
- Renamed donation section titles for better user understanding.
- Streamlined button styles and added icons for donation links.
- Introduced a new Financial Support dialog for additional information.
- Improved layout for volunteer and community sections.
- Added 'Contribute' link to both footer and header navigation.
- Updated 'tux' project link in the footer to point to the GitHub repository.
- Enhanced key usage in map functions for better performance and readability.
- Modified copyright text in the footer for a more engaging presentation.
@github-actions
Copy link

github-actions bot commented Feb 6, 2026

🚀 Deployment Status

Environment: Development
Branch: PR #155 (contribute )
Commit: 2c055ba458c880a1102565e725cf550d7fd47308

URLs:

Deployment completed successfully! ✨

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 11 files (changes from recent commits).

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="app/contribute/page.tsx">

<violation number="1" location="app/contribute/page.tsx:47">
P3: Add the missing space in the hero copy so the sentence reads “passionate Linux community.”</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

- Added '/contribute' to the sitemap for improved navigation.
- Updated community size from 14,000 to 20,000 Linux enthusiasts in the About page.
- Revised description in the values section to reflect the updated community size.
- Increased member count in stats from 18K+ to 20K+ and voice hours from 68K+ to 70K+.
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
app/sitemap.ts (1)

8-15: ⚠️ Potential issue | 🟡 Minor

The new /contribute page is missing from the sitemap.

This PR introduces a dedicated Contribute page at /contribute, but it hasn't been added to the core routes here. This will hurt SEO discoverability for the new page.

Proposed fix
   const routes = [
     '/',
     '/about',
     '/code-of-conduct',
     '/blog',
     '/apply',
+    '/contribute',
     // Add all other static routes here
   ].map((route) => ({
components/layout/footer.tsx (1)

214-228: ⚠️ Potential issue | 🟡 Minor

Desktop footer is missing the copyright year and "All Rights Reserved" notice.

The mobile footer (Line 198) still renders © {year} All Things Linux • Made with ❤️ • All Rights Reserved, while the desktop version now only shows the tagline. This creates an inconsistency — and more importantly, omitting the © year notice on desktop may be unintentional for a 501(c)(3) non-profit.

If the change is intentional, consider updating the mobile footer to match so both viewports display the same copyright information.

🔧 Suggested fix to restore the copyright notice on desktop
   <div className="hidden md:flex justify-between items-center">
     <p className="text-sm text-muted-foreground">
-      All Things Linux • Made with ☕ & 💛
+      © {new Date().getFullYear()} All Things Linux • Made with ☕ & 💛
     </p>
🤖 Fix all issues with AI agents
In `@app/contribute/page.tsx`:
- Around line 46-50: Typo in the hero paragraph: add a missing space between
"passionate" and "Linux" inside the <p> element with className "text-lg
sm:text-xl text-muted-foreground leading-relaxed" so the text reads "passionate
Linux community" instead of "passionateLinux".
🧹 Nitpick comments (3)
app/apply/page.tsx (1)

236-236: Nit: Function name GetInvolvedPage is stale after the rename to "Apply".

Consider renaming to ApplyPage for consistency with the route and heading.

Proposed fix
-export default function GetInvolvedPage() {
+export default function ApplyPage() {
components/layout/footer.tsx (1)

100-105: Consider using Next.js Link for internal routes to enable client-side navigation.

FooterLink uses a plain <a> tag. This works fine for external URLs (e.g., GitHub, atl.wiki), but internal routes like /about, /apply, /contribute, and /code-of-conduct would benefit from next/link to avoid full page reloads. This is a pre-existing pattern, so feel free to defer.

app/contribute/page.tsx (1)

301-317: Inconsistent indentation on the <Button> closing tag.

The opening <Button> at Line 311 is at 10-space indent, but </Button> at Line 316 is at 12-space indent. This is purely cosmetic and doesn't affect rendering, but it makes the nesting harder to read.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9c6c33b and e9d1a8a.

📒 Files selected for processing (11)
  • app/apply/[role]/page.tsx
  • app/apply/page.tsx
  • app/contribute/page.tsx
  • app/metadata.ts
  • app/sitemap.ts
  • components/layout/footer.tsx
  • components/layout/header.tsx
  • content/blog/news/03-2025-roundup.mdx
  • next.config.ts
  • public/.well-known/security.txt
  • public/site.webmanifest
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{tsx,jsx}

📄 CodeRabbit inference engine (.cursor/rules/trigger.advanced-tasks.mdc)

Use useTaskTrigger hook from @trigger.dev/react-hooks for frontend task triggering with proper accessToken handling

Files:

  • app/apply/[role]/page.tsx
  • app/contribute/page.tsx
  • app/apply/page.tsx
  • components/layout/header.tsx
  • components/layout/footer.tsx
**/*.{tsx,ts}

📄 CodeRabbit inference engine (.cursor/rules/trigger.realtime.mdc)

**/*.{tsx,ts}: Use useTaskTrigger hook for basic task triggering and useRealtimeTaskTrigger for real-time status updates in React frontends
Use useRealtimeRun hook to subscribe to specific run updates and useRealtimeRunsWithTag to subscribe to tagged runs in React components
Use useRealtimeStream hook with defined stream types for consuming streamed data in React with type safety and throttle control
Use useWaitToken hook to handle approval/completion of wait token operations in React components
Use useRun SWR hook with refreshInterval: 0 (disabled polling) for one-time run data fetches in React instead of realtime subscriptions

Files:

  • app/apply/[role]/page.tsx
  • app/contribute/page.tsx
  • app/apply/page.tsx
  • app/sitemap.ts
  • next.config.ts
  • components/layout/header.tsx
  • app/metadata.ts
  • components/layout/footer.tsx
**/*.ts

📄 CodeRabbit inference engine (.cursor/rules/trigger.scheduled-tasks.mdc)

**/*.ts: Use imperative schedule creation via schedules.create() API for dynamic/multi-tenant scenarios with task ID, cron pattern, timezone, externalId, and deduplicationKey
Always provide externalId in multi-tenant scheduled task contexts and use deduplicationKey to prevent duplicate schedule creation on repeated calls
For one-off future task runs (non-recurring), use the delay option instead of cron schedules
Use schedules.retrieve(), schedules.list(), schedules.update(), schedules.deactivate(), schedules.activate(), and schedules.del() for SDK-based schedule management

Files:

  • app/sitemap.ts
  • next.config.ts
  • app/metadata.ts
🧠 Learnings (5)
📚 Learning: 2026-01-02T21:36:22.322Z
Learnt from: CR
Repo: allthingslinux/allthingslinux PR: 0
File: .cursor/rules/trigger.config.mdc:0-0
Timestamp: 2026-01-02T21:36:22.322Z
Learning: Applies to **/trigger.config.ts : Set `autoDetectExternal`, `keepNames`, and `minify` properties in the `build` section of trigger.config.ts

Applied to files:

  • next.config.ts
📚 Learning: 2026-01-02T21:36:22.322Z
Learnt from: CR
Repo: allthingslinux/allthingslinux PR: 0
File: .cursor/rules/trigger.config.mdc:0-0
Timestamp: 2026-01-02T21:36:22.322Z
Learning: Applies to **/trigger.config.ts : Add modules with native addons to the `build.external` array in trigger.config.ts to prevent bundling

Applied to files:

  • next.config.ts
📚 Learning: 2026-01-02T21:36:22.322Z
Learnt from: CR
Repo: allthingslinux/allthingslinux PR: 0
File: .cursor/rules/trigger.config.mdc:0-0
Timestamp: 2026-01-02T21:36:22.322Z
Learning: Remember that build extensions in trigger.config.ts only affect deployment, not local development

Applied to files:

  • next.config.ts
📚 Learning: 2026-01-02T21:36:22.322Z
Learnt from: CR
Repo: allthingslinux/allthingslinux PR: 0
File: .cursor/rules/trigger.config.mdc:0-0
Timestamp: 2026-01-02T21:36:22.322Z
Learning: Applies to **/trigger.config.ts : Use `esbuildPlugin` build extension in trigger.config.ts to integrate esbuild plugins like Sentry with optional placement and target configuration

Applied to files:

  • next.config.ts
📚 Learning: 2026-01-02T21:36:22.322Z
Learnt from: CR
Repo: allthingslinux/allthingslinux PR: 0
File: .cursor/rules/trigger.config.mdc:0-0
Timestamp: 2026-01-02T21:36:22.322Z
Learning: Applies to **/trigger.config.ts : Use `additionalFiles` build extension in trigger.config.ts with glob patterns to include extra files in the build

Applied to files:

  • next.config.ts
🧬 Code graph analysis (1)
next.config.ts (1)
middleware.ts (1)
  • config (78-80)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Seer Code Review
  • GitHub Check: Deploy
  • GitHub Check: cubic · AI code reviewer
🔇 Additional comments (13)
app/apply/[role]/page.tsx (1)

185-185: LGTM!

Back-navigation link correctly updated to /apply, consistent with the route rename across the PR.

public/.well-known/security.txt (1)

5-5: LGTM!

Hiring URL correctly updated to /apply, consistent with the route rename.

content/blog/news/03-2025-roundup.mdx (1)

45-45: LGTM!

Link updated to the new /apply route. Since /get-involved redirects to /apply anyway, updating it here avoids an unnecessary redirect hop for readers.

app/apply/page.tsx (1)

40-40: Good improvements across the board.

The heading rename to "Apply" is consistent with the route change. The accessibility additions (type="button", SVG <title>) and the idiomatic h-px Tailwind class are all welcome refinements.

Also applies to: 103-103, 115-115, 200-200

components/layout/header.tsx (2)

26-27: LGTM — new nav items are consistent with the PR scope.

Both /apply and /contribute are correctly wired. The isActive logic on Line 49 will properly highlight "Apply" for sub-routes like /apply/[role] as well.


82-92: LGTM!

CTA correctly points to the new /contribute page with an appropriate label.

next.config.ts (2)

103-109: Good addition of anti-clickjacking headers.

Both X-Frame-Options: DENY and frame-ancestors 'none' are set, providing backward-compatible clickjacking protection. The dual-header approach correctly covers older browsers (X-Frame-Options) and modern ones (CSP frame-ancestors).

One thing to keep in mind: this sets a minimal Content-Security-Policy with only frame-ancestors. If a more comprehensive CSP is added later, you'll want to consolidate into a single header to avoid unexpected interactions between multiple CSP headers.


126-150: Redirects look correct and comprehensive.

All four permanent redirects properly map legacy routes to their new counterparts. A couple of notes:

  • These are permanent: true (HTTP 301), which browsers and search engines cache aggressively. Make sure the team is committed to these new routes, as reverting 301s is difficult once cached by clients.
  • The /contribute route is the redirect target for /donate, but it's not yet in the sitemap (see comment on app/sitemap.ts).
public/site.webmanifest (1)

36-38: LGTM — shortcut entry updated consistently with the site-wide rename.

The rename from "Get Involved" → "Apply" and the URL update to /apply are consistent with the navigation, redirect, and sitemap changes elsewhere in this PR.

components/layout/footer.tsx (1)

118-119: Good improvement — switching from index-based keys to semantically meaningful keys.

Using link.name, social.label, and section.title as React keys is more stable for list reordering and avoids subtle reconciliation bugs. All values are unique within their respective arrays, so no collision risk.

Also applies to: 147-149, 179-181

app/metadata.ts (1)

187-196: LGTM — new metadata entries for apply and contribute are well-formed.

Descriptions are clear and SEO-appropriate, and the entries align with the new page routes.

app/contribute/page.tsx (2)

33-34: Page structure and responsive layout look solid.

The responsive grid (grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 for donation buttons, sm:grid-cols-2 for contribution cards, sm:grid-cols-3 for stats) handles viewport sizes well. The card layout with flex flex-col h-full and mt-auto on content ensures uniform card heights. Good use of a server component for a static page.

Also applies to: 71-72, 156-156, 286-286


37-38: No action needed. The project uses Tailwind v4.1.18, where bg-size-[20px_20px] is a valid utility and will render the dot-pattern background as intended.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@kzndotsh kzndotsh merged commit 9acdaf1 into main Feb 6, 2026
11 checks passed
@github-actions
Copy link

github-actions bot commented Feb 6, 2026

🚀 Deployment Status

Environment: Development
Branch: PR #155 (contribute )
Commit: 42cb6ee859c14705868ff996e680485e3605aa48

URLs:

Deployment completed successfully! ✨

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

Comments