Feat/add coderabbit config file#21
Conversation
|
Warning Ignoring CodeRabbit configuration file changes. For security, only the configuration from the base branch is applied for open source repositories. 📝 WalkthroughWalkthroughAdds a new Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord. 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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 11
🧹 Nitpick comments (8)
src/types/landingImageVariantsTypes.ts (1)
4-7: Lowercase type aliastransition— consider PascalCase.TypeScript convention uses PascalCase for type aliases.
transitioncould be renamed toTransitionConfig(using a distinct name to avoid colliding with motion's ownTransitiontype).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/types/landingImageVariantsTypes.ts` around lines 4 - 7, Rename the lowercase type alias transition to a PascalCase name like TransitionConfig to follow TypeScript conventions and avoid colliding with motion's Transition type; update the type declaration (transition -> TransitionConfig) and all references/usages of transition in this file (and any imports/exports) to the new name to ensure consistency and type resolution.src/App.css (1)
4-36: Consider using a CSS custom property orcalc()for staggered delays instead of seven separate rules.The hardcoded
nth-childrules (1 through 7) are brittle if the span count changes. A single rule using a CSS custom property set inline (e.g.,style="--i: 0") withanimation-delay: calc(var(--i) * 0.1s)would be more maintainable.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/App.css` around lines 4 - 36, Replace the seven brittle nth-child rules by using a CSS custom property on .appear span (e.g., --i) and set animation-delay using animation-delay: calc(var(--i) * 0.1s) in the .appear span rule; set the --i value inline on each span (or via JS when rendering) instead of relying on nth-child selectors so new/removed spans keep correct stagger timing; update the selector .appear span and remove the .appear span:nth-child(...) rules and ensure animation and opacity settings remain on .appear span.src/components/ui/Button.tsx (1)
26-57: Addtype="button"to prevent accidental form submissions.
<button>elements default totype="submit"when rendered inside a<form>. Since...propsis spread and callers don't set a default, this can silently trigger form submissions.🛠️ Proposed fix
<motion.button + type="button" whileHover={{ y: -1 }}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/ui/Button.tsx` around lines 26 - 57, The Button component's motion.button currently spreads {...props} without a default type, which makes it default to "submit" inside forms; update the motion.button element (in the Button component) to explicitly set type="button" while still allowing callers to override by ensuring props.type (or the spread) can override it—i.e., provide a default type="button" on the motion.button before spreading {...props} so accidental form submissions are prevented.src/types/landingImageType.ts (1)
10-24:delay,priority,caption, andbackgroundfields are defined but never consumed.
HeroSection.tsxonly readsid,src,alt,title, andobjectFitfrom each entry. Thedelay,priority,caption, andbackgroundfields are populated in every image entry but go unused at runtime. If these are planned for future use (e.g., per-image stagger timing), a comment noting their intent would help; otherwise consider removing the unused fields to keep the surface lean.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/types/landingImageType.ts` around lines 10 - 24, The LandingImage interface exposes fields delay, priority, caption, and background that are never read by HeroSection.tsx (which only consumes id, src, alt, title, objectFit); either remove these unused properties from the LandingImage interface to keep the type surface minimal, or document their intended future use and update HeroSection.tsx (or the consuming component) to read and apply them (e.g., use delay for staggered animation, priority to set image loading priority, caption/background to render extra UI). Update the LandingImage interface (symbol: LandingImage) and/or the consumer component (file/symbol: HeroSection.tsx) accordingly and add a short comment if you keep them for planned features.src/data/const/landingImages.ts (1)
1-8: Inconsistent import styles: asset paths use../../relative imports while the type uses the@/alias.The
@/alias is properly configured invite.config.ts("@": path.resolve(__dirname, "src")) and is already used throughout the codebase. Prefer using@/assets/images/to match the pattern in other files:🛠️ Suggested changes
-import globalOrgMap from "../../assets/images/hero-world-map-image.png"; -import orgexplorerLogoMinimal from "../../assets/images/OE-logo-1.png"; -import oeTechnicalMark from "../../assets/images/OE-logo-2.png"; -import orgGrowthGraph from "../../assets/images/hero-stocks-image.webp"; -import oeGradientSymbol from "../../assets/images/hero-shaded-graph-image.avif"; -import oeFinalMark from "../../assets/images/hero-clean-image.avif"; -import orgVirtualGraph from "../../assets/images/hero-virtual-graph-image.avif"; +import globalOrgMap from "@/assets/images/hero-world-map-image.png"; +import orgexplorerLogoMinimal from "@/assets/images/OE-logo-1.png"; +import oeTechnicalMark from "@/assets/images/OE-logo-2.png"; +import orgGrowthGraph from "@/assets/images/hero-stocks-image.webp"; +import oeGradientSymbol from "@/assets/images/hero-shaded-graph-image.avif"; +import oeFinalMark from "@/assets/images/hero-clean-image.avif"; +import orgVirtualGraph from "@/assets/images/hero-virtual-graph-image.avif";🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/data/const/landingImages.ts` around lines 1 - 8, Imports in src/data/const/landingImages.ts mix relative paths with the project alias; replace the relative imports for globalOrgMap, orgexplorerLogoMinimal, oeTechnicalMark, orgGrowthGraph, oeGradientSymbol, oeFinalMark, and orgVirtualGraph so they use the configured alias (e.g., "@/assets/images/...") consistent with the LandingImage type import and the rest of the codebase; update each import statement to point to the same filename but prefixed with "@/assets/images/"..coderabbit.yaml (3)
80-84:eslintandbiomeare both enabled — potential duplicate lint comments.Biome is designed to replace ESLint for JS/TS projects. Running both on the same files can generate redundant or conflicting review comments. If Biome is the project's chosen formatter/linter, consider disabling ESLint (and vice versa) to keep feedback focused.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.coderabbit.yaml around lines 80 - 84, The config currently enables both linters which may produce duplicate/conflicting reports; update the .coderabbit.yaml tools section to disable one of them by setting either eslint.enabled: false or biome.enabled: false depending on which linter you want to keep (reference the tools -> eslint and tools -> biome keys) so only the chosen linter runs.
97-98:checkovhas no effect on a pure frontend project.Checkov is a static analysis tool for infrastructure-as-code files (Terraform, Kubernetes, Dockerfiles). OrgExplorer is a React/Vite frontend with no IaC — checkov will produce no findings and only adds unnecessary scan overhead. It can be safely disabled:
🔧 Suggested fix
- checkov: - enabled: true🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.coderabbit.yaml around lines 97 - 98, The CI config currently enables the checkov scanner (the checkov: enabled: true entry) which is unnecessary for a pure React/Vite frontend; remove the checkov block or set checkov: enabled: false in .coderabbit.yaml so the Checkov step is disabled and avoids wasted scan overhead, leaving other scanners intact.
48-48:assertiveprofile +request_changes_workflow: truemay discourage open-source contributors.With
request_changes_workflow: true, CodeRabbit will block PRs from merging until every assertive-mode comment is resolved. For an open-source project with external contributors, this is a strict gate — minor nits or stylistic suggestions from an assertive profile can stall PRs. Consider either switching toprofile: chillor settingrequest_changes_workflow: falseto keep reviews advisory rather than blocking.Also applies to: 65-65
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.coderabbit.yaml at line 48, The repository is using an assertive review profile which, combined with request_changes_workflow: true, will block merges until every assertive comment is resolved; update the .coderabbit.yaml configuration by either changing profile: assertive to profile: chill or setting request_changes_workflow: false (or both) so automated comments are advisory for external/open-source contributors; look for the profile and request_changes_workflow keys in .coderabbit.yaml to make this change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.coderabbit.yaml:
- Around line 55-57: Remove the redundant "main" entry from the base_branches
array in .coderabbit.yaml so it only lists non-default branches (e.g., keep
"develop"); update the base_branches value to exclude "main" and leave any regex
patterns intact, ensuring base_branches now contains only the intended
non-default branch names like "develop".
- Around line 134-139: The YAML contains a NextJS-specific block starting with
the "NextJS:" key and its bullet points ("Ensure \"use client\"...", "Prefer
Server Components...", "Avoid unnecessary client-side API calls...", "Follow
NextJS app router best practices.", "Ensure dynamic routes are optimized.")
which is irrelevant for this Vite + React project; remove that entire "NextJS:"
block (the lines shown) from .coderabbit.yaml or extract it into a separate
conditional/optional config section so it only applies when Next.js is actually
used.
- Around line 110-128: The YAML contains an invalid field reviews.instructions
which violates the CodeRabbit schema; remove or rename that field and move the
content into the schema-approved catch-all reviews.path_instructions entry
instead (replace the reviews.instructions block with reviews.path_instructions
and place the same multi-line string there), ensuring the top $schema directive
remains and no other unsupported properties are added so the file validates
against schema.v2.json.
In `@src/App.css`:
- Around line 39-49: The keyframes named appear currently have identical
translateY values at 0% and 100% so no vertical motion occurs; update the 0%
frame in the `@keyframes` appear (in App.css) to a non-zero vertical offset (e.g.,
translateY(20px) or translateY(20px) rotate(-3deg) scale(0.7)) so the animation
produces a slide-up entrance to translateY(0) at 100%; keep the existing
opacity/rotation/scale transitions as-is.
In `@src/components/ui/Button.tsx`:
- Line 1: package.json is missing the framer-motion dependency required by
imports in Button.tsx and HeroSection.tsx; update package.json's "dependencies"
to include "framer-motion" with an appropriate version (e.g., a caret semver
like ^7.0.0 or matching your repo's constraint), then run install to lock it (so
imports like `import { motion } from "framer-motion"` in Button.tsx and
HeroSection.tsx resolve correctly).
In `@src/components/ui/HeroSection.tsx`:
- Around line 24-36: The motion.img element in HeroSection.tsx uses background
utility classes and an unnecessary ARIA attribute; remove the Tailwind classes
"bg-cover" and "bg-center" from the className on the motion.img (image scaling
is already handled by style={{ objectFit: image.objectFit }}) and remove the
aria-label prop so the element only uses alt (and title if needed) for
accessibility; update the JSX for motion.img (the element keyed by image.id and
using props image.src, image.alt, image.title, image.objectFit and
landingImageVariants) accordingly.
- Line 22: In the HeroSection component locate the JSX <section
className="relative w-full h-screen overflow-hidden bg-black
justify-items-center font-sans"> and remove the unused Tailwind utility
justify-items-center (it's a CSS Grid property but the section is not a grid),
leaving the other classes intact so the section styling remains correct.
- Around line 50-53: The subtitle in the HeroSection component currently uses an
<h3> which jumps from the page's <h1> and violates heading semantics; change the
subtitle element in HeroSection (the block with className "md:text-[1.9vw]
text-[2.9vw] text-gray-50 text-center") from <h3> to <h2> (or to a <p> if it’s
purely decorative) so heading levels are sequential and accessible; update any
tests or styles that assume an <h3> accordingly.
- Around line 39-48: The inner <div className="appear block text-shadow-2xs
text-shadow-zinc-700"> inside the <h1> in HeroSection.tsx is invalid HTML;
replace that <div> with a <span> (e.g., change the element used in the component
where the <h1> contains the "appear ..." block) so the h1 only contains phrasing
content, and keep the existing className (adjust to inline-block if you need
block-like layout) while preserving the nested <span> children and their
classes.
In `@src/data/const/landingImages.ts`:
- Around line 96-107: Update the descriptive text for the image entry with id
"virtual-graph": replace the generic alt and ariaLabel values with specific,
meaningful descriptions that match the level of detail used elsewhere (e.g.,
describe the visualization type, key nodes/relationships, and the purpose).
Modify the alt property (for brief non-visual fallback) to a concise phrase like
"Interactive virtual graph showing nodes and edge clusters" and change ariaLabel
(for screen readers) to a fuller sentence such as "Interactive virtual graph
illustrating connected nodes, highlighted clusters, and relationship edges used
to explore insights"; ensure you update the alt and ariaLabel fields on the
object with id "virtual-graph" only.
In `@src/types/landingImageVariantsTypes.ts`:
- Line 2: The import currently references "framer-motion" which isn't installed;
replace it with the correct package export used by motion v12 by changing the
import to use "motion/react" (e.g., import type { Easing, Variants } from
"motion/react") so the Easing and Variants type symbols resolve correctly.
---
Nitpick comments:
In @.coderabbit.yaml:
- Around line 80-84: The config currently enables both linters which may produce
duplicate/conflicting reports; update the .coderabbit.yaml tools section to
disable one of them by setting either eslint.enabled: false or biome.enabled:
false depending on which linter you want to keep (reference the tools -> eslint
and tools -> biome keys) so only the chosen linter runs.
- Around line 97-98: The CI config currently enables the checkov scanner (the
checkov: enabled: true entry) which is unnecessary for a pure React/Vite
frontend; remove the checkov block or set checkov: enabled: false in
.coderabbit.yaml so the Checkov step is disabled and avoids wasted scan
overhead, leaving other scanners intact.
- Line 48: The repository is using an assertive review profile which, combined
with request_changes_workflow: true, will block merges until every assertive
comment is resolved; update the .coderabbit.yaml configuration by either
changing profile: assertive to profile: chill or setting
request_changes_workflow: false (or both) so automated comments are advisory for
external/open-source contributors; look for the profile and
request_changes_workflow keys in .coderabbit.yaml to make this change.
In `@src/App.css`:
- Around line 4-36: Replace the seven brittle nth-child rules by using a CSS
custom property on .appear span (e.g., --i) and set animation-delay using
animation-delay: calc(var(--i) * 0.1s) in the .appear span rule; set the --i
value inline on each span (or via JS when rendering) instead of relying on
nth-child selectors so new/removed spans keep correct stagger timing; update the
selector .appear span and remove the .appear span:nth-child(...) rules and
ensure animation and opacity settings remain on .appear span.
In `@src/components/ui/Button.tsx`:
- Around line 26-57: The Button component's motion.button currently spreads
{...props} without a default type, which makes it default to "submit" inside
forms; update the motion.button element (in the Button component) to explicitly
set type="button" while still allowing callers to override by ensuring
props.type (or the spread) can override it—i.e., provide a default type="button"
on the motion.button before spreading {...props} so accidental form submissions
are prevented.
In `@src/data/const/landingImages.ts`:
- Around line 1-8: Imports in src/data/const/landingImages.ts mix relative paths
with the project alias; replace the relative imports for globalOrgMap,
orgexplorerLogoMinimal, oeTechnicalMark, orgGrowthGraph, oeGradientSymbol,
oeFinalMark, and orgVirtualGraph so they use the configured alias (e.g.,
"@/assets/images/...") consistent with the LandingImage type import and the rest
of the codebase; update each import statement to point to the same filename but
prefixed with "@/assets/images/".
In `@src/types/landingImageType.ts`:
- Around line 10-24: The LandingImage interface exposes fields delay, priority,
caption, and background that are never read by HeroSection.tsx (which only
consumes id, src, alt, title, objectFit); either remove these unused properties
from the LandingImage interface to keep the type surface minimal, or document
their intended future use and update HeroSection.tsx (or the consuming
component) to read and apply them (e.g., use delay for staggered animation,
priority to set image loading priority, caption/background to render extra UI).
Update the LandingImage interface (symbol: LandingImage) and/or the consumer
component (file/symbol: HeroSection.tsx) accordingly and add a short comment if
you keep them for planned features.
In `@src/types/landingImageVariantsTypes.ts`:
- Around line 4-7: Rename the lowercase type alias transition to a PascalCase
name like TransitionConfig to follow TypeScript conventions and avoid colliding
with motion's Transition type; update the type declaration (transition ->
TransitionConfig) and all references/usages of transition in this file (and any
imports/exports) to the new name to ensure consistency and type resolution.
| base_branches: | ||
| - main | ||
| - develop |
There was a problem hiding this comment.
main is redundant in base_branches.
base_branches is documented as targeting "Base branches (other than the default branch)" and accepts regex patterns. Since main is typically the default branch and is already covered by auto-review, listing it here is superfluous. Only non-default branches like develop need to be enumerated.
🔧 Suggested fix
base_branches:
- - main
- develop📝 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.
| base_branches: | |
| - main | |
| - develop | |
| base_branches: | |
| - develop |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.coderabbit.yaml around lines 55 - 57, Remove the redundant "main" entry
from the base_branches array in .coderabbit.yaml so it only lists non-default
branches (e.g., keep "develop"); update the base_branches value to exclude
"main" and leave any regex patterns intact, ensuring base_branches now contains
only the intended non-default branch names like "develop".
| instructions: > | ||
| OrgExplorer is a GitHub organization intelligence platform. | ||
| During review, prioritize: | ||
|
|
||
| - Accuracy of analytics calculations (stars, contributors, trends). | ||
| - Correct API pagination handling (GitHub REST / GraphQL). | ||
| - Proper caching strategy (ISR, SWR, React Query). | ||
| - Avoid unnecessary re-renders in graph/visualization components. | ||
| - Ensure heavy data transformations are memoized. | ||
| - Confirm Lighthouse performance best practices. | ||
| - Prevent exposure of API keys or tokens. | ||
| - Validate all external inputs before rendering. | ||
| - Ensure no business logic exists inside UI components. | ||
| - Look for data duplication across services. | ||
| - Suggest improvements for scalability. | ||
| - Suggest proper error boundaries and loading states. | ||
| - Verify all critical features have automated tests. | ||
| - Flag unoptimized graph rendering or large DOM trees. | ||
| - Ensure documentation reflects architecture decisions. |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
CodeRabbit .coderabbit.yaml reviews.instructions field schema validation
💡 Result:
reviews.instructions is not a valid field in the current .coderabbit.yaml schema (schema v2). The reviews object is schema-validated (it uses additionalProperties: false), so unknown keys like instructions will fail validation. [1]
Use one of the supported “instruction” fields instead, depending on what you’re trying to customize:
-
Path-specific review guidance:
reviews.path_instructions(array of objects), each with:path(glob string)instructions(string, max length 20000) [1][2]
Example:
reviews: path_instructions: - path: "**/*.ts" instructions: "Prefer explicit return types for exported functions."
-
High-level summary formatting/content:
reviews.high_level_summary_instructions(string) [1][2] -
Overall tone (reviews + chat): top-level
tone_instructions(string, max length 250) [1][2]
For schema validation, point your YAML tooling at the official schema URL shown in CodeRabbit’s docs:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json [2]
Sources:
[1] CodeRabbit schema v2 (schema.v2.json)
[2] CodeRabbit docs: YAML configuration + configuration reference
🌐 Web query:
CodeRabbit schema v2 json reviews object valid properties
💡 Result:
In CodeRabbit schema.v2.json (v2), the reviews object has additionalProperties: false, so the only valid top-level properties under reviews: are: profile, request_changes_workflow, high_level_summary, high_level_summary_placeholder, high_level_summary_in_walkthrough, auto_title_placeholder, auto_title_instructions, review_status, commit_status, fail_commit_status, collapse_walkthrough, changed_files_summary, sequence_diagrams, assess_linked_issues, related_issues, related_prs, suggested_labels, auto_apply_labels, suggested_reviewers, auto_assign_reviewers, poem, labeling_instructions, path_filters, path_instructions, abort_on_close, disable_cache, auto_review, finishing_touches, tools. [1]
Source: the schema file static/schema/schema.v2.json. [1]
🌐 Web query:
CodeRabbit path_instructions vs reviews.instructions configuration
💡 Result:
reviews.path_instructions
Use this when you want different review guidance for different files/directories.
- Config key:
reviews.path_instructions(array of{ path, instructions }) (docs.coderabbit.ai) - Meaning: “For files matching this glob, review them with these extra rules.” (docs.coderabbit.ai)
Example:
reviews:
path_instructions:
- path: "src/**/*.{ts,tsx}"
instructions: "Review React/TS code for hooks best practices and unsafe patterns."reviews.instructions
In current CodeRabbit config docs, there is no reviews.instructions field (the configuration reference lists reviews.path_instructions, but not reviews.instructions). (docs.coderabbit.ai)
If what you want is “global instructions for the whole repo”
Use Code Guidelines (Knowledge Base) for “these documents define our standards” (e.g., CLAUDE.md, .cursorrules, etc.), rather than trying to encode that as review instructions. (docs.coderabbit.ai)
Common pitfall: putting guideline filenames into path_instructions makes CodeRabbit treat them as files to review, not standards to follow. (docs.coderabbit.ai)
Citations:
- 1: https://docs.coderabbit.ai/reference/configuration/
- 2: https://docs.coderabbit.ai/reference/configuration/
- 3: https://docs.coderabbit.ai/reference/configuration/
- 4: https://docs.coderabbit.ai/reference/configuration/
- 5: https://docs.coderabbit.ai/guides/review-instructions/?utm_source=openai
- 6: https://docs.coderabbit.ai/guides/review-instructions/?utm_source=openai
reviews.instructions is not a valid field per the CodeRabbit schema — schema validation will fail.
The reviews object in the CodeRabbit schema has additionalProperties: false, and instructions is not listed among its valid properties. The YAML language server directive on line 1 ($schema=https://coderabbit.ai/integrations/schema.v2.json) will report this as a validation error.
The schema-compliant way to provide global review context is a catch-all entry under reviews.path_instructions:
🔧 Suggested fix
- instructions: >
- OrgExplorer is a GitHub organization intelligence platform.
- During review, prioritize:
- ...
-
path_instructions:
+
+ - path: "**"
+ instructions: |
+ OrgExplorer is a GitHub organization intelligence platform.
+ During review, prioritize:
+ - Accuracy of analytics calculations (stars, contributors, trends).
+ - Correct API pagination handling (GitHub REST / GraphQL).
+ - Proper caching strategy (ISR, SWR, React Query).
+ - Avoid unnecessary re-renders in graph/visualization components.
+ - Ensure heavy data transformations are memoized.
+ - Confirm Lighthouse performance best practices.
+ - Prevent exposure of API keys or tokens.
+ - Validate all external inputs before rendering.
+ - Ensure no business logic exists inside UI components.
+ - Look for data duplication across services.
+ - Suggest improvements for scalability.
+ - Suggest proper error boundaries and loading states.
+ - Verify all critical features have automated tests.
+ - Flag unoptimized graph rendering or large DOM trees.
+ - Ensure documentation reflects architecture decisions.
- path: "**/*.{ts,tsx}"
instructions: |📝 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.
| instructions: > | |
| OrgExplorer is a GitHub organization intelligence platform. | |
| During review, prioritize: | |
| - Accuracy of analytics calculations (stars, contributors, trends). | |
| - Correct API pagination handling (GitHub REST / GraphQL). | |
| - Proper caching strategy (ISR, SWR, React Query). | |
| - Avoid unnecessary re-renders in graph/visualization components. | |
| - Ensure heavy data transformations are memoized. | |
| - Confirm Lighthouse performance best practices. | |
| - Prevent exposure of API keys or tokens. | |
| - Validate all external inputs before rendering. | |
| - Ensure no business logic exists inside UI components. | |
| - Look for data duplication across services. | |
| - Suggest improvements for scalability. | |
| - Suggest proper error boundaries and loading states. | |
| - Verify all critical features have automated tests. | |
| - Flag unoptimized graph rendering or large DOM trees. | |
| - Ensure documentation reflects architecture decisions. | |
| path_instructions: | |
| - path: "**" | |
| instructions: | | |
| OrgExplorer is a GitHub organization intelligence platform. | |
| During review, prioritize: | |
| - Accuracy of analytics calculations (stars, contributors, trends). | |
| - Correct API pagination handling (GitHub REST / GraphQL). | |
| - Proper caching strategy (ISR, SWR, React Query). | |
| - Avoid unnecessary re-renders in graph/visualization components. | |
| - Ensure heavy data transformations are memoized. | |
| - Confirm Lighthouse performance best practices. | |
| - Prevent exposure of API keys or tokens. | |
| - Validate all external inputs before rendering. | |
| - Ensure no business logic exists inside UI components. | |
| - Look for data duplication across services. | |
| - Suggest improvements for scalability. | |
| - Suggest proper error boundaries and loading states. | |
| - Verify all critical features have automated tests. | |
| - Flag unoptimized graph rendering or large DOM trees. | |
| - Ensure documentation reflects architecture decisions. | |
| - path: "**/*.{ts,tsx}" | |
| instructions: | |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.coderabbit.yaml around lines 110 - 128, The YAML contains an invalid field
reviews.instructions which violates the CodeRabbit schema; remove or rename that
field and move the content into the schema-approved catch-all
reviews.path_instructions entry instead (replace the reviews.instructions block
with reviews.path_instructions and place the same multi-line string there),
ensuring the top $schema directive remains and no other unsupported properties
are added so the file validates against schema.v2.json.
| @keyframes appear { | ||
| 0% { | ||
| opacity: 0; | ||
| transform: translateY(0px) rotate(-3deg) scale(0.7); | ||
| } | ||
|
|
||
| 100% { | ||
| opacity: 1; | ||
| transform: translateY(0) rotate(0deg) scale(1); | ||
| } | ||
| } No newline at end of file |
There was a problem hiding this comment.
translateY has no effect — both keyframe states use 0.
The 0% frame uses translateY(0px) and the 100% frame uses translateY(0) — these are identical, so there is no vertical movement. If a slide-up entrance was intended, the initial value should be non-zero (e.g., 20px).
Proposed fix (if slide-up was intended)
0% {
opacity: 0;
- transform: translateY(0px) rotate(-3deg) scale(0.7);
+ transform: translateY(20px) rotate(-3deg) scale(0.7);
}📝 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.
| @keyframes appear { | |
| 0% { | |
| opacity: 0; | |
| transform: translateY(0px) rotate(-3deg) scale(0.7); | |
| } | |
| 100% { | |
| opacity: 1; | |
| transform: translateY(0) rotate(0deg) scale(1); | |
| } | |
| } | |
| `@keyframes` appear { | |
| 0% { | |
| opacity: 0; | |
| transform: translateY(20px) rotate(-3deg) scale(0.7); | |
| } | |
| 100% { | |
| opacity: 1; | |
| transform: translateY(0) rotate(0deg) scale(1); | |
| } | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/App.css` around lines 39 - 49, The keyframes named appear currently have
identical translateY values at 0% and 100% so no vertical motion occurs; update
the 0% frame in the `@keyframes` appear (in App.css) to a non-zero vertical offset
(e.g., translateY(20px) or translateY(20px) rotate(-3deg) scale(0.7)) so the
animation produces a slide-up entrance to translateY(0) at 100%; keep the
existing opacity/rotation/scale transitions as-is.
| @@ -0,0 +1,59 @@ | |||
| import { motion, type HTMLMotionProps } from "framer-motion"; | |||
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if framer-motion is in package.json
echo "=== Checking package.json for framer-motion ==="
rg -n "framer-motion" package.json
echo ""
echo "=== Checking Button.tsx for framer-motion import ==="
cat -n src/components/ui/Button.tsx | head -10
echo ""
echo "=== Checking if HeroSection.tsx exists and uses framer-motion ==="
rg -n "framer-motion" src/components/ 2>/dev/null | head -20Repository: AOSSIE-Org/OrgExplorer
Length of output: 810
Add framer-motion to package.json dependencies.
The library is imported in Button.tsx and HeroSection.tsx but not declared in the package manifest. This will cause build failures in a fresh install. Add framer-motion to the dependencies section of package.json.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/Button.tsx` at line 1, package.json is missing the
framer-motion dependency required by imports in Button.tsx and HeroSection.tsx;
update package.json's "dependencies" to include "framer-motion" with an
appropriate version (e.g., a caret semver like ^7.0.0 or matching your repo's
constraint), then run install to lock it (so imports like `import { motion }
from "framer-motion"` in Button.tsx and HeroSection.tsx resolve correctly).
| <motion.img | ||
| key={image.id} | ||
| src={image.src} | ||
| alt={image.alt} | ||
| aria-label={image.ariaLabel} | ||
| title={image.title} | ||
| className="absolute inset-0 w-full h-full bg-cover bg-center" | ||
| style={{ objectFit: image.objectFit }} | ||
| variants={landingImageVariants} | ||
| initial="initial" | ||
| animate="enter" | ||
| exit="exit" | ||
| /> |
There was a problem hiding this comment.
bg-cover bg-center have no effect on an <img> element, and aria-label overrides alt for screen readers.
bg-cover and bg-center apply to the CSS background-image property, not to the <img> element's src. Remove them — image scaling is already handled by style={{ objectFit: image.objectFit }}.
Additionally, when both aria-label and alt are present on <img>, assistive technologies use aria-label and ignore alt. Since both convey the same intent, drop aria-label and rely solely on alt.
🛠️ Proposed fix
<motion.img
key={image.id}
src={image.src}
alt={image.alt}
- aria-label={image.ariaLabel}
title={image.title}
- className="absolute inset-0 w-full h-full bg-cover bg-center"
+ className="absolute inset-0 w-full h-full"
style={{ objectFit: image.objectFit }}📝 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.
| <motion.img | |
| key={image.id} | |
| src={image.src} | |
| alt={image.alt} | |
| aria-label={image.ariaLabel} | |
| title={image.title} | |
| className="absolute inset-0 w-full h-full bg-cover bg-center" | |
| style={{ objectFit: image.objectFit }} | |
| variants={landingImageVariants} | |
| initial="initial" | |
| animate="enter" | |
| exit="exit" | |
| /> | |
| <motion.img | |
| key={image.id} | |
| src={image.src} | |
| alt={image.alt} | |
| title={image.title} | |
| className="absolute inset-0 w-full h-full" | |
| style={{ objectFit: image.objectFit }} | |
| variants={landingImageVariants} | |
| initial="initial" | |
| animate="enter" | |
| exit="exit" | |
| /> |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/HeroSection.tsx` around lines 24 - 36, The motion.img
element in HeroSection.tsx uses background utility classes and an unnecessary
ARIA attribute; remove the Tailwind classes "bg-cover" and "bg-center" from the
className on the motion.img (image scaling is already handled by style={{
objectFit: image.objectFit }}) and remove the aria-label prop so the element
only uses alt (and title if needed) for accessibility; update the JSX for
motion.img (the element keyed by image.id and using props image.src, image.alt,
image.title, image.objectFit and landingImageVariants) accordingly.
| <h1 className="md:text-[5vw] text-[5.4vw] font-bold text-gray-50 leading-none text-center "> | ||
| <div className="appear block text-shadow-2xs text-shadow-zinc-700"> | ||
| <span>The </span> | ||
| <span> modern</span> | ||
| <span> way</span> | ||
| <span> to</span> | ||
| <span> understand</span> | ||
| <span> open-source</span> | ||
| <span> organizations</span> | ||
| </div> |
There was a problem hiding this comment.
<div> inside <h1> is invalid HTML.
Per the HTML5 content model, <h1> only permits phrasing content. <div> is flow content and is not allowed as a descendant. Replace with <span>:
🛠️ Proposed fix
- <div className="appear block text-shadow-2xs text-shadow-zinc-700">
+ <span className="appear block text-shadow-2xs text-shadow-zinc-700">
<span>The </span>
...
- </div>
+ </span>📝 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.
| <h1 className="md:text-[5vw] text-[5.4vw] font-bold text-gray-50 leading-none text-center "> | |
| <div className="appear block text-shadow-2xs text-shadow-zinc-700"> | |
| <span>The </span> | |
| <span> modern</span> | |
| <span> way</span> | |
| <span> to</span> | |
| <span> understand</span> | |
| <span> open-source</span> | |
| <span> organizations</span> | |
| </div> | |
| <h1 className="md:text-[5vw] text-[5.4vw] font-bold text-gray-50 leading-none text-center "> | |
| <span className="appear block text-shadow-2xs text-shadow-zinc-700"> | |
| <span>The </span> | |
| <span> modern</span> | |
| <span> way</span> | |
| <span> to</span> | |
| <span> understand</span> | |
| <span> open-source</span> | |
| <span> organizations</span> | |
| </span> |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/HeroSection.tsx` around lines 39 - 48, The inner <div
className="appear block text-shadow-2xs text-shadow-zinc-700"> inside the <h1>
in HeroSection.tsx is invalid HTML; replace that <div> with a <span> (e.g.,
change the element used in the component where the <h1> contains the "appear
..." block) so the h1 only contains phrasing content, and keep the existing
className (adjust to inline-block if you need block-like layout) while
preserving the nested <span> children and their classes.
| <h3 className="md:text-[1.9vw] text-[2.9vw] text-gray-50 text-center"> | ||
| <span className="block">Explore GitHub activity, contributors, and repositories through</span> | ||
| <span className="block"> interactive, relationship-driven visualizations.</span> | ||
| </h3> |
There was a problem hiding this comment.
Heading level jumps from <h1> to <h3>, skipping <h2>.
This breaks document outline semantics (WCAG 1.3.1). Use <h2> for the subtitle (or <p> if it's not semantically a heading at all).
🛠️ Proposed fix
- <h3 className="md:text-[1.9vw] text-[2.9vw] text-gray-50 text-center">
+ <h2 className="md:text-[1.9vw] text-[2.9vw] text-gray-50 text-center">
<span className="block">Explore GitHub activity, contributors, and repositories through</span>
<span className="block"> interactive, relationship-driven visualizations.</span>
- </h3>
+ </h2>📝 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.
| <h3 className="md:text-[1.9vw] text-[2.9vw] text-gray-50 text-center"> | |
| <span className="block">Explore GitHub activity, contributors, and repositories through</span> | |
| <span className="block"> interactive, relationship-driven visualizations.</span> | |
| </h3> | |
| <h2 className="md:text-[1.9vw] text-[2.9vw] text-gray-50 text-center"> | |
| <span className="block">Explore GitHub activity, contributors, and repositories through</span> | |
| <span className="block"> interactive, relationship-driven visualizations.</span> | |
| </h2> |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/ui/HeroSection.tsx` around lines 50 - 53, The subtitle in the
HeroSection component currently uses an <h3> which jumps from the page's <h1>
and violates heading semantics; change the subtitle element in HeroSection (the
block with className "md:text-[1.9vw] text-[2.9vw] text-gray-50 text-center")
from <h3> to <h2> (or to a <p> if it’s purely decorative) so heading levels are
sequential and accessible; update any tests or styles that assume an <h3>
accordingly.
| id: "virtual-graph", | ||
| src: orgVirtualGraph, | ||
| alt: "A graph image", | ||
| title: "Virtual Graph Image", | ||
| ariaLabel: "A graph image showing connection with Node and Edges", | ||
| role: "conceptual", | ||
| priority: false, | ||
| delay: 7200, | ||
| objectFit: "cover", | ||
| background: "dark", | ||
| caption: "See Insights" | ||
| } |
There was a problem hiding this comment.
Improve the alt and ariaLabel for virtual-graph — they're far less descriptive than every other entry.
alt: "A graph image" and ariaLabel: "A graph image showing connection with Node and Edges" are generic and don't describe the content meaningfully for screen readers. Align with the level of detail in the other entries.
🛠️ Proposed fix
- alt: "A graph image",
- title: "Virtual Graph Image",
- ariaLabel: "A graph image showing connection with Node and Edges",
+ alt: "Virtual relationship graph showing nodes and edges representing contributor connections in an open-source organization",
+ title: "Virtual contributor graph",
+ ariaLabel: "Node-edge graph visualizing contributor relationships",📝 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.
| id: "virtual-graph", | |
| src: orgVirtualGraph, | |
| alt: "A graph image", | |
| title: "Virtual Graph Image", | |
| ariaLabel: "A graph image showing connection with Node and Edges", | |
| role: "conceptual", | |
| priority: false, | |
| delay: 7200, | |
| objectFit: "cover", | |
| background: "dark", | |
| caption: "See Insights" | |
| } | |
| id: "virtual-graph", | |
| src: orgVirtualGraph, | |
| alt: "Virtual relationship graph showing nodes and edges representing contributor connections in an open-source organization", | |
| title: "Virtual contributor graph", | |
| ariaLabel: "Node-edge graph visualizing contributor relationships", | |
| role: "conceptual", | |
| priority: false, | |
| delay: 7200, | |
| objectFit: "cover", | |
| background: "dark", | |
| caption: "See Insights" | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/data/const/landingImages.ts` around lines 96 - 107, Update the
descriptive text for the image entry with id "virtual-graph": replace the
generic alt and ariaLabel values with specific, meaningful descriptions that
match the level of detail used elsewhere (e.g., describe the visualization type,
key nodes/relationships, and the purpose). Modify the alt property (for brief
non-visual fallback) to a concise phrase like "Interactive virtual graph showing
nodes and edge clusters" and change ariaLabel (for screen readers) to a fuller
sentence such as "Interactive virtual graph illustrating connected nodes,
highlighted clusters, and relationship edges used to explore insights"; ensure
you update the alt and ariaLabel fields on the object with id "virtual-graph"
only.
| @@ -0,0 +1,31 @@ | |||
|
|
|||
| import type { Easing, Variants } from "framer-motion"; | |||
There was a problem hiding this comment.
Import from "framer-motion" will fail — the installed package is "motion".
package.json declares "motion": "^12.30.0", not "framer-motion". In motion v12, the React-specific exports live under "motion/react". Update the import:
Proposed fix
-import type { Easing, Variants } from "framer-motion";
+import type { Easing, Variants } from "motion/react";🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/types/landingImageVariantsTypes.ts` at line 2, The import currently
references "framer-motion" which isn't installed; replace it with the correct
package export used by motion v12 by changing the import to use "motion/react"
(e.g., import type { Easing, Variants } from "motion/react") so the Easing and
Variants type symbols resolve correctly.
4890774 to
bd129d5
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (2)
.coderabbit.yaml (2)
73-78: Remove framework-specific path filters that don't apply to this project.
!**/.next/**(Next.js) and!**/.expo/**(Expo/React Native) are irrelevant for a Vite + React project. They're harmless but add noise. Consider keeping only the filters that match the actual build toolchain (node_modules,dist,build).🔧 Suggested fix
path_filters: - "!**/node_modules/**" - - "!**/.next/**" - "!**/dist/**" - "!**/build/**" - - "!**/.expo/**"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.coderabbit.yaml around lines 73 - 78, Remove the framework-specific path filters that don't apply to this Vite+React project by deleting the entries "!**/.next/**" and "!**/.expo/**" from the path_filters list and keep only the relevant filters (e.g., "!**/node_modules/**", "!**/dist/**", "!**/build/**") so the .coderabbit.yaml reflects the actual build toolchain.
80-84: ESLint and Biome are both enabled — expect overlapping findings.Biome covers many of the same linting and formatting rules as ESLint for JS/TS files. Running both will likely produce duplicate or conflicting diagnostics. If the project already uses ESLint with a mature config, consider disabling Biome (or vice versa) to avoid noise.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.coderabbit.yaml around lines 80 - 84, The configuration currently enables both linting tools under the YAML keys tools: eslint: enabled: true and biome: enabled: true which causes overlapping/conflicting diagnostics; pick one linter to be authoritative and update the YAML so that either eslint.enabled is set to false (if you prefer Biome) or biome.enabled is set to false (if you prefer ESLint), leaving only the chosen tool enabled and ensuring any project-specific configs (ESLint config files or Biome config) remain in place.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In @.coderabbit.yaml:
- Around line 110-128: The YAML contains an invalid top-level property
reviews.instructions; remove that property and instead add its content under
reviews.path_instructions with an entry that sets path: "**" and places the
instruction text as the value (e.g., as the instruction or description field),
ensuring you replace references to reviews.instructions with
reviews.path_instructions so schema validation passes; update any consumers that
referenced reviews.instructions to read from reviews.path_instructions instead.
- Around line 134-139: Remove the irrelevant NextJS guidance block from the
configuration by deleting the "NextJS:" key and its indented bullet lines (the
block starting with NextJS: and the four hyphenated items) so the linter/review
rules for this Vite + React project no longer emit Next.js-specific feedback.
- Around line 55-57: Remove the redundant "main" entry from the base_branches
list in the .coderabbit configuration: keep only non-default branch names (e.g.,
"develop") in base_branches and ensure base_branches contains branches other
than the repository default; update the base_branches array to remove "main".
---
Nitpick comments:
In @.coderabbit.yaml:
- Around line 73-78: Remove the framework-specific path filters that don't apply
to this Vite+React project by deleting the entries "!**/.next/**" and
"!**/.expo/**" from the path_filters list and keep only the relevant filters
(e.g., "!**/node_modules/**", "!**/dist/**", "!**/build/**") so the
.coderabbit.yaml reflects the actual build toolchain.
- Around line 80-84: The configuration currently enables both linting tools
under the YAML keys tools: eslint: enabled: true and biome: enabled: true which
causes overlapping/conflicting diagnostics; pick one linter to be authoritative
and update the YAML so that either eslint.enabled is set to false (if you prefer
Biome) or biome.enabled is set to false (if you prefer ESLint), leaving only the
chosen tool enabled and ensuring any project-specific configs (ESLint config
files or Biome config) remain in place.
There was a problem hiding this comment.
🧹 Nitpick comments (1)
.coderabbit.yaml (1)
48-48:assertiveprofile +request_changes_workflow: truecreates a blocking gate for all PRs.With
profile: assertive, CodeRabbit generates a high volume of comments (including nitpicks). Withrequest_changes_workflow: true, every PR with unresolved CodeRabbit comments is blocked from merging. For an open-source project with external contributors, this combination can be unnecessarily burdensome.Consider either:
- Softening to
profile: chilland keepingrequest_changes_workflow: true, or- Keeping
profile: assertiveand disablingrequest_changes_workflowso CodeRabbit feedback remains advisory.Also applies to: 65-65
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.coderabbit.yaml at line 48, The current configuration sets profile: assertive together with request_changes_workflow: true, which creates a blocking merge gate for all PRs; update the .coderabbit settings by either changing profile: assertive to profile: chill (to reduce comment volume while keeping request_changes_workflow: true) or keep profile: assertive and set request_changes_workflow: false (so feedback is advisory), and ensure you update both occurrences of these keys (the profile entry and the request_changes_workflow entry referenced around the same block).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In @.coderabbit.yaml:
- Around line 55-57: The base_branches list in .coderabbit.yaml currently
includes the default branch "main" which is redundant; update the base_branches
key to remove "main" so it only lists non-default branches (e.g., keep "develop"
and any other non-default targets) by editing the base_branches array entry to
exclude "main".
- Around line 109-127: The YAML currently uses an invalid field
reviews.instructions (which violates the schema because reviews has
additionalProperties: false); move all the content under a new catch-all key
reviews.path_instructions (preserving the bulleted guidance) and remove or
rewrite Next.js-specific references such as "ISR" (line referencing ISR) to a
Vite+React-appropriate caching note (e.g., SWR/React Query/edge caching) so the
schema validates and the guidance is accurate for this project.
---
Nitpick comments:
In @.coderabbit.yaml:
- Line 48: The current configuration sets profile: assertive together with
request_changes_workflow: true, which creates a blocking merge gate for all PRs;
update the .coderabbit settings by either changing profile: assertive to
profile: chill (to reduce comment volume while keeping request_changes_workflow:
true) or keep profile: assertive and set request_changes_workflow: false (so
feedback is advisory), and ensure you update both occurrences of these keys (the
profile entry and the request_changes_workflow entry referenced around the same
block).
Add CodeRabbit AI configuration file to enable automated code reviews, labeling, and quality checks for this repository.
Checklist
We encourage contributors to use AI tools responsibly when creating Pull Requests. While AI can be a valuable aid, it is essential to ensure that your contributions meet the task requirements, build successfully, include relevant tests, and pass all linters. Submissions that do not meet these standards may be closed without warning to maintain the quality and integrity of the project. Please take the time to understand the changes you are proposing and their impact.
Summary by CodeRabbit