Conversation
Reviewer's GuideImplements 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 dialogsequenceDiagram
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
Updated class diagram for contribute page and dialog componentsclassDiagram
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
Flow diagram for donate to contribute routing and navigationflowchart 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
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Summary of ChangesHello @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
Changelog
Using Gemini Code AssistThe 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
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 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
|
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the 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. 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughAdds 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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~40 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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
Heartimport 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.
There was a problem hiding this comment.
Hey - I've found 1 issue, and left some high level feedback:
- The header now has a "Get Involved" nav item pointing to
/get-involvedwhile the primary CTA and new page use/contributeand "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>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| </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 |
There was a problem hiding this comment.
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.
| </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 |
There was a problem hiding this comment.
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.
app/contribute/page.tsx
Outdated
There was a problem hiding this comment.
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.
| <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> |
There was a problem hiding this comment.
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>
🚀 Deployment StatusEnvironment: Development URLs:
Deployment completed successfully! ✨ |
🚀 Deployment StatusEnvironment: Development URLs:
Deployment completed successfully! ✨ |
There was a problem hiding this comment.
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
📒 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
useTaskTriggerhook from@trigger.dev/react-hooksfor frontend task triggering with proper accessToken handling
Files:
app/contribute/page.tsx
**/*.{tsx,ts}
📄 CodeRabbit inference engine (.cursor/rules/trigger.realtime.mdc)
**/*.{tsx,ts}: UseuseTaskTriggerhook for basic task triggering anduseRealtimeTaskTriggerfor real-time status updates in React frontends
UseuseRealtimeRunhook to subscribe to specific run updates anduseRealtimeRunsWithTagto subscribe to tagged runs in React components
UseuseRealtimeStreamhook with defined stream types for consuming streamed data in React with type safety and throttle control
UseuseWaitTokenhook to handle approval/completion of wait token operations in React components
UseuseRunSWR hook withrefreshInterval: 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.
🚀 Deployment StatusEnvironment: Development 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.
🚀 Deployment StatusEnvironment: Development URLs:
Deployment completed successfully! ✨ |
There was a problem hiding this comment.
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+.
There was a problem hiding this comment.
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 | 🟡 MinorThe new
/contributepage 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 | 🟡 MinorDesktop 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 nameGetInvolvedPageis stale after the rename to "Apply".Consider renaming to
ApplyPagefor 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.jsLinkfor internal routes to enable client-side navigation.
FooterLinkuses 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-conductwould benefit fromnext/linkto 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
📒 Files selected for processing (11)
app/apply/[role]/page.tsxapp/apply/page.tsxapp/contribute/page.tsxapp/metadata.tsapp/sitemap.tscomponents/layout/footer.tsxcomponents/layout/header.tsxcontent/blog/news/03-2025-roundup.mdxnext.config.tspublic/.well-known/security.txtpublic/site.webmanifest
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/trigger.advanced-tasks.mdc)
Use
useTaskTriggerhook from@trigger.dev/react-hooksfor frontend task triggering with proper accessToken handling
Files:
app/apply/[role]/page.tsxapp/contribute/page.tsxapp/apply/page.tsxcomponents/layout/header.tsxcomponents/layout/footer.tsx
**/*.{tsx,ts}
📄 CodeRabbit inference engine (.cursor/rules/trigger.realtime.mdc)
**/*.{tsx,ts}: UseuseTaskTriggerhook for basic task triggering anduseRealtimeTaskTriggerfor real-time status updates in React frontends
UseuseRealtimeRunhook to subscribe to specific run updates anduseRealtimeRunsWithTagto subscribe to tagged runs in React components
UseuseRealtimeStreamhook with defined stream types for consuming streamed data in React with type safety and throttle control
UseuseWaitTokenhook to handle approval/completion of wait token operations in React components
UseuseRunSWR hook withrefreshInterval: 0(disabled polling) for one-time run data fetches in React instead of realtime subscriptions
Files:
app/apply/[role]/page.tsxapp/contribute/page.tsxapp/apply/page.tsxapp/sitemap.tsnext.config.tscomponents/layout/header.tsxapp/metadata.tscomponents/layout/footer.tsx
**/*.ts
📄 CodeRabbit inference engine (.cursor/rules/trigger.scheduled-tasks.mdc)
**/*.ts: Use imperative schedule creation viaschedules.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
Useschedules.retrieve(),schedules.list(),schedules.update(),schedules.deactivate(),schedules.activate(), andschedules.del()for SDK-based schedule management
Files:
app/sitemap.tsnext.config.tsapp/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
/applyroute. Since/get-involvedredirects to/applyanyway, 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 idiomatich-pxTailwind 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
/applyand/contributeare correctly wired. TheisActivelogic on Line 49 will properly highlight "Apply" for sub-routes like/apply/[role]as well.
82-92: LGTM!CTA correctly points to the new
/contributepage with an appropriate label.next.config.ts (2)
103-109: Good addition of anti-clickjacking headers.Both
X-Frame-Options: DENYandframe-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-Policywith onlyframe-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
/contributeroute is the redirect target for/donate, but it's not yet in the sitemap (see comment onapp/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
/applyare 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, andsection.titleas 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 forapplyandcontributeare 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-3for donation buttons,sm:grid-cols-2for contribution cards,sm:grid-cols-3for stats) handles viewport sizes well. The card layout withflex flex-col h-fullandmt-autoon 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, wherebg-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.
🚀 Deployment StatusEnvironment: Development URLs:
Deployment completed successfully! ✨ |
Summary by Sourcery
Add a new Contribute page centralizing donation and contribution options and wire it into site navigation and routing.
New Features:
Enhancements: