Feature/oumi sponsor#181
Conversation
…rs layout Made-with: Cursor
Made-with: Cursor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
WalkthroughAdds a Cursor rule and AGENTS.md guidance for short, one-line commit/PR subjects; updates README sponsor table and assets; refactors Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
🚥 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 docstrings
🧪 Generate unit tests (beta)
Comment |
Made-with: Cursor
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
AGENTS.md (1)
356-369: Optional wording tweak to avoid “short vs descriptive” ambiguity.Line 356 says “very short,” while Line 368 says “descriptive PR titles.” Consider “short but descriptive” in one place to prevent conflicting interpretation.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@AGENTS.md` around lines 356 - 369, Update the PR guidance to remove the "very short" vs "descriptive" ambiguity by changing the phrase "For PRs, keep the subject line very short (about one line, ~50 characters or less when practical)" to "For PRs, keep the subject line short but descriptive (about one line, ~50 characters or less when practical)" and ensure the Pull Requests section still encourages descriptive titles and descriptions so both lines convey the same "short but descriptive" intent.src/components/CurrentSponsors.tsx (1)
15-15: Consider removing empty Props interface.The
Propsinterface is empty and adds no value. You could simplify by usingReact.FCwithout the generic parameter.Proposed simplification
-interface Props {} - ... -const CurrentSponsors: React.FC<Props> = () => { +const CurrentSponsors: React.FC = () => {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/CurrentSponsors.tsx` at line 15, Remove the empty Props interface and update the CurrentSponsors component signature to stop referencing it: locate the empty interface declaration "Props" and the component "CurrentSponsors" (currently typed as React.FC<Props>) and remove the interface, changing the component to a plain React.FC or an untyped/implicit function component signature so the generic parameter is no longer used.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@README.md`:
- Around line 117-119: Replace the Oumi image used in the README with the same
wordmark asset used by the component: update the <img> src in the README (the
anchor/img block shown) to reference "oumi-wordmark.svg" instead of "oumi.svg"
so it matches the asset imported by CurrentSponsors.tsx and maintains
consistency across the repo.
In `@src/components/CurrentSponsors.tsx`:
- Line 85: Prettier flags the single-line <li> element in the CurrentSponsors
component; reformat the JSX attributes of the <li key={id} className="flex
w-full max-w-[240px] justify-center sm:max-w-[260px]"> so each attribute is on
its own line (e.g., <li key={id} className=...> split across multiple lines) to
satisfy the formatter; update the JSX in the CurrentSponsors component where the
<li> for id is rendered and run the project's Prettier/lint script to confirm
the violation is resolved.
- Line 83: In the CurrentSponsors component, update the Tailwind utility classes
on the UL element (the element with className containing "items-center
justify-items-center") to use the shorthand by replacing "items-center
justify-items-center" with "place-items-center" so the className becomes
consistent with Tailwind's recommended shorthand.
---
Nitpick comments:
In `@AGENTS.md`:
- Around line 356-369: Update the PR guidance to remove the "very short" vs
"descriptive" ambiguity by changing the phrase "For PRs, keep the subject line
very short (about one line, ~50 characters or less when practical)" to "For PRs,
keep the subject line short but descriptive (about one line, ~50 characters or
less when practical)" and ensure the Pull Requests section still encourages
descriptive titles and descriptions so both lines convey the same "short but
descriptive" intent.
In `@src/components/CurrentSponsors.tsx`:
- Line 15: Remove the empty Props interface and update the CurrentSponsors
component signature to stop referencing it: locate the empty interface
declaration "Props" and the component "CurrentSponsors" (currently typed as
React.FC<Props>) and remove the interface, changing the component to a plain
React.FC or an untyped/implicit function component signature so the generic
parameter is no longer 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: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 80acd359-dc39-4199-9744-54e87575a450
⛔ Files ignored due to path filters (4)
src/assets/coderabbit-light.svgis excluded by!**/*.svgsrc/assets/coderabbit.svgis excluded by!**/*.svgsrc/assets/oumi-wordmark.svgis excluded by!**/*.svgsrc/assets/oumi.svgis excluded by!**/*.svg
📒 Files selected for processing (4)
.cursor/rules/pr-commits.mdcAGENTS.mdREADME.mdsrc/components/CurrentSponsors.tsx
| <a href="https://oumi.ai/?ref=devtoolsacademy" target="_blank" rel="noopener noreferrer"> | ||
| <img src="https://raw.githubusercontent.com/tyaga001/devtoolsacademy/main/src/assets/oumi.svg" alt="Oumi" height="50" /> | ||
| </a> |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Verify Oumi logo assets exist in the repository
echo "=== Searching for Oumi-related assets ==="
fd -i 'oumi' --type f src/assets/
echo ""
echo "=== Checking specific files referenced ==="
# Check oumi.svg (referenced in README)
if [ -f "src/assets/oumi.svg" ]; then
echo "✓ src/assets/oumi.svg exists"
else
echo "✗ src/assets/oumi.svg NOT FOUND"
fi
# Check oumi-wordmark.svg (referenced in CurrentSponsors.tsx)
if [ -f "src/assets/oumi-wordmark.svg" ]; then
echo "✓ src/assets/oumi-wordmark.svg exists"
else
echo "✗ src/assets/oumi-wordmark.svg NOT FOUND"
fiRepository: tyaga001/devtoolsacademy
Length of output: 269
🏁 Script executed:
# Find and inspect CurrentSponsors.tsx to verify which Oumi asset it uses
fd -i 'CurrentSponsors' --type f
echo ""
echo "=== Checking CurrentSponsors.tsx for Oumi asset import ==="
cat src/components/CurrentSponsors.tsx | head -50
echo ""
echo "=== Searching for all oumi references in the component ==="
rg -i 'oumi' src/components/CurrentSponsors.tsx -A 2 -B 2Repository: tyaga001/devtoolsacademy
Length of output: 2080
Update README to use the same Oumi asset as the component for consistency.
The README currently references oumi.svg, but CurrentSponsors.tsx imports oumi-wordmark.svg. Both assets exist in the repository, but using the wordmark variant in the README would maintain consistency across the codebase. Update line 118 to use oumi-wordmark.svg instead.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 117 - 119, Replace the Oumi image used in the README
with the same wordmark asset used by the component: update the <img> src in the
README (the anchor/img block shown) to reference "oumi-wordmark.svg" instead of
"oumi.svg" so it matches the asset imported by CurrentSponsors.tsx and maintains
consistency across the repo.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
src/components/CurrentSponsors.tsx (3)
28-65: Renamesponsorsconstant to UPPER_CASE.Line 28 declares a module-level constant in lower camel case; this repo rule asks for UPPER_CASE constants.
Proposed fix
-const sponsors: SponsorInterface[] = [ +const SPONSORS: SponsorInterface[] = [ @@ - {sponsors.map(({ id, href, logo, alt }) => ( + {SPONSORS.map(({ id, href, logo, alt }) => (As per coding guidelines, use UPPER_CASE for constants and environment variables.
Also applies to: 84-84
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/CurrentSponsors.tsx` around lines 28 - 65, Rename the module-level constant named sponsors to UPPER_CASE (e.g., SPONSORS) throughout the file; update its declaration (the Sponsor[] array currently assigned to sponsors) and every reference to that identifier (including any JSX or functions that iterate or import it) so the symbol name matches the repo rule for UPPER_CASE constants; also apply the same rename for the other module-level constant mentioned around line 84 to follow the same convention.
15-22: Use interface naming convention for props/data types.Lines 15-22 define props/data types without the required
Interfacesuffix, and the data structure is declared as atypeinstead of an interface.Proposed fix
-interface Props {} +interface CurrentSponsorsPropsInterface {} -type Sponsor = { +interface SponsorInterface { id: string href: string logo: StaticImageData alt: string } @@ -const sponsors: Sponsor[] = [ +const sponsors: SponsorInterface[] = [ @@ -const CurrentSponsors: React.FC<Props> = () => { +const CurrentSponsors: React.FC<CurrentSponsorsPropsInterface> = () => {As per coding guidelines, define interfaces for component props and data structures and use PascalCase with the
Interfacesuffix for type names.Also applies to: 67-67
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/CurrentSponsors.tsx` around lines 15 - 22, Rename the plain `type Sponsor` and `interface Props` to use interface declarations with PascalCase and an `Interface` suffix (e.g. `SponsorInterface` and `PropsInterface`), and update all references in the CurrentSponsors component (including any usage around the previous `Sponsor` list and the component signature `CurrentSponsors`) to use the new interface names; convert the `type Sponsor` into `interface SponsorInterface { id: string; href: string; logo: StaticImageData; alt: string }` and change `Props` to `interface PropsInterface {}` (or add required props) and update the component props annotation accordingly.
2-14: Reorder imports to match repository grouping rule.Line 4 places a type import before local
@/imports; your rule requires type imports after local imports.Proposed fix
import * as React from "react" import Image from "next/image" -import type { StaticImageData } from "next/image" +import { Heart } from "lucide-react" +import { Link } from "next-view-transitions" import StreamLogo from "@/assets/stream.png" import CodeRabbitLogo from "@/assets/coderabbit.svg" import EloqDataLogo from "@/assets/eloqdata.png" import ClineLogo from "@/assets/cline.svg" import OrchidsLogo from "@/assets/orchids.png" import OumiWordmark from "@/assets/oumi-wordmark.svg" -import { Heart } from "lucide-react" -import { Link } from "next-view-transitions" +import type { StaticImageData } from "next/image"As per coding guidelines, group imports in order: React, third-party libraries, local imports using
@/aliases, then type imports.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/components/CurrentSponsors.tsx` around lines 2 - 14, Imports in CurrentSponsors.tsx are misordered: the type import "StaticImageData" from "next/image" appears before local "@/..." imports; move type imports after local imports to follow repository grouping (React, third-party, local "@/..." aliases, then type imports). Reorder the import block so React and third-party imports (e.g., React, Image, Link, Heart) come first, then all local asset imports (StreamLogo, CodeRabbitLogo, EloqDataLogo, ClineLogo, OrchidsLogo, OumiWordmark), and finally the type import "StaticImageData".
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/components/CurrentSponsors.tsx`:
- Around line 89-94: The anchor inside the CurrentSponsors component that
renders each sponsor (the <a href={href} ...> in CurrentSponsors.tsx) lacks an
aria-label; update the link to include a meaningful aria-label (e.g., using the
sponsor name or title from the sponsor object/variable used when mapping
sponsors) so screen readers get an explicit label; find the map/loop that
renders the anchor in CurrentSponsors and add aria-label={`Sponsor:
${sponsor.name}`} (or similar) ensuring the label uses an existing unique
property like sponsor.name or sponsor.title.
---
Nitpick comments:
In `@src/components/CurrentSponsors.tsx`:
- Around line 28-65: Rename the module-level constant named sponsors to
UPPER_CASE (e.g., SPONSORS) throughout the file; update its declaration (the
Sponsor[] array currently assigned to sponsors) and every reference to that
identifier (including any JSX or functions that iterate or import it) so the
symbol name matches the repo rule for UPPER_CASE constants; also apply the same
rename for the other module-level constant mentioned around line 84 to follow
the same convention.
- Around line 15-22: Rename the plain `type Sponsor` and `interface Props` to
use interface declarations with PascalCase and an `Interface` suffix (e.g.
`SponsorInterface` and `PropsInterface`), and update all references in the
CurrentSponsors component (including any usage around the previous `Sponsor`
list and the component signature `CurrentSponsors`) to use the new interface
names; convert the `type Sponsor` into `interface SponsorInterface { id: string;
href: string; logo: StaticImageData; alt: string }` and change `Props` to
`interface PropsInterface {}` (or add required props) and update the component
props annotation accordingly.
- Around line 2-14: Imports in CurrentSponsors.tsx are misordered: the type
import "StaticImageData" from "next/image" appears before local "@/..." imports;
move type imports after local imports to follow repository grouping (React,
third-party, local "@/..." aliases, then type imports). Reorder the import block
so React and third-party imports (e.g., React, Image, Link, Heart) come first,
then all local asset imports (StreamLogo, CodeRabbitLogo, EloqDataLogo,
ClineLogo, OrchidsLogo, OumiWordmark), and finally the type import
"StaticImageData".
🪄 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: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4cb86437-5389-4df7-b5d4-d93a3cd7ecac
📒 Files selected for processing (1)
src/components/CurrentSponsors.tsx
| <a | ||
| href={href} | ||
| target="_blank" | ||
| rel="noopener noreferrer" | ||
| className="group flex w-full flex-col items-center justify-center rounded-xl px-3 py-2 outline-none ring-white/0 transition duration-200 hover:ring-2 hover:ring-white/10 focus-visible:ring-2 focus-visible:ring-white/20" | ||
| > |
There was a problem hiding this comment.
Add aria-label on sponsor links for explicit accessibility compliance.
The interactive <a> at Lines 89-94 is missing aria-label.
Proposed fix
<a
href={href}
target="_blank"
rel="noopener noreferrer"
+ aria-label={`Visit ${alt}`}
className="group flex w-full flex-col items-center justify-center rounded-xl px-3 py-2 outline-none ring-white/0 transition duration-200 hover:ring-2 hover:ring-white/10 focus-visible:ring-2 focus-visible:ring-white/20"
>As per coding guidelines, include aria-label attributes on interactive elements for accessibility.
📝 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.
| <a | |
| href={href} | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| className="group flex w-full flex-col items-center justify-center rounded-xl px-3 py-2 outline-none ring-white/0 transition duration-200 hover:ring-2 hover:ring-white/10 focus-visible:ring-2 focus-visible:ring-white/20" | |
| > | |
| <a | |
| href={href} | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| aria-label={`Visit ${alt}`} | |
| className="group flex w-full flex-col items-center justify-center rounded-xl px-3 py-2 outline-none ring-white/0 transition duration-200 hover:ring-2 hover:ring-white/10 focus-visible:ring-2 focus-visible:ring-white/20" | |
| > |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/components/CurrentSponsors.tsx` around lines 89 - 94, The anchor inside
the CurrentSponsors component that renders each sponsor (the <a href={href} ...>
in CurrentSponsors.tsx) lacks an aria-label; update the link to include a
meaningful aria-label (e.g., using the sponsor name or title from the sponsor
object/variable used when mapping sponsors) so screen readers get an explicit
label; find the map/loop that renders the anchor in CurrentSponsors and add
aria-label={`Sponsor: ${sponsor.name}`} (or similar) ensuring the label uses an
existing unique property like sponsor.name or sponsor.title.
Summary by CodeRabbit