Skip to content

feat: add "Contribute" section to encourage open source participation#349

Open
Shweta-281 wants to merge 3 commits intoAOSSIE-Org:mainfrom
Shweta-281:feat/contribute-section
Open

feat: add "Contribute" section to encourage open source participation#349
Shweta-281 wants to merge 3 commits intoAOSSIE-Org:mainfrom
Shweta-281:feat/contribute-section

Conversation

@Shweta-281
Copy link

@Shweta-281 Shweta-281 commented Mar 22, 2026

Summary

Added a new "Contribute" section to the homepage to encourage users and developers to participate in the project.

Changes

  • Created a new Contribute section component
  • Added a GitHub call-to-action button
  • Integrated the section into the homepage
  • Added GSAP animations for consistency with existing sections

Benefits

  • Improves community engagement
  • Encourages open-source contributions
  • Enhances overall user experience

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking CHANGE which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Refactor (does not change functionality, e.g. code style improvements, linting)
  • Documentation update
  • New release (version bump, release preparation)
  • UI/UX update (design changes, interface improvements)
  • CI/CD & Tooling (workflow, build, or dev tool changes)
  • Dependency update (package upgrades or deprecation fixes)

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

Please include screenshots below if applicable.
image

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules
  • I have checked my code and corrected any misspellings

Maintainer Checklist

Summary by CodeRabbit

  • New Features

    • Added "Contribute" section with GitHub repository link
    • Enhanced navbar with dynamic icons for external links and GitHub
  • Improvements

    • Refined navigation and footer styling
    • Improved semantic HTML structure and accessibility attributes

@Shweta-281 Shweta-281 requested a review from a team as a code owner March 22, 2026 15:28
@coderabbitai
Copy link

coderabbitai bot commented Mar 22, 2026

📝 Walkthrough

Walkthrough

This PR introduces a new "Contribute" section to the homepage, refactors Footer and NavBar components to use shared link constants for maintainability, updates asset import paths to use path aliases, improves accessibility with ARIA labels and semantic roles, and adds GSAP animations for the contribute section.

Changes

Cohort / File(s) Summary
Layout Components Refactoring
app/components/Layout/Footer/index.jsx, app/components/Layout/NavBar/index.jsx, app/components/Layout/NavBar/Navbar.css
Refactored Footer and NavBar to render links dynamically from shared constants; added icon mapping, accessibility attributes (roles, aria-labels), and semantic markup improvements. Updated NavBar logo from div to button and CSS to remove default button styles.
Constants
app/constants/links.js
Added new constants module exporting SOCIAL_LINKS and NAV_LINKS arrays with metadata for dynamic rendering in Footer and NavBar components.
New Contribute Section
app/components/sections/Contribute/Contribute.jsx, app/components/sections/Contribute/Contribute.css
Created new Contribute section component with GitHub call-to-action link, styling with flexbox layout, button styles, and hover effects.
Asset Import Path Updates
app/components/sections/About/About.jsx, app/components/sections/Features/Features.jsx, app/components/sections/Hero/Hero.jsx, app/components/sections/TechStack/TechStack.jsx
Updated relative asset import paths to use @/assets path alias for consistency across multiple section components.
Main Page Integration
app/page.jsx
Updated component imports to use path aliases, integrated new Contribute component into page layout, and added GSAP ScrollTrigger animation timeline for contribute section entrance effects.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • PR #201: Refactors Footer and NavBar to centralize link rendering using data-driven approaches with icon mappings.
  • PR #260: Applies memoization/useCallback optimizations to the same Footer and NavBar components being refactored here.
  • PR #335: Modifies the same layout components (Footer and NavBar) with overlapping code changes.

Suggested labels

enhancement

Suggested reviewers

  • M4dhav

Poem

🐰 Links now gathered in constants so neat,
A Contribute button makes the site complete,
With icons dancing and accessibility bright,
The NavBar and Footer now function just right,
Community engagement takes flight! ✨

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

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.
Out of Scope Changes check ❓ Inconclusive Changes to Footer, Navbar, and asset import paths using @/ aliases are refactoring improvements that support the new component structure without being required by the issue. Clarify whether refactoring Navbar/Footer components and converting asset paths to aliases were intentional scope expansions or if they should be separated into distinct PRs.
✅ 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 clearly describes the main change: adding a new 'Contribute' section to encourage open source participation.
Linked Issues check ✅ Passed All coding requirements from issue #347 are implemented: Contribute component created, GitHub CTA button added, section integrated into homepage, and GSAP animations applied.

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

Important

Merge conflicts detected (Beta)

  • Resolve merge conflict in branch feat/contribute-section
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@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.

🧹 Nitpick comments (5)
app/constants/links.js (1)

13-17: Consider adding external: true for consistency.

The GitHub link points to an external URL but doesn't have external: true like the AOSSIE link does. This inconsistency might affect how external links are rendered (e.g., with target="_blank" and rel="noopener noreferrer").

♻️ Proposed fix for consistency
   {
     name: "GitHub",
     url: "https://github.com/AOSSIE-Org/Resonate",
     icon: "github",
+    external: true,
   },
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/constants/links.js` around lines 13 - 17, The GitHub link object (the
entry with name: "GitHub" and url: "https://github.com/AOSSIE-Org/Resonate") is
missing the external: true flag; update that object to include external: true so
it matches the AOSSIE link pattern and ensures external links are rendered with
the correct behavior (e.g., target="_blank" and rel="noopener noreferrer").
app/components/sections/Contribute/Contribute.css (1)

36-38: Add focus state for keyboard accessibility.

The .contribute-btn has a hover state but lacks a visible focus state for keyboard navigation. This is important for accessibility compliance.

♿ Proposed fix to add focus styles
 .contribute-btn:hover {
   opacity: 0.85;
 }
+
+.contribute-btn:focus {
+  outline: 2px solid `#FFC107`;
+  outline-offset: 3px;
+}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/sections/Contribute/Contribute.css` around lines 36 - 38, The
.contribute-btn CSS lacks a keyboard-visible focus state; add explicit focus
styles (use :focus and/or :focus-visible selectors) for .contribute-btn that
mirror the hover feedback (e.g., matching opacity/visual change) and include a
high-contrast ring or outline (outline, box-shadow, or border) so keyboard users
can see focus; update the .contribute-btn rules to include these focus selectors
and ensure the visual focus is not removed by outline: none.
app/components/Layout/NavBar/Navbar.css (1)

25-28: Add focus styles for the logo button.

Since .navbar-logo is now a <button> element for accessibility, it should have visible focus styles for keyboard navigation, similar to the other interactive elements (lines 158-163).

♿ Proposed fix to add focus styles
 .hamburger:focus,
+.navbar-logo:focus,
 .nav-link:focus,
 .download-btn:focus {
   outline: 2px solid `#FFC107`;
   outline-offset: 3px;
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/Layout/NavBar/Navbar.css` around lines 25 - 28, Add visible
keyboard focus styles for the .navbar-logo button: update the .navbar-logo
selector to include :focus and :focus-visible rules that mirror the existing
interactive focus styling used elsewhere (lines that style other nav interactive
elements), e.g., apply the same outline/box-shadow, border-radius and focus
color so the logo button is visually identifiable when focused; ensure the
styles only affect focus state and do not change default layout or padding.
app/components/Layout/Footer/index.jsx (1)

7-11: Good refactoring with one maintainability consideration.

The iconMap approach cleanly decouples icon rendering from the link data. However, if a new entry is added to SOCIAL_LINKS without a corresponding iconMap entry, it will silently render undefined (no icon).

Consider adding a fallback or validation:

♻️ Optional: Add defensive check for missing icons
 const iconMap = {
   "GitHub": <FaGithub />,
   "Twitter/X": <BsTwitterX />,
   "LinkedIn": <FaLinkedinIn />,
 };
+
+const getIcon = (name) => {
+  const icon = iconMap[name];
+  if (!icon) {
+    console.warn(`Missing icon for social link: ${name}`);
+  }
+  return icon;
+};

Then use {getIcon(link.name)} instead of {iconMap[link.name]}.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/Layout/Footer/index.jsx` around lines 7 - 11, Add a defensive
getter for icons and use it where links are rendered: keep the existing iconMap
but implement a getIcon(name) function that returns iconMap[name] if present,
otherwise returns a sensible fallback (e.g., a default icon component or null)
and optionally logs or warns about the missing mapping; then replace direct uses
of iconMap[link.name] with getIcon(link.name) in the Footer rendering
(references: iconMap, getIcon, SOCIAL_LINKS, and the Footer component) so adding
a new SOCIAL_LINK without an icon no longer renders undefined.
app/components/Layout/NavBar/index.jsx (1)

61-74: Consider the UX of showing both text and icon for the GitHub link.

For the GitHub entry in NAV_LINKS, this renders both the text "GitHub" and the <FaGithub /> icon (line 70 + line 72). This may be intentional, but it's worth confirming the design intent—typically, you'd show either the text label or the icon, not both.

If intended, consider adding aria-hidden="true" to the icon since the link text already conveys meaning:

♻️ Optional: Hide decorative icon from screen readers
                 {link.name}
                 {link.external && <FaExternalLinkAlt size={12} />}
-                {link.icon === "github" && <FaGithub size={20} />}
+                {link.icon === "github" && <FaGithub size={20} aria-hidden="true" />}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/components/Layout/NavBar/index.jsx` around lines 61 - 74, NAV_LINKS'
GitHub entry currently renders both the "GitHub" text and the FaGithub icon
inside NavBar; decide whether to show only the icon or the text, and if you keep
both make the icon decorative by adding aria-hidden="true" to the FaGithub
component (so screen readers rely on the link text). Update the conditional
rendering in the NavBar return (where link.icon === "github") to either render
only the icon or add aria-hidden="true" to FaGithub, and ensure the link text
remains the accessible label for the anchor.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@app/components/Layout/Footer/index.jsx`:
- Around line 7-11: Add a defensive getter for icons and use it where links are
rendered: keep the existing iconMap but implement a getIcon(name) function that
returns iconMap[name] if present, otherwise returns a sensible fallback (e.g., a
default icon component or null) and optionally logs or warns about the missing
mapping; then replace direct uses of iconMap[link.name] with getIcon(link.name)
in the Footer rendering (references: iconMap, getIcon, SOCIAL_LINKS, and the
Footer component) so adding a new SOCIAL_LINK without an icon no longer renders
undefined.

In `@app/components/Layout/NavBar/index.jsx`:
- Around line 61-74: NAV_LINKS' GitHub entry currently renders both the "GitHub"
text and the FaGithub icon inside NavBar; decide whether to show only the icon
or the text, and if you keep both make the icon decorative by adding
aria-hidden="true" to the FaGithub component (so screen readers rely on the link
text). Update the conditional rendering in the NavBar return (where link.icon
=== "github") to either render only the icon or add aria-hidden="true" to
FaGithub, and ensure the link text remains the accessible label for the anchor.

In `@app/components/Layout/NavBar/Navbar.css`:
- Around line 25-28: Add visible keyboard focus styles for the .navbar-logo
button: update the .navbar-logo selector to include :focus and :focus-visible
rules that mirror the existing interactive focus styling used elsewhere (lines
that style other nav interactive elements), e.g., apply the same
outline/box-shadow, border-radius and focus color so the logo button is visually
identifiable when focused; ensure the styles only affect focus state and do not
change default layout or padding.

In `@app/components/sections/Contribute/Contribute.css`:
- Around line 36-38: The .contribute-btn CSS lacks a keyboard-visible focus
state; add explicit focus styles (use :focus and/or :focus-visible selectors)
for .contribute-btn that mirror the hover feedback (e.g., matching
opacity/visual change) and include a high-contrast ring or outline (outline,
box-shadow, or border) so keyboard users can see focus; update the
.contribute-btn rules to include these focus selectors and ensure the visual
focus is not removed by outline: none.

In `@app/constants/links.js`:
- Around line 13-17: The GitHub link object (the entry with name: "GitHub" and
url: "https://github.com/AOSSIE-Org/Resonate") is missing the external: true
flag; update that object to include external: true so it matches the AOSSIE link
pattern and ensures external links are rendered with the correct behavior (e.g.,
target="_blank" and rel="noopener noreferrer").

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c4b3970f-f27a-40c7-ac31-428ef063d629

📥 Commits

Reviewing files that changed from the base of the PR and between ee40ec9 and e9b7f1c.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (18)
  • app/components/Layout/Footer/index.jsx
  • app/components/Layout/NavBar/Navbar.css
  • app/components/Layout/NavBar/index.jsx
  • app/components/sections/About/About.css
  • app/components/sections/About/About.jsx
  • app/components/sections/Contribute/Contribute.css
  • app/components/sections/Contribute/Contribute.jsx
  • app/components/sections/DownloadApp/DownloadApp.css
  • app/components/sections/DownloadApp/DownloadApp.jsx
  • app/components/sections/DownloadApp/StoreButton.js
  • app/components/sections/Features/Features.css
  • app/components/sections/Features/Features.jsx
  • app/components/sections/Hero/Hero.css
  • app/components/sections/Hero/Hero.jsx
  • app/components/sections/TechStack/TechStack.css
  • app/components/sections/TechStack/TechStack.jsx
  • app/constants/links.js
  • app/page.jsx

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.

feat: add "Contribute" section to improve community engagement

1 participant