Skip to content

Conversation

@Shubhashish-Chakraborty
Copy link

@Shubhashish-Chakraborty Shubhashish-Chakraborty commented Sep 3, 2025

Description
This PR enhances the "Star on GitHub" button in the navigation bar. The goal of these changes is to make the button more engaging, provide immediate social proof with a live star count, and ensure it links to the most relevant repository for website visitors.

  • Updated the button's styles for a more modern and visually appealing look, giving that shiny look on hover as well.
  • fetching the star count of the provided repository from the GitHub API and display it within the button.

Fixes: #4357

I believe the link should point to asyncapi/website. However, I'd like to confirm with the maintainers if this is the correct repository to link to, or if asyncapi/spec is the intended destination. Could you please clarify which one would be more appropriate?

Do let me know the most relevant/correct redirection link, whether its to asyncapi/website repo or asyncapi/spec repo, then if changes require i will do it, or we can keep the current one (which is to spec) 👍

Screenshots and a demo video:

Image Image

do watch the video: (that shiny look and all on hover)

demo.mp4

Summary by CodeRabbit

  • New Features
    • Added a GitHub Star button that displays the repository’s live star count and links to the repo.
  • Refactor
    • Replaced the previous GitHub button in the navigation with the new star button.
  • Style
    • Adjusted navbar spacing (logo margin and search button spacing).
    • Prevented “Case Studies” menu item from wrapping.
  • Chores
    • Added lucide-react icon library dependency.

@netlify
Copy link

netlify bot commented Sep 3, 2025

Deploy Preview for asyncapi-website ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit 593704d
🔍 Latest deploy log https://app.netlify.com/projects/asyncapi-website/deploys/68c31af45b886b00081a44cb
😎 Deploy Preview https://deploy-preview-4376--asyncapi-website.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
Contributor

coderabbitai bot commented Sep 3, 2025

Walkthrough

Introduces a new GithubStarBtn component that fetches and displays GitHub star count, replaces the previous GitHub button in the NavBar, adjusts some NavBar spacing classes, tweaks a nav item’s class to prevent wrapping, and adds the lucide-react dependency.

Changes

Cohort / File(s) Summary
New GitHub star button component
components/buttons/GithubStarButton.tsx
Adds GithubStarBtn component that formats and displays stargazer count fetched from GitHub API; links to repo via username/repo props; logs errors on fetch failure. Note: setter fallback mixes number and React element types.
NavBar integration and styling tweaks
components/navigation/NavBar.tsx
Imports and uses GithubStarBtn instead of GithubButton; updates props to username/repo; adjusts logo container margin (lg:mr-8) and removes mr-2 from search button.
Navigation items presentation tweak
components/navigation/otherItems.tsx
Adds whitespace-nowrap class to “Case Studies” item.
Dependencies
package.json
Adds lucide-react ^0.542.0 to dependencies.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant U as User
  participant Nav as NavBar
  participant Btn as GithubStarBtn
  participant GH as GitHub API

  U->>Nav: Load page
  Nav->>Btn: Render with {text, username, repo}
  activate Btn
  Btn->>GH: GET /repos/{username}/{repo}
  alt 200 OK
    GH-->>Btn: { stargazers_count }
    Btn->>Btn: setState(starCount)
    Btn-->>Nav: Render button with star count and link
  else Error
    GH-->>Btn: Error
    Btn->>Btn: console.error(...)
    Btn-->>Nav: Render button with default star count
  end
  deactivate Btn
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Assessment against linked issues

Objective Addressed Explanation
Add dynamic GitHub star count to the button [#4357]
Ensure the button links to the correct repository (asyncapi/website vs asyncapi/spec) [#4357] Depends on provided username/repo; values not shown.
UI/UX redesign of the GitHub star button [#4357] Styling changes exist but design acceptance criteria unspecified.

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
Adjust NavBar logo margin and remove search button margin (components/navigation/NavBar.tsx) Not related to enhancing the GitHub star button or link target.
Add whitespace-nowrap to “Case Studies” item (components/navigation/otherItems.tsx) Unrelated to GitHub button enhancements.
Add lucide-react dependency (package.json) Not referenced in the new component; unrelated to the stated feature.

Suggested reviewers

  • derberg
  • sambhavgupta0705
  • Mayaleeeee
  • anshgoyalevil

Poem

I thump my paws at stars so bright,
Count them quick, by moonlit byte—
Click, hop, fetch from GitHub’s sky,
Numbers twinkle, passing by.
Now our nav is shining too—
Star me once, and I’ll thank you. ✨🐇

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@asyncapi-bot
Copy link
Contributor

asyncapi-bot commented Sep 3, 2025

⚡️ Lighthouse report for the changes in this PR:

Category Score
🔴 Performance 37
🟢 Accessibility 98
🟢 Best practices 92
🟢 SEO 100
🔴 PWA 33

Lighthouse ran on https://deploy-preview-4376--asyncapi-website.netlify.app/

Copy link
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: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
components/navigation/NavBar.tsx (1)

1-9: Sort imports and remove unused GithubButton import.

This clears the lint errors.

-import { SearchButton } from '../AlgoliaSearch';
-import GithubButton from '../buttons/GithubButton';
+import { SearchButton } from '../AlgoliaSearch';
+import GithubStarBtn from '../buttons/GithubStarButton';

Also applies to: 22-23

🧹 Nitpick comments (4)
package.json (1)

87-87: lucide-react add looks fine; please ensure it replaces inline SVGs to justify the dep.

Since lucide-react is added, prefer using its Github/Star icons in the new button instead of the large inline SVG paths to cut bundle size and fix lint max-len. See my suggested refactor in GithubStarButton.tsx.

components/navigation/otherItems.tsx (1)

9-9: Fix quotes to satisfy Prettier.

Switch to single quotes.

-  { text: 'Case Studies', href: '/casestudies', className: "whitespace-nowrap" },
+  { text: 'Case Studies', href: '/casestudies', className: 'whitespace-nowrap' },
components/buttons/GithubStarButton.tsx (1)

21-33: Client-side GitHub API calls will quickly hit unauthenticated rate limits.

Consider a Next.js route handler/Netlify function that:

  • uses a token (optional) to raise rate limits,
  • caches with stale-while-revalidate (e.g., 5–15 min),
  • returns only the stargazer count.

Component then fetches from that endpoint instead of api.github.com.

I can draft the API route and wire it up if you want.

components/navigation/NavBar.tsx (1)

238-242: Prettier prop formatting: collapse to one line. Also confirm target repo.

Use single-line props to satisfy Prettier. Please confirm whether the button should target asyncapi/spec or asyncapi/website before merging.

-            <GithubStarBtn
-              text='Star on GitHub'
-              username='asyncapi'
-              repo='spec'
-            />
+            <GithubStarBtn text='Star on GitHub' username='asyncapi' repo='spec' />
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 94e6ba1 and 410464e.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • components/buttons/GithubStarButton.tsx (1 hunks)
  • components/navigation/NavBar.tsx (4 hunks)
  • components/navigation/otherItems.tsx (1 hunks)
  • package.json (1 hunks)
🧰 Additional context used
🪛 GitHub Actions: PR testing - if Node project
components/navigation/otherItems.tsx

[warning] 9-9: Replace "whitespace-nowrap" with 'whitespace-nowrap' (prettier/prettier).


[warning] 9-9: Strings must use singlequote (quotes).

components/buttons/GithubStarButton.tsx

[error] 1-1: ESLint: Run autofix to sort imports (simple-import-sort/imports).


[error] 6-6: Prettier: Format properties to satisfy formatting rules (prettier/prettier).


[error] 10-10: Block must not be padded by blank lines. (padded-blocks)


[error] 11-11: Delete extraneous newline (prettier/prettier).


[error] 14-14: Delete extra spaces (prettier/prettier).


[error] 16-16: Unexpected string concatenation. Use template literals (prefer-template).


[error] 18-18: Unexpected console statement (no-console).


[error] 28-28: Strings must use singlequote (quotes).


[error] 36-36: Max line length exceeded (max-len).


[error] 37-37: JSX quotes should use single quotes (jsx-quotes).


[error] 40-40: Max line length exceeded (max-len).


[error] 46-46: Max line length exceeded (max-len).


[error] 46-46: Trailing spaces not allowed (no-trailing-spaces).


[error] 47-47: Insert '/>' on its own line (prettier/prettier).


[error] 48-48: Long string literals detected; consider splitting or using template literals (prettier/prettier).

components/navigation/NavBar.tsx

[error] 1-1: ESLint: Run autofix to sort imports (simple-import-sort/imports).


[error] 10-10: 'GithubButton' is defined but never used. (no-unused-vars)


[error] 238-238: Prettier: Prop formatting is not compliant in NavBar.tsx. Use a single line for props where possible. (prettier/prettier)

⏰ Context from checks skipped due to timeout of 180000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Lighthouse CI
🔇 Additional comments (1)
components/navigation/NavBar.tsx (1)

151-151: Spacing tweak LGTM.
The added lg:mr-8 on the logo container is reasonable and non-breaking.

Comment on lines +1 to +4
import { ExternalLink } from 'lucide-react';
import Link from 'next/link';
import React, { useEffect, useState } from 'react';
import axios from 'axios';
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Lint/Prettier cleanup + icon refactor + safer fetch.

Addresses: import sort, extra blank lines, quotes, string concatenation, long lines, JSX quotes, trailing spaces, console usage, and replaces huge inline SVGs with lucide-react icons. Also adds timeout, Accept header, and unmount guard.

- import { ExternalLink } from 'lucide-react';
- import Link from 'next/link';
- import React, { useEffect, useState } from 'react';
- import axios from 'axios';
+import React, { useEffect, useState } from 'react';
+import axios from 'axios';
+import clsx from 'clsx';
+import { Github, Star } from 'lucide-react';

-const GithubStarBtn = ({ text, username, repo }: {
-    text: string;
-    username: string;
-    repo: string;
-}) => {
-
-    const [starCount, setStarCount] = useState(0);
+type GithubStarBtnProps = { text: string; username: string; repo: string };
+const GithubStarBtn = ({ text, username, repo }: GithubStarBtnProps) => {
+  const [starCount, setStarCount] = useState<number | null>(null);

-    const formatStarCount = (count: number) => {
-        if (count >= 1000) {
-            return (count / 1000).toFixed(1).replace(/\.0$/, '') + 'k';
-        }
-        return count.toString();
-    };
+  const formatStarCount = (count: number) => {
+    if (count >= 1000) {
+      return `${(count / 1000).toFixed(1).replace(/\.0$/, '')}k`;
+    }
+    return count.toString();
+  };

-    useEffect(() => {
-        // Fetchingg star count from Github API...
-        const fetchStarCount = async () => {
-            try {
-                const response = await axios.get(`https://api.github.com/repos/${username}/${repo}`);
-                setStarCount(response.data.stargazers_count ?? <ExternalLink size={18} />);
-            } catch (error) {
-                console.error("Error fetching star count:", error);
-            }
-        };
-        fetchStarCount();
-    }, [username, repo]);
+  useEffect(() => {
+    let cancelled = false;
+    const fetchStarCount = async () => {
+      try {
+        const { data } = await axios.get(
+          `https://api.github.com/repos/${username}/${repo}`,
+          { headers: { Accept: 'application/vnd.github+json' }, timeout: 4000 }
+        );
+        if (!cancelled) {
+          setStarCount(typeof data?.stargazers_count === 'number' ? data.stargazers_count : null);
+        }
+      } catch {
+        if (!cancelled) setStarCount(null);
+      }
+    };
+    fetchStarCount();
+    return () => {
+      cancelled = true;
+    };
+  }, [username, repo]);

-    return (
-        <Link href={`https://github.com/${username}/${repo}`} target='_blank' rel='noreferrer noopener'>
-            <button className="flex ml-2 cursor-pointer space-x-1 overflow-hidden items-center text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-black text-white shadow hover:bg-black/90 h-9 px-4 py-2 max-w-52 whitespace-pre md:flex group relative w-full justify-center gap-2 rounded-md transition-all duration-300 ease-out hover:ring-2 hover:ring-black hover:ring-offset-2">
-                <span className="absolute right-0 -mt-12 h-32 w-8 translate-x-12 rotate-12 bg-white opacity-10 transition-all duration-1000 ease-out group-hover:-translate-x-40" />
-                <div className="flex items-center">
-                    <svg className="w-5 h-5 fill-current" viewBox="0 0 438.549 438.549">
-                        <path d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z" />
-                    </svg>
-                    <span className="ml-1 text-white mt-1">{text}</span>
-                </div>
-                <div className="mt-1 flex items-center text-sm md:flex">
-                    <svg className="w-4 h-4 text-gray-500 transition-all duration-300 group-hover:text-yellow-300" data-slot="icon" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
-                        <path clipRule="evenodd" d="M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.006 5.404.434c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.434 2.082-5.005Z" fillRule="evenodd" />
-                    </svg>
-                    <span className="inline-block tabular-nums tracking-wider font-display font-medium text-white"> {formatStarCount(starCount)} </span>
-                </div>
-            </button>
-        </Link>
-    );
+  const formatted = starCount == null ? '—' : formatStarCount(starCount);
+  return (
+    <a
+      href={`https://github.com/${username}/${repo}`}
+      target='_blank'
+      rel='noreferrer noopener'
+      aria-label={`${text} (${formatted} stars)`}
+      className={clsx(
+        'group relative ml-2 flex w-full max-w-52 items-center justify-center gap-2',
+        'h-9 cursor-pointer overflow-hidden rounded-md bg-black px-4 py-2 text-sm font-medium text-white shadow',
+        'hover:bg-black/90 transition-all duration-300 ease-out hover:ring-2 hover:ring-black hover:ring-offset-2',
+        'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',
+        'disabled:pointer-events-none disabled:opacity-50'
+      )}
+    >
+      <span
+        className={clsx(
+          'absolute right-0 -mt-12 h-32 w-8 translate-x-12 rotate-12 bg-white opacity-10',
+          'transition-all duration-1000 ease-out group-hover:-translate-x-40'
+        )}
+      />
+      <div className='flex items-center'>
+        <Github className='h-5 w-5' aria-hidden='true' />
+        <span className='ml-1 mt-1 text-white'>{text}</span>
+      </div>
+      <div className='mt-1 flex items-center text-sm'>
+        <Star className='h-4 w-4 text-gray-500 transition-all duration-300 group-hover:text-yellow-300' aria-hidden='true' />
+        <span className='inline-block font-display font-medium tabular-nums tracking-wider text-white' aria-live='polite' aria-atomic='true'>
+          {formatted}
+        </span>
+      </div>
+    </a>
+  );
 }
 
 export default GithubStarBtn;

Also applies to: 6-10, 14-19, 21-33, 35-51

🧰 Tools
🪛 GitHub Actions: PR testing - if Node project

[error] 1-1: ESLint: Run autofix to sort imports (simple-import-sort/imports).

🤖 Prompt for AI Agents
In components/buttons/GithubStarButton.tsx around lines 1-4, 6-10, 14-19, 21-33
and 35-51, clean up formatting and refactor the fetch/icon usage: sort and
consolidate imports (use lucide-react ExternalLink and remove large inline
SVGs), remove extra blank lines and trailing spaces, normalize quotes (single
quotes in JS/TS, double quotes in JSX) and fix any string
concatenation/long-line issues (use template literals or wrap lines), eliminate
console.* calls, and make the GitHub request safer by adding a timeout and
Accept header to the axios call and guarding state updates with an unmount/abort
mechanism (AbortController or isMounted flag) so setState is not called after
unmount.

repo: string;
}) => {

const [starCount, setStarCount] = useState(0);
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

State type bug: mixing number with React element.

setStarCount(response.data.stargazers_count ?? <ExternalLink .../>) assigns a React node into a number state. This breaks types and later formatting. Use number | null and render a fallback in JSX instead.

Also applies to: 26-26

🤖 Prompt for AI Agents
In components/buttons/GithubStarButton.tsx around lines 12 and 26, the component
currently assigns a React node into a number state
(setStarCount(response.data.stargazers_count ?? <ExternalLink .../>)), causing a
type violation and rendering/formatting bugs; change the state type to number |
null (initialize to null or 0 as appropriate), ensure responses assign only
numbers (e.g., response.data.stargazers_count ?? null), and move the
ExternalLink fallback into the JSX render path so the UI displays the link when
starCount is null instead of storing a React element in state.

Comment on lines +35 to +51
<Link href={`https://github.com/${username}/${repo}`} target='_blank' rel='noreferrer noopener'>
<button className="flex ml-2 cursor-pointer space-x-1 overflow-hidden items-center text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-black text-white shadow hover:bg-black/90 h-9 px-4 py-2 max-w-52 whitespace-pre md:flex group relative w-full justify-center gap-2 rounded-md transition-all duration-300 ease-out hover:ring-2 hover:ring-black hover:ring-offset-2">
<span className="absolute right-0 -mt-12 h-32 w-8 translate-x-12 rotate-12 bg-white opacity-10 transition-all duration-1000 ease-out group-hover:-translate-x-40" />
<div className="flex items-center">
<svg className="w-5 h-5 fill-current" viewBox="0 0 438.549 438.549">
<path d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z" />
</svg>
<span className="ml-1 text-white mt-1">{text}</span>
</div>
<div className="mt-1 flex items-center text-sm md:flex">
<svg className="w-4 h-4 text-gray-500 transition-all duration-300 group-hover:text-yellow-300" data-slot="icon" aria-hidden="true" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path clipRule="evenodd" d="M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.006 5.404.434c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.434 2.082-5.005Z" fillRule="evenodd" />
</svg>
<span className="inline-block tabular-nums tracking-wider font-display font-medium text-white"> {formatStarCount(starCount)} </span>
</div>
</button>
</Link>
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fix nested interactive elements: Link wrapping a button violates a11y and causes inconsistent behavior.

Render a styled anchor (or Link with className) instead of nesting a button inside Link.

🧰 Tools
🪛 GitHub Actions: PR testing - if Node project

[error] 36-36: Max line length exceeded (max-len).


[error] 37-37: JSX quotes should use single quotes (jsx-quotes).


[error] 40-40: Max line length exceeded (max-len).


[error] 46-46: Max line length exceeded (max-len).


[error] 46-46: Trailing spaces not allowed (no-trailing-spaces).


[error] 47-47: Insert '/>' on its own line (prettier/prettier).


[error] 48-48: Long string literals detected; consider splitting or using template literals (prettier/prettier).

🤖 Prompt for AI Agents
components/buttons/GithubStarButton.tsx lines 35-51: the code nests a <button>
inside a <Link>, which creates nested interactive elements and breaks
accessibility; replace the inner <button> with a styled anchor (or apply
className directly to the Link's child anchor) that preserves all existing
classes, attributes (target, rel), and inner structure (SVGs, text, star count),
ensure the anchor has an appropriate aria-label and keyboard-focus styles, and
remove any button-specific props (like type) or event handlers that only apply
to button elements.

@sambhavgupta0705
Copy link
Member

@Shubhashish-Chakraborty can you please look into codeRabbitAi suggestions

import NavItem from './NavItem';
import otherItems from './otherItems';
import ToolsPanel from './ToolsPanel';
import GithubStarBtn from '../buttons/GithubStarButton';
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
import GithubStarBtn from '../buttons/GithubStarButton';
import GithubStarButton from '../buttons/GithubStarButton';


const otherItems: OtherItem[] = [
{ text: 'Case Studies', href: '/casestudies' },
{ text: 'Case Studies', href: '/casestudies', className: "whitespace-nowrap" },
Copy link
Member

Choose a reason for hiding this comment

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

can we have an alternative for this

Choose a reason for hiding this comment

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

Alright I will definitely let you know 👍🏻

<span className="absolute right-0 -mt-12 h-32 w-8 translate-x-12 rotate-12 bg-white opacity-10 transition-all duration-1000 ease-out group-hover:-translate-x-40" />
<div className="flex items-center">
<svg className="w-5 h-5 fill-current" viewBox="0 0 438.549 438.549">
<path d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z" />
Copy link
Member

Choose a reason for hiding this comment

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

shift this sag in public folder and import it

Choose a reason for hiding this comment

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

Yes

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.

3 participants