Skip to content

upgrade deps and refine UI components - #29

Merged
aagra109 merged 3 commits into
mainfrom
maintainence-updates
Apr 24, 2026
Merged

upgrade deps and refine UI components#29
aagra109 merged 3 commits into
mainfrom
maintainence-updates

Conversation

@aagra109

@aagra109 aagra109 commented Apr 23, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • Dependencies

    • Upgraded major runtime and dev packages (React 19, Next, Tailwind v4 tooling, Framer Motion, analytics, TypeScript 6, linters/formatters).
  • Performance & Animations

    • Improved typing animation scheduling for smoother, more accessible text animations.
    • Removed some local accordion animation presets.
  • Visual Refinements

    • Adjusted section divider height and SVG pattern.
    • Updated global Tailwind/postcss imports and animation utilities.
    • Replaced LinkedIn icon with a custom implementation.
  • Chores

    • Removed legacy button module and related variants.

Bump project dependencies (Next, React, Tailwind, TypeScript and supporting packages) and update package-lock accordingly. Update build configs (postcss, tailwind.config) and global styles. Make UI changes across the app: page.tsx and globals.css tweaks, refine SectionDivider, update social-icons and AnimatedTyping, adjust button component, and add a new LinkedInIcon component. These changes combine dependency upgrades with styling and component improvements to keep the project up-to-date and polish the UI.
@coderabbitai

coderabbitai Bot commented Apr 23, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Bumps many runtime and dev dependencies (React/Next/TypeScript/Tailwind et al.), migrates PostCSS/Tailwind plugin usage, removes a local Button module, adds a local LinkedIn icon and swaps its usage, tweaks CSS/SVG, and changes AnimatedTyping’s animation gating to use requestAnimationFrame.

Changes

Cohort / File(s) Summary
Dependency manifest
package.json
Updated numerous runtime and dev dependency versions: React/ReactDOM → ^19, Next, TypeScript → ^6, Tailwind → v4 plus /@tailwindcss/postcss, Vercel packages, framer-motion, lucide-react, tailwind-merge, eslint/prettier, added tw-animate-css; removed @radix-ui/react-slot, class-variance-authority, tailwindcss-animate.
PostCSS / Tailwind / CSS
postcss.config.mjs, tailwind.config.ts, src/app/globals.css
Switched PostCSS plugin to @tailwindcss/postcss; globals.css now uses @import "tailwindcss";, @import "tw-animate-css"; and @config reference; removed tailwindcss-animate plugin and local accordion keyframes/animations; darkMode value simplified.
Iconography / Social map
src/components/icons/LinkedInIcon.tsx, src/components/social-icons.tsx
Added new local LinkedInIcon component and replaced the linkedin entry in socialIconMap to use it (removed Linkedin import from lucide-react).
UI animation gating
src/components/ui/AnimatedTyping.tsx
Changed animation readiness from mount-based flag to RAF-driven canAnimate; shouldAnimate now considers canAnimate and reduced-motion; effect uses requestAnimationFrame and cancels it on cleanup.
Removed UI module
src/components/ui/button.tsx
Deleted the button module and its exports (removed buttonVariants, ButtonProps, and Button component implementation).
Visual small edits
src/app/page.tsx, src/components/SectionDivider.tsx, src/app/globals.css
Reduced divider height (h-6h-5), replaced SECTION_DIVIDER_PATH SVG path, and reformatted CSS gradient declarations (no semantic behavior changes).
TypeScript config
tsconfig.json
Added explicit compilerOptions.types entries for Node, React, and React DOM.
PostCSS config
postcss.config.mjs
Replaced tailwindcss plugin reference with @tailwindcss/postcss.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰 I nibbled deps and stitched an icon bright,

RAFs to wake animations into light.
Gradients hum, SVGs now sing,
Buttons hopped away on spring —
Portfolio hops onward, snack in sight 🥕✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ 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%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: updating dependencies across the project (package.json, TypeScript, PostCSS, Tailwind, dev tooling) and refining UI components (removing button.tsx, updating AnimatedTyping, adding LinkedInIcon, adjusting divider styling).
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch maintainence-updates

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

🧹 Nitpick comments (5)
src/components/icons/LinkedInIcon.tsx (1)

5-20: Optional: let className drive sizing (consistent with lucide-react icons it replaces).

The hardcoded width="24" / height="24" attributes will be overridden by any className sizing (e.g., h-4 w-4), but they set a visible default before CSS applies and can cause a brief layout jolt on hydration. Since Mail / FileText from lucide-react (used alongside this in src/components/social-icons.tsx) are sized purely via className, dropping the fixed dims (or defaulting them from props) keeps the icon set consistent.

♻️ Proposed change
 const LinkedInIcon = ({ className }: LinkedInIconProps) => (
   <svg
-    width="24"
-    height="24"
     viewBox="0 0 24 24"
     fill="none"
     xmlns="http://www.w3.org/2000/svg"
     className={className}
     aria-hidden="true"
   >
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/icons/LinkedInIcon.tsx` around lines 5 - 20, The LinkedInIcon
component currently hardcodes width="24" and height="24", causing layout shift
and inconsistency with lucide-react icons that are sized purely via className;
remove the fixed width and height attributes from the <svg> in LinkedInIcon (or
alternatively accept optional size props and use them to set width/height) so
the svg sizing is driven by the className prop (e.g., h-4 w-4) and matches the
behavior of Mail/FileText icons—update the LinkedInIcon function signature if
you add size props and ensure className is still applied to the svg.
src/components/SectionDivider.tsx (1)

8-14: Optional: tighten the viewBox to the path's actual extent.

The updated path draws within Y ≈ -10 to 22 (height ~32 units), but the SVG viewBox is still 0 0 1200 120. With preserveAspectRatio="none" and the container's h-5 (20px), the shape is squished into roughly ~5.3px of the 20px container, leaving most of the divider area empty.

Not a bug — just leads to a visually thinner divider than the h-5 utility would suggest. If the intent is for the jagged edge to fill the allocated height, consider aligning viewBox to the path (e.g., viewBox="0 -10 1200 32"), or shift the path coordinates to span 0–120.

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

In `@src/components/SectionDivider.tsx` around lines 8 - 14, The SVG viewBox in
the SectionDivider component is much taller (0 0 1200 120) than the path's
actual Y extent (-10 to ~22), so with preserveAspectRatio="none" the jagged path
is vertically squished; update the SectionDivider's <svg> viewBox to match the
path bounds (for example "0 -10 1200 32") or alternatively shift/scale the path
coordinates to occupy 0–120 Y, ensuring the shape fills the container height
(refer to the SectionDivider function, its <svg> element and the long path
string) and keep preserveAspectRatio behavior consistent with the intended
visual size.
tailwind.config.ts (1)

78-78: Remove the unused tailwindcss-animate plugin.

tailwindcss-animate (v1.0.7) is imported and registered in the config but is not used anywhere in the codebase. The project's only animation needs—accordion expand/collapse (lines 62–75)—are already defined directly in theme.extend, and other animations use framer-motion. No Tailwind animation utility classes like animate-in, animate-out, fade-in, zoom-in, etc. appear in any component.

Remove both the import and plugin entry to eliminate unused code.

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

In `@tailwind.config.ts` at line 78, Remove the unused tailwindcss-animate plugin
by deleting its import (the identifier tailwindcssAnimate) and removing it from
the plugins array (plugins: [tailwindcssAnimate]) in the Tailwind config; ensure
no other references to tailwindcssAnimate remain so the config builds cleanly
and only the custom animations in theme.extend and framer-motion are used.
package.json (1)

14-39: Add an engines field and consider a lockfile refresh.

Given the coordinated leap to React 19 / Next 16 / Tailwind v4 / TypeScript 6 / @types/node 25, pinning a minimum Node version in engines helps prevent teammates/CI from silently installing on an incompatible Node. Also make sure package-lock.json (or your lockfile of choice) was regenerated from scratch — partial dedupe across this many majors occasionally leaves stale transitive react@18 / tailwindcss@3 copies that surface as confusing runtime errors.

Proposed addition
   "private": true,
+  "engines": {
+    "node": ">=20.19.0"
+  },
   "scripts": {

(Adjust the Node floor to whatever your Vercel project / CI runner actually targets.)

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

In `@package.json` around lines 14 - 39, Add an "engines" field to package.json
declaring a minimum Node version (e.g., "node": ">=18" or whichever Node your
CI/Vercel uses) so teammates/CI won't install with an incompatible runtime, and
then fully regenerate and commit your lockfile (package-lock.json or yarn.lock)
by deleting the lockfile and node_modules and running a fresh install to ensure
no stale transitive packages (e.g., old react@18 or tailwindcss@3) remain;
update package.json's "engines" and commit the refreshed lockfile to the repo.
src/app/globals.css (1)

1-2: Consider migrating to CSS-first @theme for Tailwind v4.

The @import "tailwindcss" + @config "../../tailwind.config.ts" pair is valid and correctly points to the repo-root config, so this works today. However, Tailwind v4's recommended approach is declaring design tokens directly in CSS using @theme { ... } blocks. The @config directive is primarily a backward-compatibility mechanism for v3 projects. Mixing both approaches can introduce conflicts and performance overhead, so migrating to pure CSS-first configuration is preferred, even if deferred.

Side note: the Stylelint scss/at-rule-no-unknown warning on @config is a known false positive (Stylelint doesn't recognize Tailwind v4's custom at-rules). Suppress it via ignoreAtRules: ['config', 'theme', 'apply', 'layer', 'source', 'utility'] in your Stylelint config rather than changing this file.

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

In `@src/app/globals.css` around lines 1 - 2, The file uses Tailwind v3-style
directives (`@import` "tailwindcss" and `@config` "../../tailwind.config.ts");
migrate to Tailwind v4 CSS-first by removing the `@import/`@config pair and
instead declare your design tokens and configuration inside a top-level `@theme` {
... } block in src/app/globals.css (or split tokens into dedicated CSS files
imported by globals.css), ensuring any tokens referenced by utility classes
match those formerly in ../../tailwind.config.ts; if you prefer to keep the
current setup for now, suppress the Stylelint false-positive by adding
ignoreAtRules for 'config','theme','apply','layer','source','utility' in your
Stylelint config.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@package.json`:
- Line 26: The project currently depends on the deprecated Tailwind v3 plugin
"tailwindcss-animate" (entry "tailwindcss-animate" in package.json) which is
incompatible with Tailwind v4; replace that dependency with "tw-animate-css" in
package.json, add the CSS import for tw-animate-css next to the Tailwind import
in src/app/globals.css, and remove the old plugin reference from the plugins
array in tailwind.config.ts (e.g., remove any use of the tailwindcssAnimate
symbol or plugins: [tailwindcssAnimate]). After the change, verify
dialog/popover/accordion animations still work.

---

Nitpick comments:
In `@package.json`:
- Around line 14-39: Add an "engines" field to package.json declaring a minimum
Node version (e.g., "node": ">=18" or whichever Node your CI/Vercel uses) so
teammates/CI won't install with an incompatible runtime, and then fully
regenerate and commit your lockfile (package-lock.json or yarn.lock) by deleting
the lockfile and node_modules and running a fresh install to ensure no stale
transitive packages (e.g., old react@18 or tailwindcss@3) remain; update
package.json's "engines" and commit the refreshed lockfile to the repo.

In `@src/app/globals.css`:
- Around line 1-2: The file uses Tailwind v3-style directives (`@import`
"tailwindcss" and `@config` "../../tailwind.config.ts"); migrate to Tailwind v4
CSS-first by removing the `@import/`@config pair and instead declare your design
tokens and configuration inside a top-level `@theme` { ... } block in
src/app/globals.css (or split tokens into dedicated CSS files imported by
globals.css), ensuring any tokens referenced by utility classes match those
formerly in ../../tailwind.config.ts; if you prefer to keep the current setup
for now, suppress the Stylelint false-positive by adding ignoreAtRules for
'config','theme','apply','layer','source','utility' in your Stylelint config.

In `@src/components/icons/LinkedInIcon.tsx`:
- Around line 5-20: The LinkedInIcon component currently hardcodes width="24"
and height="24", causing layout shift and inconsistency with lucide-react icons
that are sized purely via className; remove the fixed width and height
attributes from the <svg> in LinkedInIcon (or alternatively accept optional size
props and use them to set width/height) so the svg sizing is driven by the
className prop (e.g., h-4 w-4) and matches the behavior of Mail/FileText
icons—update the LinkedInIcon function signature if you add size props and
ensure className is still applied to the svg.

In `@src/components/SectionDivider.tsx`:
- Around line 8-14: The SVG viewBox in the SectionDivider component is much
taller (0 0 1200 120) than the path's actual Y extent (-10 to ~22), so with
preserveAspectRatio="none" the jagged path is vertically squished; update the
SectionDivider's <svg> viewBox to match the path bounds (for example "0 -10 1200
32") or alternatively shift/scale the path coordinates to occupy 0–120 Y,
ensuring the shape fills the container height (refer to the SectionDivider
function, its <svg> element and the long path string) and keep
preserveAspectRatio behavior consistent with the intended visual size.

In `@tailwind.config.ts`:
- Line 78: Remove the unused tailwindcss-animate plugin by deleting its import
(the identifier tailwindcssAnimate) and removing it from the plugins array
(plugins: [tailwindcssAnimate]) in the Tailwind config; ensure no other
references to tailwindcssAnimate remain so the config builds cleanly and only
the custom animations in theme.extend and framer-motion are used.
🪄 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: 902c9524-8ba2-48a2-9a69-94aaef8f4be4

📥 Commits

Reviewing files that changed from the base of the PR and between 0679fdd and 4d0f56e.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (10)
  • package.json
  • postcss.config.mjs
  • src/app/globals.css
  • src/app/page.tsx
  • src/components/SectionDivider.tsx
  • src/components/icons/LinkedInIcon.tsx
  • src/components/social-icons.tsx
  • src/components/ui/AnimatedTyping.tsx
  • src/components/ui/button.tsx
  • tailwind.config.ts

Comment thread package.json Outdated
@aagra109

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Apr 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@aagra109

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Apr 24, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@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 `@package.json`:
- Line 38: tsconfig.json is missing compilerOptions.types which TypeScript 6 no
longer auto-discovers; update tsconfig.json to add a compilerOptions.types entry
(e.g., ["node"] for Node projects or [] if you only want DOM) and set
compilerOptions.rootDir to your source folder to preserve prior resolution
rules; ensure you modify the tsconfig.json's compilerOptions.types and
compilerOptions.rootDir fields so type-checking resumes with the correct global
types.
🪄 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: 15eb0066-0b68-490a-83ec-bfb5c597f2d6

📥 Commits

Reviewing files that changed from the base of the PR and between 4d0f56e and 6f34c64.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (3)
  • package.json
  • src/app/globals.css
  • tailwind.config.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • tailwind.config.ts

Comment thread package.json
@aagra109

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Apr 24, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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

🧹 Nitpick comments (1)
tailwind.config.ts (1)

1-63: Optional: consider migrating to Tailwind v4 CSS-first config.

With tailwindcss@4.2.4, theme tokens (colors, borderRadius, container) can be expressed in globals.css via @theme, and content/prefix are largely obsolete (auto-detection + new prefix semantics). Keeping this legacy JS config works through @config, but co-locating everything in CSS removes the @config indirection and the satisfies Config typing shim. Fine to defer — just flagging since the rest of the PR is already moving toward v4 idioms.

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

In `@tailwind.config.ts` around lines 1 - 63, The tailwind config is using legacy
JS config patterns (config object, content, prefix, theme tokens and the
"satisfies Config" shim) instead of Tailwind v4's CSS-first approach; migrate by
moving theme tokens (colors, borderRadius, container) into your global CSS using
`@theme` in globals.css, remove or minimize the JS config's content/prefix entries
(rely on v4 auto-detection/new prefix semantics), and drop the "satisfies
Config" typing shim and large theme object from tailwind.config.ts so the file
only contains minimal runtime config (if any) and uses `@config` in CSS to load
any remaining settings; reference the config object, theme.colors,
theme.borderRadius, theme.container, content, prefix, and the "satisfies Config"
usage to locate what to remove/move.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@tailwind.config.ts`:
- Around line 1-63: The tailwind config is using legacy JS config patterns
(config object, content, prefix, theme tokens and the "satisfies Config" shim)
instead of Tailwind v4's CSS-first approach; migrate by moving theme tokens
(colors, borderRadius, container) into your global CSS using `@theme` in
globals.css, remove or minimize the JS config's content/prefix entries (rely on
v4 auto-detection/new prefix semantics), and drop the "satisfies Config" typing
shim and large theme object from tailwind.config.ts so the file only contains
minimal runtime config (if any) and uses `@config` in CSS to load any remaining
settings; reference the config object, theme.colors, theme.borderRadius,
theme.container, content, prefix, and the "satisfies Config" usage to locate
what to remove/move.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 97a63246-c02a-4c5a-8797-15221101e924

📥 Commits

Reviewing files that changed from the base of the PR and between 6f34c64 and 11c8dbb.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • package.json
  • src/components/ui/button.tsx
  • tailwind.config.ts
  • tsconfig.json
💤 Files with no reviewable changes (1)
  • src/components/ui/button.tsx
✅ Files skipped from review due to trivial changes (1)
  • tsconfig.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • package.json

@aagra109
aagra109 merged commit 86e3676 into main Apr 24, 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