Skip to content

Revamp “What We Do” Section with Interactive Expandable Cards#605

Open
rijulmenon wants to merge 1 commit into
GitMetricsLab:mainfrom
rijulmenon:what-we-do-feature
Open

Revamp “What We Do” Section with Interactive Expandable Cards#605
rijulmenon wants to merge 1 commit into
GitMetricsLab:mainfrom
rijulmenon:what-we-do-feature

Conversation

@rijulmenon
Copy link
Copy Markdown

@rijulmenon rijulmenon commented May 29, 2026

Description

Enhanced the About page’s “What We Do” section by improving hover responsiveness and introducing fully interactive expandable feature cards for a more modern and engaging user experience.

Changes Implemented

  • Removed hover animation delay for instant responsiveness
  • Added smooth hover transitions with improved UX
  • Implemented clickable accordion-style expandable cards
  • Added dynamic detailed content sections for each feature
  • Enabled single-card expansion behaviour
  • Added active state highlighting for selected cards
  • Added smooth expand/collapse animations
  • Improved mobile responsiveness and auto-scroll behaviour
  • Added accessibility enhancements:
  • ARIA attributes
  • Keyboard navigation support
  • Better interactive semantics

Additional Improvements

  • Preserved existing dark theme styling
  • Maintained modular and reusable implementation
  • Ensured no impact on other sections/pages
  • Added and verified 7 passing unit tests

Result

The section now behaves as a polished interactive feature showcase with smoother animations, better usability, improved accessibility, and responsive expandable content.

closes #604

Summary by CodeRabbit

  • New Features
    • Feature cards on the About page are now interactive and expandable—click any card to reveal detailed information.
    • Keyboard support added: press Enter or Space to toggle feature expansion.
    • Details panel displays descriptions and bullet-point lists with smooth animations.
    • Close button included to collapse expanded features.
    • Enhanced accessibility with keyboard navigation and ARIA attributes.

Review Change Stack

@netlify
Copy link
Copy Markdown

netlify Bot commented May 29, 2026

Deploy Preview for github-spy ready!

Name Link
🔨 Latest commit f06106c
🔍 Latest deploy log https://app.netlify.com/projects/github-spy/deploys/6a191e3d666a6000080be255
😎 Deploy Preview https://deploy-preview-605--github-spy.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 29, 2026

📝 Walkthrough

Walkthrough

The About page's "What We Do" feature section evolves from a static hover-responsive grid into an interactive, click-driven experience. Feature data now includes nested detail objects. Clicking a card toggles its expanded state and reveals animated details with descriptions and bullet items below the grid. Only one feature expands at a time, and the component supports keyboard navigation.

Changes

Interactive Feature Cards on About Page

Layer / File(s) Summary
Feature data model and interactive state
src/pages/About/About.tsx
Feature data is enriched with nested details objects containing descriptions and bullet items. Component adds activeIdx state to track the currently active feature and a detailRef to scroll the details panel into view. Click handler toggles the active feature index, with async scroll delay.
Interactive cards and expandable details UI
src/pages/About/About.tsx
Feature cards are rebuilt as accessible, keyboard-interactive motion.div elements with ARIA attributes (role="button", tabIndex, aria-expanded). An AnimatePresence-driven expandable details panel animates height, opacity, and position, rendering the active feature's description and check-marked bullet items. A close button collapses the panel. Mission section's viewport animation is adjusted to once: true.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • GitMetricsLab/github_tracker#173: Both PRs modify src/pages/About/About.tsx with Framer Motion animated cards and feature rendering using a data-driven approach.
  • GitMetricsLab/github_tracker#418: Both PRs substantially rewrite the features section using framer-motion-based animated cards and data-driven feature rendering.

Suggested labels

level:intermediate, quality:clean, type:accessibility

Poem

🐰 A feature unfolds with a click so spry,
Cards dance and details reach the sky,
Keyboard-friendly, smooth and keen,
The finest interactive seen!
hop hop

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: revamping the 'What We Do' section with interactive expandable cards, which directly matches the primary objective of the PR.
Description check ✅ Passed The description covers all required template sections with comprehensive details about changes, testing, and type of change selection, though the Related Issue section is present but could be more formally structured.
Linked Issues check ✅ Passed The PR implementation addresses all core objectives from issue #604: instant hover responsiveness, smooth transitions, clickable expandable cards, unique content per feature, single-card expansion, responsive design, and accessibility enhancements.
Out of Scope Changes check ✅ Passed The PR changes are focused solely on the About page's 'What We Do' section as required; the mission section adjustment is a minor viewport optimization related to motion elements within the same page.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ 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
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

🎉 Thank you @rijulmenon for your contribution. Please make sure your PR follows https://github.com/GitMetricsLab/github_tracker/blob/main/CONTRIBUTING.md#-pull-request-guidelines

Copy link
Copy Markdown
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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/pages/About/About.tsx`:
- Around line 116-144: Replace the non-semantic motion.div used for each feature
card with a native button element (e.g., motion.button type="button") so browser
provides correct keyboard behavior; keep attributes like
id={`feature-card-${idx}`}, aria-expanded, aria-controls, onClick={() =>
handleCardClick(idx)}, className, and all Framer Motion props (initial,
whileInView, transition, whileHover) but remove role="button", tabIndex={0}, and
the custom onKeyDown handler (Enter/Space handling) since a native button
handles those natively; ensure the element still uses handleCardClick and
retains the same styling and motion props.
- Around line 51-65: The state updater in handleCardClick currently performs
side effects (setTimeout and detailRef.current.scrollIntoView) inside the
functional updater passed to setActiveIdx; move the timing/scroll logic out of
the updater and make the updater purely return the new index. Specifically: keep
handleCardClick only computing and calling setActiveIdx(prev => prev === idx ?
null : idx) and remove the setTimeout/scrollIntoView from it, then add a
useEffect that watches activeIdx and, when activeIdx is non-null, runs the
setTimeout and scrollIntoView against detailRef.current (and clears the timeout
on cleanup) so the side effect is scheduled idempotently outside the state
updater.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 61428f67-b239-4031-9364-4bb4c6db61b7

📥 Commits

Reviewing files that changed from the base of the PR and between 4ae0ef6 and f06106c.

📒 Files selected for processing (1)
  • src/pages/About/About.tsx

Comment thread src/pages/About/About.tsx
Comment thread src/pages/About/About.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🚀 Feature: Improve “What We Do” Section Interactivity on About Page

1 participant