Skip to content

Conversation

@DEVANSH-GAJJAR
Copy link

@DEVANSH-GAJJAR DEVANSH-GAJJAR commented Dec 20, 2025

Summary

Enhanced the user experience on the Projects page by making project cards fully interactive and aligning them with the AOSSIE brand identity.

Changes

  • Interactive UI: Wrapped project cards in a Link component so the entire card is clickable.
  • Visual Polish: Added a "lift" animation and a subtle "AOSSIE Yellow" glow/border on hover.

Summary by CodeRabbit

  • New Features

    • Project cards are fully clickable and navigate to each project's link.
    • Per-project link labels now display (defaults to "View").
    • External project links open in a new tab for safer browsing.
  • Bug Fixes / Improvements

    • Improved hover behavior and transitions to avoid visual flashing in dark mode.
    • Image alt text updated to use the project name for better accessibility.

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Dec 20, 2025

@DEVANSH-GAJJAR is attempting to deploy a commit to the AOSSIE Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai
Copy link

coderabbitai bot commented Dec 20, 2025

Walkthrough

Project cards on the projects page are now wrapped with Next.js Link (next/link), use per-project link labels, detect external vs internal links (external opens in new tab with rel="noopener noreferrer"), update image alt, and adjust hover behavior.

Changes

Cohort / File(s) Summary
Project Card Navigation & Rendering
src/pages/projects.jsx
Replaced static per-project card rendering with a Next.js Link-wrapped card using project.link.href (fallback '#'). Added per-project link label (fallback "View"). Detects external links to set target="_blank" and rel="noopener noreferrer"; internal links open same tab. Preserves image, name, description inside card, sets image alt to project.name, removes inline hover background color, and adjusts hover/transition styles and wrapper structure to avoid dark-mode flash. Imported Link from next/link.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Check Link import and use of href vs project.link.href naming and fallback '#'
  • Verify external link detection logic and proper target / rel attributes
  • Review accessibility: image alt, focus/keyboard behavior for Link-wrapped cards
  • Confirm hover style change avoids dark-mode flash and preserves contrast

Poem

🐇 I hopped through code with nimble paws,
Wrapped each card in gentle laws,
Links that spring and images gleam,
New tabs flutter like a dream,
A rabbit's cheer for smoother streams ✨

Pre-merge checks and finishing touches

❌ 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%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(ui): make project cards interactive' directly and clearly summarizes the main change: wrapping project cards in a Link component to make them fully interactive.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2a4b6ad and 7abe9bf.

📒 Files selected for processing (1)
  • src/pages/projects.jsx (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/pages/projects.jsx

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.

Actionable comments posted: 4

🧹 Nitpick comments (1)
src/pages/projects.jsx (1)

38-39: Modernize the Link usage for Next.js 14.1.3.

The legacyBehavior with passHref pattern is outdated. Next.js 14.1.3 supports modern Link syntax without requiring an intermediate <a> element.

Consider this refactor:

-            <Link href={projectUrl} passHref legacyBehavior>
-              <a target="_blank" rel="noopener noreferrer" style={{ textDecoration: 'none', display: 'block', height: '100%' }}>
+            <Link 
+              href={projectUrl}
+              target={projectUrl !== '#' ? "_blank" : undefined}
+              rel={projectUrl !== '#' ? "noopener noreferrer" : undefined}
+              style={{ textDecoration: 'none', display: 'block', height: '100%' }}
+            >
                <MuiCard
                  ...
                </MuiCard>
-              </a>
            </Link>
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dfb8668 and 03cf8de.

📒 Files selected for processing (1)
  • src/pages/projects.jsx (3 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/pages/projects.jsx (1)
src/helper/projects.js (1)
  • projects (12-85)
🔇 Additional comments (2)
src/pages/projects.jsx (2)

13-14: LGTM!

The imports are correctly added to support the new interactive card functionality.


98-103: LGTM!

The link label display and hover effects are implemented correctly with proper use of the extracted linkLabel and group hover classes.

Comment on lines 62 to 68
<Image
src={project.logo}
alt={`${project.title} image`}
width={80}
height={80}
style={{ margin: '0 auto 16px', objectFit: 'contain' }}
/>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix incorrect property in alt text.

Line 64 uses project.title for the alt text, but the project data structure uses project.name. This will result in alt text like "undefined image", breaking accessibility for screen readers.

🔎 Proposed fix
                    <Image
                      src={project.logo}
-                      alt={`${project.title} image`}
+                      alt={`${project.name} logo`}
                      width={80}
                      height={80}
                      style={{ margin: '0 auto 16px', objectFit: 'contain' }}
                    />

Note: Changed "image" to "logo" for more accurate description.

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

Suggested change
<Image
src={project.logo}
alt={`${project.title} image`}
width={80}
height={80}
style={{ margin: '0 auto 16px', objectFit: 'contain' }}
/>
<Image
src={project.logo}
alt={`${project.name} logo`}
width={80}
height={80}
style={{ margin: '0 auto 16px', objectFit: 'contain' }}
/>
🤖 Prompt for AI Agents
In src/pages/projects.jsx around lines 62 to 68, the Image alt prop uses
project.title which doesn't exist on the project object; replace it with
project.name and update the description from "image" to "logo" so the alt reads
`${project.name} logo`, ensuring correct accessibility text.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant