-
Notifications
You must be signed in to change notification settings - Fork 50
Revamp About Us section with feature cards #48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
WalkthroughAdds extensive SEO/Open Graph/Twitter metadata, changes the favicon to Changes
Sequence Diagram(s)Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (4 warnings)
✅ Passed checks (1 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used🪛 Biome (2.1.2)src/components/Hero.jsx[error] 33-33: Expected corresponding JSX closing tag for 'div'. Opening tag closing tag (parse) [error] 32-32: Expected corresponding JSX closing tag for 'div'. Opening tag closing tag (parse) 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
🧹 Nitpick comments (5)
index.html (1)
27-27: Consider a more descriptive page title.While "OSK" is concise, a more descriptive title like "Open Source Kashmir (OSK)" or "OSK - Open Source Kashmir" would improve SEO and provide better context in browser tabs and search results.
- <title>OSK</title> + <title>Open Source Kashmir (OSK)</title>src/components/Hero.css (1)
32-36: Consider CSS custom properties for colors.The hardcoded color values (#ffffff, #2b6ef6, etc.) could be extracted to CSS custom properties (CSS variables) at the root level for easier theme management and consistency across components.
Example:
:root { --color-text-primary: #ffffff; --color-accent: #2b6ef6; --color-text-secondary: rgba(255, 255, 255, 0.85); } .hero-title { color: var(--color-text-primary); } .hero-accent { color: var(--color-accent); }src/components/About.jsx (1)
1-1: React import is unnecessary in modern React.With React 17+ and the new JSX transform, explicitly importing React is no longer required unless you're using React hooks or other React APIs directly. Since this component only returns JSX, the import can be removed.
-import React from "react"; import "./About.css";src/components/Hero.jsx (1)
1-1: React import is unnecessary in modern React.With React 17+ and the new JSX transform, explicitly importing React is no longer required unless using React APIs directly. Since this component only returns JSX, the import can be removed.
-import React from 'react'; import './Hero.css';src/components/About.css (1)
10-10: Consider extracting colors to CSS custom properties.Similar to Hero.css, the hardcoded color values could be extracted to CSS custom properties for consistency and easier theme management across components.
Consider defining shared colors in a root-level stylesheet:
:root { --color-bg-card: rgba(11, 18, 33, 0.92); --color-bg-card-secondary: rgba(17, 27, 48, 0.95); --color-text-primary: #ffffff; --color-text-secondary: rgba(255, 255, 255, 0.85); }Also applies to: 21-21, 39-39, 62-62
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
public/favicon.pngis excluded by!**/*.png
📒 Files selected for processing (7)
LICENSE.md(1 hunks)README.md(1 hunks)index.html(1 hunks)src/components/About.css(1 hunks)src/components/About.jsx(1 hunks)src/components/Hero.css(1 hunks)src/components/Hero.jsx(1 hunks)
🔇 Additional comments (7)
index.html (1)
4-21: SEO metadata looks well-structured.The Open Graph and Twitter Card metadata are properly configured with appropriate content for social sharing. The description and keywords are relevant to the project.
LICENSE.md (1)
1-21: LGTM!Standard MIT License text with appropriate copyright notice for Open Source Kashmir.
src/components/Hero.css (1)
1-163: Well-structured responsive styling.The CSS provides a solid foundation with:
- Clear two-column layout that adapts responsively
- Proper button sizing (min-height: 44px) for accessibility
- Smooth transitions and hover effects
- Appropriate breakpoints for mobile layouts
src/components/About.jsx (1)
4-49: Well-structured component with clear content hierarchy.The component effectively presents OSK's mission with:
- Clear heading and introductory text
- Three well-defined feature cards
- Semantic HTML elements (section, headings)
- Proper use of strong tags for emphasis
src/components/Hero.jsx (2)
17-28: Good use of ARIA for CTA group.The
role="group"witharia-label="Call to action"properly groups the related action buttons and provides context for screen reader users.
34-34: Correct use of aria-hidden for decorative icons.The emoji icons correctly use
aria-hidden="true"to prevent screen readers from announcing them, since they're decorative and the adjacent headings provide the meaningful content.Also applies to: 39-39, 44-44
src/components/About.css (1)
1-68: Well-implemented responsive card layout.The CSS effectively implements:
- Responsive grid layout using
auto-fitandminmax()for automatic column adjustment- Consistent card styling with hover effects
- Appropriate spacing and visual hierarchy
- Theme colors that align with the Hero component styling
src/components/About.jsx
Outdated
|
|
||
| <div className="about-grid"> | ||
| <div className="about-card"> | ||
| <span className="about-icon">🌍</span> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
Add aria-hidden to decorative emoji icons.
The emoji icons (🌍, 👩🏫, 🤝) are decorative and should be hidden from screen readers to avoid redundant announcements, since the content is already described by the adjacent headings and text.
- <span className="about-icon">🌍</span>
+ <span className="about-icon" aria-hidden="true">🌍</span>Apply similar changes to the other emoji icons at Lines 29 and 38.
Also applies to: 29-29, 38-38
🤖 Prompt for AI Agents
In src/components/About.jsx around lines 19, 29 and 38, the decorative emoji
span elements (e.g., <span className="about-icon">🌍</span>) are announced by
screen readers; add aria-hidden="true" to each of those spans so they are
ignored by assistive tech (apply to the spans at lines 19, 29 and 38).
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (2)
index.html (1)
24-25: Drop the duplicate viewport tag.Two identical
<meta name="viewport"...>entries exist; keep one to avoid redundant directives.Apply this diff:
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />src/components/Hero.jsx (1)
31-48: Consider adding description text to feature cards for better UX.The semantic HTML structure using
<ul>and<li>elements is excellent, and correctly addresses the previous review feedback about ARIA roles. The use ofaria-hidden="true"on the emoji icons is also appropriate for decorative content.However, each card currently only has a title (e.g., "Innovation", "Learning", "Collaboration") without any supporting description text. Adding a brief description under each title would provide better context and improve the user experience.
Consider enhancing each card with description text:
<li className="card"> <div className="card-icon" aria-hidden="true">🚀</div> <h3 className="card-title">Innovation</h3> + <p className="card-description">Drive technological advancement through creative solutions and cutting-edge projects.</p> </li> <li className="card"> <div className="card-icon" aria-hidden="true">💡</div> <h3 className="card-title">Learning</h3> + <p className="card-description">Enhance your skills through mentorship, workshops, and hands-on experience.</p> </li> <li className="card"> <div className="card-icon" aria-hidden="true">🤝</div> <h3 className="card-title">Collaboration</h3> + <p className="card-description">Work together with a diverse community to build impactful open source projects.</p> </li>Remember to add corresponding CSS styling for
.card-descriptionin Hero.css.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
README.md(1 hunks)index.html(1 hunks)src/components/Hero.jsx(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- README.md
🔇 Additional comments (1)
src/components/Hero.jsx (1)
1-7: LGTM!The imports and semantic header structure are correct. Good use of the
<header>element for the hero section.
src/components/Hero.jsx
Outdated
| <div className="hero-buttons" role="group" aria-label="Call to action"> | ||
| <a className="btn primary" href="#programs">Explore Programs</a> | ||
| <a | ||
| className="btn outline" | ||
| href="https://github.com/Open-Source-Kashmir" | ||
| target="_blank" | ||
| rel="noopener noreferrer" | ||
| > | ||
| Join GitHub | ||
| </a> | ||
| <a className="btn outline" href="#discord">Join Discord</a> | ||
| </div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify anchor link targets exist in the application.
The ARIA attributes (role="group" and aria-label) correctly group the CTA buttons, and the GitHub link properly includes security attributes (target="_blank" and rel="noopener noreferrer").
However, the "Explore Programs" and "Join Discord" buttons use anchor links (#programs and #discord) that assume elements with these IDs exist on the page. If these targets don't exist, users will experience broken navigation.
Run the following script to verify these anchor targets exist in the codebase:
If these IDs don't exist, consider either:
- Adding the corresponding sections with these IDs, or
- Replacing
#discordwith an actual Discord invite URL (e.g.,https://discord.gg/your-invite-code)
🏁 Script executed:
#!/bin/bash
# Description: Check if anchor link targets exist in the application
# Search for elements with id="programs"
echo "=== Searching for id='programs' ==="
rg -n 'id=["\']programs["\']' --type html --type jsx --type tsx --type js
# Search for elements with id="discord"
echo "=== Searching for id='discord' ==="
rg -n 'id=["\']discord["\']' --type html --type jsx --type tsx --type js
# Also check if Discord link should be an external invite URL
echo "=== Checking for Discord invite URLs in the codebase ==="
rg -n 'discord\.gg|discord\.com/invite' --type js --type jsx --type tsxLength of output: 105
🏁 Script executed:
#!/bin/bash
echo '=== Searching for id="programs" ==='
rg -n "id=[\"']programs[\"']" --type html --type jsx --type tsx --type js
echo '=== Searching for id="discord" ==='
rg -n "id=[\"']discord[\"']" --type html --type jsx --type tsx --type js
echo '=== Searching for Discord invite URLs ==='
rg -n "discord\.gg|discord\.com/invite" --type js --type jsx --type tsxLength of output: 196
🏁 Script executed:
#!/bin/bash
echo '=== Searching for id="programs" ==='
rg -n -e "id=['\"]programs['\"]" -g '*.js' -g '*.jsx' -g '*.ts' -g '*.tsx' -g '*.html'
echo '=== Searching for id="discord" ==='
rg -n -e "id=['\"]discord['\"]" -g '*.js' -g '*.jsx' -g '*.ts' -g '*.tsx' -g '*.html'
echo '=== Searching for Discord invite URLs ==='
rg -n -e "discord\.gg|discord\.com/invite" -g '*.js' -g '*.jsx' -g '*.ts' -g '*.tsx'Length of output: 369
Fix missing anchor targets for CTA links
id="programs"andid="discord"not found; add corresponding sections or replace#discordwith the existing invite URL (https://discord.gg/gEHBwfDX) in src/components/Hero.jsx (lines 17–28).
🤖 Prompt for AI Agents
In src/components/Hero.jsx around lines 17 to 28, the CTA anchor links reference
fragment IDs ("#programs" and "#discord") that don't exist; update the file so
the CTAs point to valid targets: either add matching id="programs" and
id="discord" to the appropriate sections of the site, or replace the
href="#discord" with the actual Discord invite URL "https://discord.gg/gEHBwfDX"
(and replace href="#programs" with an existing section or a proper URL if no
programs section exists). Ensure target links remain accessible and, for
external links, retain target="_blank" and rel="noopener noreferrer".
There was a problem hiding this 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
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/components/Hero.jsx(1 hunks)
🧰 Additional context used
🪛 Biome (2.1.2)
src/components/Hero.jsx
[error] 32-32: Expected corresponding JSX closing tag for 'div'.
Opening tag
closing tag
(parse)
[error] 31-31: Expected corresponding JSX closing tag for 'div'.
Opening tag
closing tag
(parse)
| <div className="hero-right"> | ||
| <div className="feature-cards" role="list" aria-label="Highlights"> | ||
| <div className="card" role="listitem"> | ||
| <div className="card-icon" aria-hidden="true">🚀</div> | ||
| <h3 className="card-title">Innovation</h3> | ||
| </li> | ||
|
|
||
| <div className="w-30 h-30 bg-gray-900/95 text-white rounded-2xl flex flex-col items-center justify-center shadow-xl shadow-gray-900/80 text-center p-2 transition-all duration-150 hover:-translate-y-2 hover:shadow-2xl hover:shadow-gray-900/90" role="listitem"> | ||
| <div className="text-4xl mb-1" aria-hidden="true">💡</div> | ||
| <h3 className="text-base m-0 font-bold">Learning</h3> | ||
| </div> | ||
| <li className="card"> | ||
| <div className="card-icon" aria-hidden="true">💡</div> | ||
| <h3 className="card-title">Learning</h3> | ||
| </li> | ||
|
|
||
| <div className="w-30 h-30 bg-gray-900/95 text-white rounded-2xl flex flex-col items-center justify-center shadow-xl shadow-gray-900/80 text-center p-2 transition-all duration-150 hover:-translate-y-2 hover:shadow-2xl hover:shadow-gray-900/90" role="listitem"> | ||
| <div className="text-4xl mb-1" aria-hidden="true">🤝</div> | ||
| <h3 className="text-base m-0 font-bold">Collaboration</h3> | ||
| </div> | ||
| </div> | ||
| <li className="card"> | ||
| <div className="card-icon" aria-hidden="true">🤝</div> | ||
| <h3 className="card-title">Collaboration</h3> | ||
| </li> | ||
| </ul> | ||
| </div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Critical: Mismatched opening and closing JSX tags.
The code has invalid JSX syntax with mismatched tags:
- Line 31 opens
<div className="feature-cards" role="list">but line 46 closes with</ul> - Line 32 opens
<div className="card" role="listitem">but line 35 closes with</li>
This syntax error will prevent the application from compiling. It appears the conversion to semantic list elements was incomplete.
Apply this diff to complete the conversion to semantic HTML:
- <div className="hero-right">
- <div className="feature-cards" role="list" aria-label="Highlights">
- <div className="card" role="listitem">
+ <div className="hero-right">
+ <ul className="feature-cards" aria-label="Highlights">
+ <li className="card">
<div className="card-icon" aria-hidden="true">🚀</div>
<h3 className="card-title">Innovation</h3>
</li>
<li className="card">
<div className="card-icon" aria-hidden="true">💡</div>
<h3 className="card-title">Learning</h3>
</li>
<li className="card">
<div className="card-icon" aria-hidden="true">🤝</div>
<h3 className="card-title">Collaboration</h3>
</li>
</ul>
</div>Note: When using semantic <ul> and <li> elements, the explicit role="list" and role="listitem" attributes are redundant and have been removed. Ensure your CSS includes list-style: none on .feature-cards to maintain the card-based visual styling.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <div className="hero-right"> | |
| <div className="feature-cards" role="list" aria-label="Highlights"> | |
| <div className="card" role="listitem"> | |
| <div className="card-icon" aria-hidden="true">🚀</div> | |
| <h3 className="card-title">Innovation</h3> | |
| </li> | |
| <div className="w-30 h-30 bg-gray-900/95 text-white rounded-2xl flex flex-col items-center justify-center shadow-xl shadow-gray-900/80 text-center p-2 transition-all duration-150 hover:-translate-y-2 hover:shadow-2xl hover:shadow-gray-900/90" role="listitem"> | |
| <div className="text-4xl mb-1" aria-hidden="true">💡</div> | |
| <h3 className="text-base m-0 font-bold">Learning</h3> | |
| </div> | |
| <li className="card"> | |
| <div className="card-icon" aria-hidden="true">💡</div> | |
| <h3 className="card-title">Learning</h3> | |
| </li> | |
| <div className="w-30 h-30 bg-gray-900/95 text-white rounded-2xl flex flex-col items-center justify-center shadow-xl shadow-gray-900/80 text-center p-2 transition-all duration-150 hover:-translate-y-2 hover:shadow-2xl hover:shadow-gray-900/90" role="listitem"> | |
| <div className="text-4xl mb-1" aria-hidden="true">🤝</div> | |
| <h3 className="text-base m-0 font-bold">Collaboration</h3> | |
| </div> | |
| </div> | |
| <li className="card"> | |
| <div className="card-icon" aria-hidden="true">🤝</div> | |
| <h3 className="card-title">Collaboration</h3> | |
| </li> | |
| </ul> | |
| </div> | |
| <div className="hero-right"> | |
| <ul className="feature-cards" aria-label="Highlights"> | |
| <li className="card"> | |
| <div className="card-icon" aria-hidden="true">🚀</div> | |
| <h3 className="card-title">Innovation</h3> | |
| </li> | |
| <li className="card"> | |
| <div className="card-icon" aria-hidden="true">💡</div> | |
| <h3 className="card-title">Learning</h3> | |
| </li> | |
| <li className="card"> | |
| <div className="card-icon" aria-hidden="true">🤝</div> | |
| <h3 className="card-title">Collaboration</h3> | |
| </li> | |
| </ul> | |
| </div> |
🧰 Tools
🪛 Biome (2.1.2)
[error] 32-32: Expected corresponding JSX closing tag for 'div'.
Opening tag
closing tag
(parse)
[error] 31-31: Expected corresponding JSX closing tag for 'div'.
Opening tag
closing tag
(parse)
🤖 Prompt for AI Agents
In src/components/Hero.jsx around lines 30 to 47 there are mismatched JSX tags
from an incomplete conversion to semantic lists: a <div
className="feature-cards" role="list"> was closed with </ul> and several <div
className="card" role="listitem"> were closed with </li>; fix by replacing the
outer container with a <ul className="feature-cards"> and each card wrapper with
<li className="card"> (remove the redundant role attributes), ensure all opening
and closing tags match (ul/ li) and keep inner elements (icon div and h3)
intact; confirm CSS uses .feature-cards { list-style: none; } to preserve card
appearance.


What I changed
Replaced
src/components/About.jsxwith a structured layout (title, intro text, and three feature cards).Added
src/components/About.csswith responsive styles, card grid, and hover effects.Updated content to highlight OSK’s mission and opportunities (Global Exposure, Mentorship, Collaboration).
Why
The old About Us section was too plain and not engaging.
New layout provides clarity, improves design, and better represents OSK’s goals.
How to test
Run the project (
npm start).Scroll to About Us section.
Confirm:
Title + intro text show correctly.
Three cards display with icons and headings.
Hover effect works.
Layout adjusts properly on smaller screens.
Files changed
src/components/About.jsxsrc/components/About.cssCloses #47
Summary by CodeRabbit
New Features
Refactor