Skip to content

feat: add case study pages and update footer links: - #250

Merged
yashdev9274 merged 1 commit into
mainfrom
supercode-cli
Aug 2, 2026
Merged

feat: add case study pages and update footer links:#250
yashdev9274 merged 1 commit into
mainfrom
supercode-cli

Conversation

@yashdev9274

@yashdev9274 yashdev9274 commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Description

  • Introduced a new case study page for Dodo Payments, detailing the migration process and its benefits.
  • Created a main case study overview page to showcase various case studies.
  • Updated the footer component to include a link to the case studies section.
  • Added new images for case study representation.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Refactor (no functional changes)

How Has This Been Tested?

Please describe the tests that you ran to verify your changes.

  • bun test passes
  • bun run typecheck passes
  • bun run lint passes (if applicable)

Checklist:

  • My code follows the project's style guidelines
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works

Summary by CodeRabbit

  • New Features
    • Added a dedicated Case Studies page featuring the Supercode-to-Dodo Payments migration.
    • Added a detailed Dodo Payments case study with migration highlights, implementation phases, results, testimonial, sharing controls, and promotional call-to-action.
    • Added search-engine and social sharing metadata for the case study.
    • Added a Case Studies link to the site footer.

- Introduced a new case study page for Dodo Payments, detailing the migration process and its benefits.
- Created a main case study overview page to showcase various case studies.
- Updated the footer component to include a link to the case studies section.
- Added new images for case study representation.
@vercel

vercel Bot commented Aug 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
supercli Ready Ready Preview Aug 2, 2026 3:51pm
supercli-client Ready Ready Preview Aug 2, 2026 3:51pm
supercli-docs Ready Ready Preview Aug 2, 2026 3:51pm

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

Your trial has ended. Reactivate Greptile to resume code reviews.

@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

The PR adds a case-study index at /case-study, a Dodo Payments detail page with SEO metadata and migration content, and a footer link to the index.

Changes

Dodo Payments Case Studies

Layer / File(s) Summary
Case-study index and navigation
apps/web/app/(pages)/case-study/page.tsx, apps/web/components/homepage/footer.tsx
The case-study index defines and displays the Dodo Payments migration entry. The footer links to /case-study.
Dodo Payments case-study content
apps/web/app/(pages)/case-study/dodo-payments/page.tsx
The detail page adds metadata, migration metrics, narrative sections, implementation phases, outcomes, recommendations, and a testimonial.
Case-study sidebar and page completion
apps/web/app/(pages)/case-study/dodo-payments/page.tsx
The detail page adds metric cards, an external Dodo Payments link, sharing controls, footer rendering, and a commented-out related-studies section.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Poem

A rabbit hops through pages bright,
With case studies in gentle flight.
Dodo’s tale now has a home,
Linked from footer, no need to roam.
SEO stars and metrics gleam,
Carrots celebrate the team.

🚥 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 added case study pages and footer link update.
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 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch supercode-cli

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration.


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: 4

🧹 Nitpick comments (6)
apps/web/app/(pages)/case-study/page.tsx (3)

18-19: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add page metadata for /case-study.

The sibling detail page exports metadata with title, description, and Open Graph data. This index page has no export const metadata, so it loses title/description control and social preview data for the case-study listing route.

🤖 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 `@apps/web/app/`(pages)/case-study/page.tsx around lines 18 - 19, Add an
exported metadata constant alongside CaseStudyPage for the /case-study route,
including the listing page’s title, description, and Open Graph data consistent
with the sibling detail page’s metadata pattern.

1-3: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Fix import order to match the web app convention.

next/link is imported after the @/components/... aliases. Place Next.js imports before internal alias imports.

As per coding guidelines, "Follow import order in the web app: React/Next → external libs → internal aliases → relative imports, with blank lines between groups."

🤖 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 `@apps/web/app/`(pages)/case-study/page.tsx around lines 1 - 3, Reorder the
imports at the top of the case-study page so the Next.js Link import appears
before the internal `@/components` imports, preserving the convention of grouping
imports by React/Next, external libraries, internal aliases, and relative paths
with blank lines between groups.

Source: Coding guidelines


20-25: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

LGTM structurally, but see the consolidated comment on shell duplication.

The fixed border markers, dark class, Navbar, and Footer wrapper here duplicate the identical structure in apps/web/app/(pages)/case-study/dodo-payments/page.tsx. See the consolidated comment for the proposed shared-component fix.

Also applies to: 81-83

🤖 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 `@apps/web/app/`(pages)/case-study/page.tsx around lines 20 - 25, Extract the
duplicated case-study shell containing the dark main container, fixed border
markers, Navbar, and Footer into a shared component, then update both case-study
pages to use it. Remove the repeated wrapper structure from the page components
while preserving their existing page-specific content.
apps/web/app/(pages)/case-study/dodo-payments/page.tsx (3)

1-4: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Fix import order to match the web app convention.

next/link and the Metadata type import from next come after the @/components/... aliases. Place Next.js imports first.

As per coding guidelines, "Follow import order in the web app: React/Next → external libs → internal aliases → relative imports, with blank lines between groups."

🤖 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 `@apps/web/app/`(pages)/case-study/dodo-payments/page.tsx around lines 1 - 4,
Reorder the imports at the top of the page module to follow the web app
convention: place the Next.js imports for Link and Metadata first, then the
internal "`@/components/`..." imports, with a blank line separating the groups.

Source: Coding guidelines


74-79: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Consider next/image for the banner image.

This raw <img> bypasses Next.js image optimization (responsive sizing, lazy loading, LCP hints). See the consolidated comment shared with apps/web/app/(pages)/case-study/page.tsx.

🤖 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 `@apps/web/app/`(pages)/case-study/dodo-payments/page.tsx around lines 74 - 79,
Replace the raw img element in the case-study banner with Next.js’s Image
component, preserving the existing source, alt text, and styling while providing
the required image dimensions or responsive sizing configuration.

45-50: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Shell wrapper duplicated with the case-study index page.

The fixed border markers, dark class, Navbar, and Footer wrapper here are identical to apps/web/app/(pages)/case-study/page.tsx. See the consolidated comment for the proposed shared-component fix.

Also applies to: 484-486

🤖 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 `@apps/web/app/`(pages)/case-study/dodo-payments/page.tsx around lines 45 - 50,
Extract the duplicated case-study shell from the page component into a shared
wrapper component, including the fixed border markers, dark styling, Navbar, and
Footer, then reuse it in both the dodo-payments page and the case-study index
page. Preserve each page’s existing content within the shared shell.
🤖 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 `@apps/web/app/`(pages)/case-study/dodo-payments/page.tsx:
- Around line 8-9: Align the customer count in the dodo-payments case study with
the authoritative count used by the case-study index page. Update both the
metadata description and the corresponding body copy in the page component,
preserving the surrounding wording.
- Around line 440-452: Update the two share buttons in the Share control block
to include type="button", accessible aria-labels identifying their respective
social platforms, and onClick handlers that perform the intended sharing
actions. Keep the existing icon markup and styling unchanged.

In `@apps/web/app/`(pages)/case-study/page.tsx:
- Around line 10-11: Update the case-study metadata description in the page
configuration to use the customer count verified against the Dodo Payments
detail page, keeping the description consistent with the “100+ paying customers”
wording used by the detail page.
- Around line 5-16: Update the caseStudies entries with image and imageAlt
fields, then use those fields in the mapped card render instead of hardcoded
Dodo Payments values for the image source and alt text. Also either apply each
study’s color field in the render or remove the unused color property,
preserving generic rendering for all case studies.

---

Nitpick comments:
In `@apps/web/app/`(pages)/case-study/dodo-payments/page.tsx:
- Around line 1-4: Reorder the imports at the top of the page module to follow
the web app convention: place the Next.js imports for Link and Metadata first,
then the internal "`@/components/`..." imports, with a blank line separating the
groups.
- Around line 74-79: Replace the raw img element in the case-study banner with
Next.js’s Image component, preserving the existing source, alt text, and styling
while providing the required image dimensions or responsive sizing
configuration.
- Around line 45-50: Extract the duplicated case-study shell from the page
component into a shared wrapper component, including the fixed border markers,
dark styling, Navbar, and Footer, then reuse it in both the dodo-payments page
and the case-study index page. Preserve each page’s existing content within the
shared shell.

In `@apps/web/app/`(pages)/case-study/page.tsx:
- Around line 18-19: Add an exported metadata constant alongside CaseStudyPage
for the /case-study route, including the listing page’s title, description, and
Open Graph data consistent with the sibling detail page’s metadata pattern.
- Around line 1-3: Reorder the imports at the top of the case-study page so the
Next.js Link import appears before the internal `@/components` imports, preserving
the convention of grouping imports by React/Next, external libraries, internal
aliases, and relative paths with blank lines between groups.
- Around line 20-25: Extract the duplicated case-study shell containing the dark
main container, fixed border markers, Navbar, and Footer into a shared
component, then update both case-study pages to use it. Remove the repeated
wrapper structure from the page components while preserving their existing
page-specific 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fbbfce12-d323-41a3-81d2-37822a3ece9e

📥 Commits

Reviewing files that changed from the base of the PR and between a6fd394 and 179f84f.

⛔ Files ignored due to path filters (2)
  • apps/web/public/supercode-ddp2.png is excluded by !**/*.png
  • apps/web/public/supercode-grayscale.png is excluded by !**/*.png
📒 Files selected for processing (3)
  • apps/web/app/(pages)/case-study/dodo-payments/page.tsx
  • apps/web/app/(pages)/case-study/page.tsx
  • apps/web/components/homepage/footer.tsx

Comment on lines +8 to +9
description:
"A complete payment migration for 100+ paying customers — zero downtime, zero lost revenue. Learn how Supercode switched from Polar to Dodo Payments.",

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

Verify the customer count against the case-study index page.

This page states "100+ paying customers" in the metadata description (Line 9) and body copy (Lines 68-69), but apps/web/app/(pages)/case-study/page.tsx states "3200+ customers" for the same case study. See the consolidated comment for all affected sites.

Also applies to: 67-71

🤖 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 `@apps/web/app/`(pages)/case-study/dodo-payments/page.tsx around lines 8 - 9,
Align the customer count in the dodo-payments case study with the authoritative
count used by the case-study index page. Update both the metadata description
and the corresponding body copy in the page component, preserving the
surrounding wording.

Comment on lines +440 to +452
<div className="flex items-center gap-3 pt-2">
<span className="text-[13px] text-muted-foreground">Share</span>
<button className="w-8 h-8 rounded-lg border border-border bg-card flex items-center justify-center transition-[background-color,transform] duration-150 ease-out [@media(hover:hover)]:hover:bg-accent/30 active:scale-[0.92]">
<svg className="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
</svg>
</button>
<button className="w-8 h-8 rounded-lg border border-border bg-card flex items-center justify-center transition-[background-color,transform] duration-150 ease-out [@media(hover:hover)]:hover:bg-accent/30 active:scale-[0.92]">
<svg className="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
</svg>
</button>
</div>

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 | 🟠 Major | ⚡ Quick win

Share buttons are inert and lack accessible names.

Neither <button> has an onClick handler, so clicking them does nothing. Both are icon-only with no aria-label, so screen reader users cannot identify their purpose. Add type="button" too, since these buttons have no submit intent.

🛠️ Proposed fix
-                  <button className="w-8 h-8 rounded-lg border border-border bg-card flex items-center justify-center transition-[background-color,transform] duration-150 ease-out [`@media`(hover:hover)]:hover:bg-accent/30 active:scale-[0.92]">
+                  <button
+                    type="button"
+                    aria-label="Share on X"
+                    onClick={() => {
+                      window.open(
+                        `https://twitter.com/intent/tweet?url=${encodeURIComponent(window.location.href)}`,
+                        "_blank",
+                        "noopener,noreferrer"
+                      )
+                    }}
+                    className="w-8 h-8 rounded-lg border border-border bg-card flex items-center justify-center transition-[background-color,transform] duration-150 ease-out [`@media`(hover:hover)]:hover:bg-accent/30 active:scale-[0.92]"
+                  >
                     <svg className="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
                       <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
                     </svg>
                   </button>
-                  <button className="w-8 h-8 rounded-lg border border-border bg-card flex items-center justify-center transition-[background-color,transform] duration-150 ease-out [`@media`(hover:hover)]:hover:bg-accent/30 active:scale-[0.92]">
+                  <button
+                    type="button"
+                    aria-label="Share on LinkedIn"
+                    onClick={() => {
+                      window.open(
+                        `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(window.location.href)}`,
+                        "_blank",
+                        "noopener,noreferrer"
+                      )
+                    }}
+                    className="w-8 h-8 rounded-lg border border-border bg-card flex items-center justify-center transition-[background-color,transform] duration-150 ease-out [`@media`(hover:hover)]:hover:bg-accent/30 active:scale-[0.92]"
+                  >
                     <svg className="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
                       <path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
                     </svg>
                   </button>
🤖 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 `@apps/web/app/`(pages)/case-study/dodo-payments/page.tsx around lines 440 -
452, Update the two share buttons in the Share control block to include
type="button", accessible aria-labels identifying their respective social
platforms, and onClick handlers that perform the intended sharing actions. Keep
the existing icon markup and styling unchanged.

Comment on lines +5 to +16
const caseStudies = [
{
slug: "dodo-payments",
company: "Supercode",
title: "How Supercode migrated from Polar to Dodo Payments",
description:
"A complete payment migration for 3200+ customers — zero downtime, zero lost revenue.",
date: "Aug 02, 2026",
tag: "Payments",
color: "bg-emerald-100 dark:bg-emerald-900/30",
},
]

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 | 🟠 Major | ⚡ Quick win

Generalize the case-study card image and alt text instead of hardcoding Dodo Payments.

caseStudies is rendered generically with .map(), but the <img> at Line 47 hardcodes src="/supercode-ddp.png" and the alt text at Line 48 hardcodes "${study.company} x Dodo Payments". Add an image/imageAlt field to each study entry instead of hardcoding it in the render. Otherwise, adding any non-Dodo-Payments case study renders the wrong image and a misleading alt text. Also, color (Line 14) is defined but never used in the render — either apply it or remove it.

🛠️ Proposed fix
 const caseStudies = [
   {
     slug: "dodo-payments",
     company: "Supercode",
     title: "How Supercode migrated from Polar to Dodo Payments",
     description:
       "A complete payment migration for 3200+ customers — zero downtime, zero lost revenue.",
     date: "Aug 02, 2026",
     tag: "Payments",
-    color: "bg-emerald-100 dark:bg-emerald-900/30",
+    color: "bg-emerald-100 dark:bg-emerald-900/30",
+    image: "/supercode-ddp.png",
+    imageAlt: "Supercode x Dodo Payments case study",
   },
 ]
                   <img
-                    src="/supercode-ddp.png"
-                    alt={`${study.company} x Dodo Payments`}
+                    src={study.image}
+                    alt={study.imageAlt}
                     className="absolute inset-0 w-full h-full object-cover"
                   />

Also applies to: 46-50

🤖 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 `@apps/web/app/`(pages)/case-study/page.tsx around lines 5 - 16, Update the
caseStudies entries with image and imageAlt fields, then use those fields in the
mapped card render instead of hardcoded Dodo Payments values for the image
source and alt text. Also either apply each study’s color field in the render or
remove the unused color property, preserving generic rendering for all case
studies.

Comment on lines +10 to +11
description:
"A complete payment migration for 3200+ customers — zero downtime, zero lost revenue.",

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

Verify the customer count against the Dodo Payments detail page.

This description states "3200+ customers", but apps/web/app/(pages)/case-study/dodo-payments/page.tsx states "100+ paying customers" in its metadata description and body copy. See the consolidated comment for all affected sites.

🤖 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 `@apps/web/app/`(pages)/case-study/page.tsx around lines 10 - 11, Update the
case-study metadata description in the page configuration to use the customer
count verified against the Dodo Payments detail page, keeping the description
consistent with the “100+ paying customers” wording used by the detail page.

@coderabbitai coderabbitai Bot mentioned this pull request Aug 2, 2026
14 tasks
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