Skip to content

revamp ui - #24

Merged
aagra109 merged 9 commits into
mainfrom
improve-portfolio-theme-modes
Apr 6, 2026
Merged

revamp ui#24
aagra109 merged 9 commits into
mainfrom
improve-portfolio-theme-modes

Conversation

@aagra109

@aagra109 aagra109 commented Apr 4, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • Smooth site-wide scrolling, decorative grain utilities, a new section divider, and a footer with social links.
  • Style

    • Darker, consolidated color palette with new semantic surface tokens; updated selection behavior.
    • Refreshed typography, spacing, and consistent card/header/section visuals; adjusted animations to scale-based transitions.
  • Chores

    • Removed the theme toggle and underlying theme-provider behavior; simplified header/layout structure.

@coderabbitai

coderabbitai Bot commented Apr 4, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@aagra109 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 21 minutes and 34 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 21 minutes and 34 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: af6ebaee-0ce5-4faa-9c9d-234b2899344c

📥 Commits

Reviewing files that changed from the base of the PR and between dfbb2ef and afe1f7f.

📒 Files selected for processing (2)
  • src/app/globals.css
  • src/app/page.tsx
📝 Walkthrough

Walkthrough

Removed runtime theming and the ModeToggle; consolidated and replaced color tokens with new semantic surface/paper/noise/chart variables; added grain utilities and smooth scroll behavior; introduced SectionDivider and Footer; adjusted layout and multiple components to use new semantic styles, wrappers, and scale-based animations.

Changes

Cohort / File(s) Summary
Design tokens & utilities
src/app/globals.css
Replaced :root HSL tokens with a darker semantic palette (surface/paper/noise/chart vars), removed .dark overrides, added html { scroll-behavior: smooth } with reduced-motion override, set body background, updated selection/headings, and added .hero-grain/.paper-grain utilities.
Theme system removal
src/app/layout.tsx, src/components/theme-provider.tsx, src/components/ModeToggle.tsx, package.json
Removed ThemeProvider wrapper and theme-provider file, deleted ModeToggle component, removed next-themes dependency, and simplified RootLayout JSX (removed theme props and suppressHydrationWarning).
New layout pieces
src/components/Footer.tsx, src/components/SectionDivider.tsx, src/app/layout.tsx
Added Footer and SectionDivider components and inserted Footer into RootLayout (order: Header → children → Footer → SpeedInsights → Analytics).
Page composition & decoration
src/app/page.tsx, src/components/SectionDivider.tsx
Wrapped Experience in a positioned/clipped container, added an absolutely positioned SectionDivider overlay and a paper-grain decorative layer.
Component styling & markup updates
src/components/Header.tsx, src/components/Introduction.tsx, src/components/Skills.tsx, src/components/Experience.tsx
Switched many components from theme-driven variants to explicit neutral/dark/stone styles, updated typography to use var(--font-space-grotesk) fallbacks, replaced blur/translate motion with scale-based Framer Motion variants, removed decorative gradient overlays, adjusted spacing/scroll offsets and hover/transition behaviors.
Social icons refactor
src/components/social-icons.tsx, src/components/Introduction.tsx, src/components/Footer.tsx
Added social-icons module exporting socialIconMap and SocialIconComponent type; Introduction and Footer now consume the shared map and removed duplicate local icon definitions.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰
I nibble HSLs and weave some grain,
Tore out the toggle, tuned the frame,
Paper hums beneath the SVG sky,
Footers hop in, dividers sing high,
A small white rabbit sets the style to gain.

🚥 Pre-merge checks | ✅ 1 | ❌ 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.
Title check ❓ Inconclusive The title 'revamp ui' is vague and generic, lacking specificity about the actual changes made to the codebase. Consider a more descriptive title that captures the key changes, such as 'Remove dark mode theme provider and adopt fixed dark UI design' or 'Migrate from next-themes to static dark palette with visual refinements'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch improve-portfolio-theme-modes

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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)
src/components/Header.tsx (1)

10-14: ⚠️ Potential issue | 🟠 Major

Guard smooth scrolling behind reduced-motion preference.

Line 12 always animates scroll. For accessibility, switch to "auto" when prefers-reduced-motion: reduce is set.

🎯 Proposed fix
   const scrollToSection = (sectionId: string) => {
+    const prefersReducedMotion = window.matchMedia(
+      "(prefers-reduced-motion: reduce)",
+    ).matches;
+
     document.getElementById(sectionId)?.scrollIntoView({
-      behavior: "smooth",
+      behavior: prefersReducedMotion ? "auto" : "smooth",
       block: "start",
     });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/Header.tsx` around lines 10 - 14, The scrollToSection function
always uses smooth scrolling; update it to respect the user's reduced-motion
preference by checking window.matchMedia('(prefers-reduced-motion:
reduce)').matches and set the scrollIntoView behavior to "auto" when true and
"smooth" otherwise (i.e. change the behavior value used in the
document.getElementById(sectionId)?.scrollIntoView call accordingly).
src/components/Introduction.tsx (1)

30-38: ⚠️ Potential issue | 🟠 Major

Add reduced-motion support to hero entrance animation.

The Introduction component animates from off-screen without respecting prefers-reduced-motion, while Skills and Experience already implement this pattern. Use useReducedMotion() to conditionally set initial, animate, and transition values, matching the established pattern where reduced motion uses explicit non-animated state values and duration: 0 transitions.

Example fix
-import { motion } from "framer-motion";
+import { motion, useReducedMotion } from "framer-motion";

 const Introduction = () => {
+  const shouldReduceMotion = useReducedMotion();
+
   return (
     <section>
       <div className="hero-grain relative px-0 py-2 sm:py-4">
         <motion.div
           className="relative"
-          initial={{ x: "-100vw", scale: 0 }}
+          initial={shouldReduceMotion ? { x: 0, scale: 1 } : { x: "-100vw", scale: 0 }}
           animate={{ x: 0, scale: 1 }}
-          transition={{
-            type: "spring",
-            stiffness: 120,
-            duration: 0.2,
-          }}
+          transition={
+            shouldReduceMotion
+              ? { duration: 0 }
+              : { type: "spring", stiffness: 120, duration: 0.2 }
+          }
         >
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/Introduction.tsx` around lines 30 - 38, Introduction's hero
animation currently ignores prefers-reduced-motion; wrap the motion settings
with useReducedMotion() like the other components so motion is disabled when
reduced motion is requested: import and call useReducedMotion() in the
Introduction component, then conditionally set the motion.div props (initial,
animate, transition) to non-animated explicit values (e.g., initial and animate
equal positions/scale) and transition: { duration: 0 } when reduced; update the
motion.div in Introduction to use these conditional values so the entrance
animation respects reduced-motion preferences.
🧹 Nitpick comments (2)
src/app/page.tsx (1)

56-71: Avoid vertical clipping in the Experience wrapper.

Line 56 uses overflow-hidden, which can clip hover lift/shadows from experience cards. Prefer clipping only the x-axis here.

♻️ Proposed tweak
-      <div className="relative mt-8 overflow-hidden pt-10">
+      <div className="relative mt-8 overflow-x-clip pt-10">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/app/page.tsx` around lines 56 - 71, The wrapper div currently uses
"overflow-hidden" which vertically clips hover lift/shadows from the Experience
cards; change that class to "overflow-x-hidden" on the div that contains the
Experience component (the element with className "relative mt-8 overflow-hidden
pt-10") so only horizontal overflow is clipped and vertical shadows/transform
effects from Experience children are preserved.
src/components/Experience.tsx (1)

73-73: Remove duplicate surface/border classes from ticket-card usage.

Line 73 repeats border/background styles already defined by .ticket-card in src/app/globals.css (Line 145-147). Keeping only the utility reduces drift.

♻️ Proposed cleanup
-            <Card className="ticket-card group relative isolate overflow-hidden rounded-[1.5rem] border-[hsl(var(--paper-border))] bg-[hsl(var(--paper-card))] transition-transform duration-300 hover:-translate-y-1">
+            <Card className="ticket-card group relative isolate overflow-hidden rounded-[1.5rem] transition-transform duration-300 hover:-translate-y-1">
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/Experience.tsx` at line 73, The Card usage in the Experience
component duplicates surface/border utilities already defined by the
.ticket-card CSS; edit the Card element (the JSX with className containing
"ticket-card") and remove the repeated border and background utility classes
(e.g., border-[hsl(var(--paper-border))] and bg-[hsl(var(--paper-card))]) so the
className relies on "ticket-card" for those styles and retains only the
remaining utilities like group, relative, isolate, overflow-hidden,
transition-transform, duration-300, and hover:-translate-y-1.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/app/globals.css`:
- Around line 44-46: The global rule forcing smooth scrolling should respect
users' reduced-motion preference: wrap or override the html { scroll-behavior:
smooth; } rule with a media query for prefers-reduced-motion: no-preference so
that smooth scrolling only applies when the user has not requested reduced
motion; add a prefers-reduced-motion: reduce media query to set scroll-behavior:
auto (or unset) to disable animated scrolling for users who prefer reduced
motion. Reference the html selector and the scroll-behavior declaration in
src/app/globals.css when making this change.

---

Outside diff comments:
In `@src/components/Header.tsx`:
- Around line 10-14: The scrollToSection function always uses smooth scrolling;
update it to respect the user's reduced-motion preference by checking
window.matchMedia('(prefers-reduced-motion: reduce)').matches and set the
scrollIntoView behavior to "auto" when true and "smooth" otherwise (i.e. change
the behavior value used in the
document.getElementById(sectionId)?.scrollIntoView call accordingly).

In `@src/components/Introduction.tsx`:
- Around line 30-38: Introduction's hero animation currently ignores
prefers-reduced-motion; wrap the motion settings with useReducedMotion() like
the other components so motion is disabled when reduced motion is requested:
import and call useReducedMotion() in the Introduction component, then
conditionally set the motion.div props (initial, animate, transition) to
non-animated explicit values (e.g., initial and animate equal positions/scale)
and transition: { duration: 0 } when reduced; update the motion.div in
Introduction to use these conditional values so the entrance animation respects
reduced-motion preferences.

---

Nitpick comments:
In `@src/app/page.tsx`:
- Around line 56-71: The wrapper div currently uses "overflow-hidden" which
vertically clips hover lift/shadows from the Experience cards; change that class
to "overflow-x-hidden" on the div that contains the Experience component (the
element with className "relative mt-8 overflow-hidden pt-10") so only horizontal
overflow is clipped and vertical shadows/transform effects from Experience
children are preserved.

In `@src/components/Experience.tsx`:
- Line 73: The Card usage in the Experience component duplicates surface/border
utilities already defined by the .ticket-card CSS; edit the Card element (the
JSX with className containing "ticket-card") and remove the repeated border and
background utility classes (e.g., border-[hsl(var(--paper-border))] and
bg-[hsl(var(--paper-card))]) so the className relies on "ticket-card" for those
styles and retains only the remaining utilities like group, relative, isolate,
overflow-hidden, transition-transform, duration-300, and hover:-translate-y-1.
🪄 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: 1052d498-05c9-4110-b772-257788f6b5c7

📥 Commits

Reviewing files that changed from the base of the PR and between 45aed18 and d530245.

📒 Files selected for processing (7)
  • src/app/globals.css
  • src/app/layout.tsx
  • src/app/page.tsx
  • src/components/Experience.tsx
  • src/components/Header.tsx
  • src/components/Introduction.tsx
  • src/components/Skills.tsx

Comment thread src/app/globals.css

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 the current code and only fix it if needed.

Inline comments:
In `@src/app/globals.css`:
- Around line 92-296: Multiple selectors in this CSS block (e.g.,
.site-nav-button, .section-kicker, .hero-title, .social-link, .skill-card,
.experience-pill) are violating the Stylelint rule
declaration-empty-line-before; run the style fixer or manually adjust formatting
so each declaration block follows the project's declaration-empty-line-before
policy (add or remove blank lines before declarations as configured), or run
"stylelint --fix" / your formatter on src/app/globals.css to apply the required
spacing fixes across those selectors so the lint check passes.

In `@src/components/SectionDivider.tsx`:
- Around line 1-24: Prettier check fails due to formatting issues in the
SectionDivider component; run Prettier to reformat the file and commit the
changes. Specifically, format the SectionDivider function and the
SECTION_DIVIDER_PATH constant (and any import/JSX spacing around cn and the
<svg>/<path> elements) by running a formatter command (e.g., prettier --write)
or your editor’s format action, then stage and push the updated file so Prettier
--check passes.
🪄 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: 63e4394e-f97f-46ac-b51e-381ac1fcda12

📥 Commits

Reviewing files that changed from the base of the PR and between d530245 and 5a5fa53.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (10)
  • package.json
  • src/app/globals.css
  • src/app/page.tsx
  • src/components/Experience.tsx
  • src/components/Header.tsx
  • src/components/Introduction.tsx
  • src/components/ModeToggle.tsx
  • src/components/SectionDivider.tsx
  • src/components/Skills.tsx
  • src/components/theme-provider.tsx
💤 Files with no reviewable changes (3)
  • package.json
  • src/components/ModeToggle.tsx
  • src/components/theme-provider.tsx
✅ Files skipped from review due to trivial changes (1)
  • src/components/Introduction.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/components/Header.tsx
  • src/app/page.tsx
  • src/components/Experience.tsx

Comment thread src/app/globals.css Outdated
Comment thread src/components/SectionDivider.tsx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/components/Footer.tsx`:
- Around line 8-11: The social links container in Footer (the div with className
"flex items-center justify-center gap-3" and aria-label="Social links") lacks
landmark semantics; replace that div with a semantic nav element (or add
role="navigation" if nav isn't possible) and keep the aria-label to provide an
accessible navigation landmark for screen readers inside the Footer component.
🪄 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: adb628ac-953e-4017-81e5-8b36b7b40544

📥 Commits

Reviewing files that changed from the base of the PR and between 5a5fa53 and 5b8fd13.

📒 Files selected for processing (10)
  • src/app/globals.css
  • src/app/layout.tsx
  • src/app/page.tsx
  • src/components/Experience.tsx
  • src/components/Footer.tsx
  • src/components/Header.tsx
  • src/components/Introduction.tsx
  • src/components/SectionDivider.tsx
  • src/components/Skills.tsx
  • src/components/social-icons.tsx
✅ Files skipped from review due to trivial changes (1)
  • src/components/SectionDivider.tsx
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/app/layout.tsx
  • src/components/Header.tsx
  • src/components/Skills.tsx
  • src/components/Experience.tsx

Comment thread src/components/Footer.tsx Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/app/globals.css`:
- Around line 76-77: Selected text color is too dark against the
semi-transparent accent selection; update the selection rule that sets
background-color: hsl(var(--primary) / 0.4) and color: hsl(var(--background)) so
the text uses the site's foreground/contrast color instead of the background
variable — e.g., change the color property to use hsl(var(--foreground)) or a
fully opaque/high-contrast color token and ensure it's not using a
semi-transparent value, updating the CSS selector that contains background-color
and color accordingly.
🪄 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: f4fd4423-a357-4b8e-b091-121f23a5d81e

📥 Commits

Reviewing files that changed from the base of the PR and between 5b8fd13 and dfbb2ef.

📒 Files selected for processing (5)
  • src/app/globals.css
  • src/components/Experience.tsx
  • src/components/Footer.tsx
  • src/components/SectionDivider.tsx
  • src/components/Skills.tsx
✅ Files skipped from review due to trivial changes (1)
  • src/components/SectionDivider.tsx
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/components/Footer.tsx
  • src/components/Skills.tsx
  • src/components/Experience.tsx

Comment thread src/app/globals.css Outdated
@aagra109
aagra109 merged commit 13b115a into main Apr 6, 2026
3 checks passed
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