Skip to content

feat(partners): add dedicated CodeRabbit Gold partner landing page#1044

Open
jhislop-design wants to merge 3 commits into
mainfrom
jonny/codeabbat-bd348d
Open

feat(partners): add dedicated CodeRabbit Gold partner landing page#1044
jhislop-design wants to merge 3 commits into
mainfrom
jonny/codeabbat-bd348d

Conversation

@jhislop-design

@jhislop-design jhislop-design commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a dedicated landing page for the CodeRabbit Gold sponsorship at /partners/coderabbit, replacing the generic partner template for that URL. Structure mirrors the existing Railway partner page (hero → stats → features → how-it-works → library fit → pricing → testimonials → FAQ → CTA), reusing the shared Card, Button, Collapsible, CodeBlock, and PartnerImage components — so it inherits the design system, dark mode, and analytics wiring.

Content

All facts sourced from coderabbit.ai:

  • Pricing: Free $0 · Pro $24/user/mo · Pro Plus $48/user/mo · Enterprise custom (billed-annually noted)
  • Stats: 6M+ repos, 75M+ defects, 15,000+ customers, free IDE reviews
  • Testimonials: Jensen Huang (NVIDIA), Brandon Romano (Clerk), Abhi Aiyer (Mastra), Kiran Kanagasekar (TaskRabbit)
  • Accuracy: per the repo's partner guidance, CodeRabbit is presented as a GitHub App with an optional .coderabbit.yaml — no runtime app code / SDK. Code blocks show a real .coderabbit.yaml and @coderabbitai PR commands.

SEO / AI search

  • seo() meta (title, description, keywords, OG/Twitter via the shared helper)
  • JSON-LD: FAQPage (6 Q&A) + WebPage/Organization, both verified present in the SSR HTML

UTM

Sponsor links use the existing CodeRabbit affiliate base coderabbit.link/tanstack?…&via=tanstack plus utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page (matching the Railway pattern).

Verification

  • tsc + lint + unit tests pass (pre-commit hook)
  • ✅ Renders with no console errors; light and dark mode checked
  • ✅ FAQ accordion toggles; all UTM/docs/pricing/IDE links resolve

Reviewer notes

  • Please confirm the UTM/affiliate params and stats currency against the signed sponsorship terms before merge.
  • The Jensen Huang / NVIDIA quote is a high-profile public testimonial pulled from coderabbit.ai — included at the sponsor's request; flagging for a final sign-off.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added a dedicated CodeRabbit partner landing page at /partners/coderabbit.
    • Expanded the page with feature highlights, onboarding steps, pricing, testimonials, and partner-specific content.
    • Added an interactive FAQ and SEO enhancements (including structured FAQ/partner metadata).
    • Added analytics tracking for page views and outbound link interactions.

Adds /partners/coderabbit, a rich SEO- and AI-search-optimized landing
page for the CodeRabbit Gold sponsorship, modeled on the Railway partner
page structure (hero, stats, features, how-it-works, library fit,
pricing, testimonials, FAQ, CTA).

Content is sourced from coderabbit.ai: real pricing (Free/Pro/Pro Plus/
Enterprise), stats, features, and testimonials. Per the repo's partner
guidance, CodeRabbit is presented as a GitHub App with an optional
.coderabbit.yaml config — no runtime app code — rather than an SDK.

Includes seo() meta plus FAQPage and WebPage JSON-LD for rich results.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 13, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
tanstack-com 7c2d70d Commit Preview URL

Branch Preview URL
Jul 13 2026, 04:34 PM

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a CodeRabbit partner landing page at /partners/coderabbit, including SEO metadata, structured FAQ data, analytics, interactive content, pricing, testimonials, and outbound CTAs. The generated route tree registers the page beneath the Partners route.

Changes

CodeRabbit partner route

Layer / File(s) Summary
Partner page content and route contract
src/routes/partners.coderabbit.tsx
Defines partner URLs, marketing content, pricing, testimonials, FAQs, JSON-LD generation, SEO metadata, and the TanStack Router route.
Landing page rendering and interactions
src/routes/partners.coderabbit.tsx
Renders landing-page sections, comparison and pricing content, tracks page views and outbound clicks, and manages interactive FAQ state.
Generated route-tree integration
src/routeTree.gen.ts
Imports and nests the new route under PartnersRoute and extends generated route maps, unions, module augmentation, and child-route typings.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Visitor
  participant CodeRabbitPartnerPage
  participant Analytics
  participant ExternalDestination
  Visitor->>CodeRabbitPartnerPage: Open /partners/coderabbit
  CodeRabbitPartnerPage->>Analytics: Emit partner_viewed
  Visitor->>CodeRabbitPartnerPage: Select outbound CTA
  CodeRabbitPartnerPage->>Analytics: Emit partner_clicked
  CodeRabbitPartnerPage->>ExternalDestination: Navigate to outbound link
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding a dedicated CodeRabbit partner landing page under partners.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonny/codeabbat-bd348d

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/routes/partners.coderabbit.tsx`:
- Around line 446-449: Update the 15,000 statistic in the relevant stats section
to use the same label as the other 15,000 statistic on the page, choosing either
“Customers” or “teams” consistently. Locate the surrounding stats entries in the
page component and change only the inconsistent label.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b4a233b4-962b-4065-962d-504028352632

📥 Commits

Reviewing files that changed from the base of the PR and between 2952371 and a853001.

📒 Files selected for processing (2)
  • src/routeTree.gen.ts
  • src/routes/partners.coderabbit.tsx

Comment on lines +446 to +449
['6M+', 'Repositories reviewed'],
['75M+', 'Defects caught'],
['15,000+', 'Customers'],
['$0', 'Reviews in your IDE'],

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the relevant sections in src/routes/partners.coderabbit.tsx
sed -n '430,470p' src/routes/partners.coderabbit.tsx
printf '\n---\n'
sed -n '750,790p' src/routes/partners.coderabbit.tsx
printf '\n---\n'
# Search for the stat labels used in this file
rg -n "15,000\+|Customers|teams|Repositories reviewed|Defects caught|Reviews in your IDE" src/routes/partners.coderabbit.tsx

Repository: TanStack/tanstack.com

Length of output: 4244


Use one label for the 15,000 stat. src/routes/partners.coderabbit.tsx mixes 15,000+ Customers and 15,000+ teams; pick one term and use it consistently across the page.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/routes/partners.coderabbit.tsx` around lines 446 - 449, Update the 15,000
statistic in the relevant stats section to use the same label as the other
15,000 statistic on the page, choosing either “Customers” or “teams”
consistently. Locate the surrounding stats entries in the page component and
change only the inconsistent label.

- Reframe the value section from "why teams choose CodeRabbit" to
  "CodeRabbit is all-in on the TanStack community" to position TanStack
  as the sought-after partner.
- Add "What CodeRabbit catches in a TanStack PR" section (6 concrete,
  framework-specific examples) for AI-search and long-tail coverage.
- Add "How CodeRabbit compares" table (vs manual review vs linters).
- Expand FAQ 6 -> 12 (data privacy/training, language support, monorepo
  path scoping, test/docstring generation, bot chat, Jira/Linear/MCP);
  FAQPage JSON-LD scales automatically.

All new claims verified against coderabbit.ai and its docs.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/routes/partners.coderabbit.tsx (1)

710-737: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract a shared card component for catches and libDetails.

The catches card rendering (L724-736) is identical to the libDetails card rendering (L695-707) — same Card, CheckBadge, label, and description structure. Extracting a small CheckCard component would eliminate the duplication and prevent future drift.

♻️ Proposed refactor
+function CheckCard({ label, desc }: { label: string; desc: string }) {
+  return (
+    <Card key={label} className="p-4 shadow-none">
+      <div className="flex items-start gap-2">
+        <CheckBadge />
+        <span className="text-sm font-semibold">{label}</span>
+      </div>
+      <p className="mt-2 text-xs leading-relaxed text-gray-600 dark:text-gray-400">
+        {desc}
+      </p>
+    </Card>
+  )
+}

Then use <CheckCard label={label} desc={desc} /> in both the libDetails and catches sections.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/routes/partners.coderabbit.tsx` around lines 710 - 737, Extract the
duplicated card markup from the libDetails and catches renderings into a shared
CheckCard component accepting label and desc props. Replace each inline
Card/CheckBadge structure in both map callbacks with CheckCard, preserving the
existing styling and content.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/routes/partners.coderabbit.tsx`:
- Around line 431-446: Update ComparisonCell so both boolean outcomes expose
explicit screen-reader text alternatives: label the true CheckBadge result as
yes and the false em-dash result as no, while preserving the existing visual
rendering and partial-value behavior.

---

Nitpick comments:
In `@src/routes/partners.coderabbit.tsx`:
- Around line 710-737: Extract the duplicated card markup from the libDetails
and catches renderings into a shared CheckCard component accepting label and
desc props. Replace each inline Card/CheckBadge structure in both map callbacks
with CheckCard, preserving the existing styling and content.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4c3294cd-190f-4817-b1f9-b39ac5a4ced3

📥 Commits

Reviewing files that changed from the base of the PR and between a853001 and 7c2d70d.

📒 Files selected for processing (1)
  • src/routes/partners.coderabbit.tsx

Comment on lines +431 to +446
function ComparisonCell({ value }: { value: ComparisonValue }) {
if (value === 'partial') {
return (
<span className="text-xs font-medium text-gray-500 dark:text-gray-400">
Partial
</span>
)
}
return value ? (
<span className="inline-flex justify-center">
<CheckBadge />
</span>
) : (
<span className="text-gray-300 dark:text-gray-600">—</span>
)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Add screen-reader text alternatives to ComparisonCell.

In the comparison table, CheckBadge (true) and the em dash (false) convey yes/no semantics visually but have no text equivalent for assistive technology. Screen readers will encounter a decorative icon or punctuation with no label.

♿ Proposed fix: add aria-labels
 function ComparisonCell({ value }: { value: ComparisonValue }) {
   if (value === 'partial') {
     return (
       <span className="text-xs font-medium text-gray-500 dark:text-gray-400">
         Partial
       </span>
     )
   }
   return value ? (
-    <span className="inline-flex justify-center">
+    <span className="inline-flex justify-center" aria-label="Yes">
       <CheckBadge />
+      <span className="sr-only">Yes</span>
     </span>
   ) : (
-    <span className="text-gray-300 dark:text-gray-600">—</span>
+    <span className="text-gray-300 dark:text-gray-600" aria-label="No">
+      <span aria-hidden="true">—</span>
+      <span className="sr-only">No</span>
+    </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.

Suggested change
function ComparisonCell({ value }: { value: ComparisonValue }) {
if (value === 'partial') {
return (
<span className="text-xs font-medium text-gray-500 dark:text-gray-400">
Partial
</span>
)
}
return value ? (
<span className="inline-flex justify-center">
<CheckBadge />
</span>
) : (
<span className="text-gray-300 dark:text-gray-600"></span>
)
}
function ComparisonCell({ value }: { value: ComparisonValue }) {
if (value === 'partial') {
return (
<span className="text-xs font-medium text-gray-500 dark:text-gray-400">
Partial
</span>
)
}
return value ? (
<span className="inline-flex justify-center" aria-label="Yes">
<CheckBadge />
<span className="sr-only">Yes</span>
</span>
) : (
<span className="text-gray-300 dark:text-gray-600" aria-label="No">
<span aria-hidden="true"></span>
<span className="sr-only">No</span>
</span>
)
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/routes/partners.coderabbit.tsx` around lines 431 - 446, Update
ComparisonCell so both boolean outcomes expose explicit screen-reader text
alternatives: label the true CheckBadge result as yes and the false em-dash
result as no, while preserving the existing visual rendering and partial-value
behavior.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant