diff --git a/apps/web-roo-code/src/components/blog/BlogPostCTA.tsx b/apps/web-roo-code/src/components/blog/BlogPostCTA.tsx deleted file mode 100644 index 17f944f75a..0000000000 --- a/apps/web-roo-code/src/components/blog/BlogPostCTA.tsx +++ /dev/null @@ -1,225 +0,0 @@ -/** - * Blog Post CTA Component - * Inspired by Vercel's blog design - contextual call-to-action modules - * - * Provides end-of-article product CTAs to help convert readers into users. - */ - -import Link from "next/link" -import { ArrowRight, Sparkles, Code2, GitPullRequest } from "lucide-react" -import { Button } from "@/components/ui/button" -import { EXTERNAL_LINKS } from "@/lib/constants" - -interface CTALink { - label: string - href: string - description?: string - external?: boolean -} - -interface BlogPostCTAProps { - /** The main headline for the CTA module */ - headline?: string - /** Description text below the headline */ - description?: string - /** Primary CTA button text */ - primaryButtonText?: string - /** Primary CTA button link */ - primaryButtonHref?: string - /** Secondary CTA button text */ - secondaryButtonText?: string - /** Secondary CTA button link */ - secondaryButtonHref?: string - /** Optional list of related links to show */ - links?: CTALink[] - /** Variant style for the CTA */ - variant?: "default" | "extension" | "cloud" | "enterprise" -} - -const variantConfig = { - // Default prioritizes Cloud sign-up with workflow-truth messaging - default: { - headline: "Stop being the human glue between PRs", - description: - "Cloud Agents review code, catch issues, and suggest fixes before you open the diff. You review the results, not the process.", - primaryText: "Try Cloud Free", - primaryHref: EXTERNAL_LINKS.CLOUD_APP_SIGNUP_HOME, - secondaryText: "See How It Works", - secondaryHref: "/cloud", - icon: Sparkles, - }, - extension: { - headline: "Stop copy-pasting between terminal and chat", - description: - "The agent runs commands, sees the output, and iterates until the tests pass. You review the diff and approve.", - primaryText: "Install for VS Code", - primaryHref: EXTERNAL_LINKS.MARKETPLACE, - secondaryText: "View Docs", - secondaryHref: EXTERNAL_LINKS.DOCUMENTATION, - icon: Code2, - }, - cloud: { - headline: "Let Cloud Agents handle the review queue", - description: - "PR Reviewer checks out your branch, runs your linters, and leaves inline suggestions. You decide what to merge.", - primaryText: "Start Free", - primaryHref: EXTERNAL_LINKS.CLOUD_APP_SIGNUP_HOME, - secondaryText: "View Pricing", - secondaryHref: "/pricing", - icon: Sparkles, - }, - enterprise: { - headline: "Thinking about security, compliance, or adoption?", - description: - "We're explicit about data handling, control boundaries, and what runs where. Talk to us about your constraints.", - primaryText: "Talk to Sales", - primaryHref: "/enterprise", - secondaryText: "View Trust Center", - secondaryHref: EXTERNAL_LINKS.SECURITY, - icon: GitPullRequest, - }, -} - -/** - * A contextual CTA module for blog posts - * Inspired by Vercel's "Get started" modules at the end of blog posts - */ -export function BlogPostCTA({ - headline, - description, - primaryButtonText, - primaryButtonHref, - secondaryButtonText, - secondaryButtonHref, - links, - variant = "default", -}: BlogPostCTAProps) { - const config = variantConfig[variant] - const Icon = config.icon - - const finalHeadline = headline ?? config.headline - const finalDescription = description ?? config.description - const finalPrimaryText = primaryButtonText ?? config.primaryText - const finalPrimaryHref = primaryButtonHref ?? config.primaryHref - const finalSecondaryText = secondaryButtonText ?? config.secondaryText - const finalSecondaryHref = secondaryButtonHref ?? config.secondaryHref - - const isExternalPrimary = finalPrimaryHref.startsWith("http") - const isExternalSecondary = finalSecondaryHref.startsWith("http") - - return ( -
-
- {/* Icon */} -
- -
- - {/* Content */} -
-

{finalHeadline}

-

{finalDescription}

- - {/* Links list (optional, Vercel-style numbered list) */} - {links && links.length > 0 && ( -
    - {links.map((link, index) => ( -
  1. - - {index + 1} - -
    - {link.external ? ( - - {link.label} - - ) : ( - - {link.label} - - )} - {link.description && ( - — {link.description} - )} -
    -
  2. - ))} -
- )} - - {/* Action buttons */} -
- {isExternalPrimary ? ( - - ) : ( - - )} - - {isExternalSecondary ? ( - - ) : ( - - )} -
-
-
-
- ) -} - -/** - * Get Started links component (Vercel-style numbered list) - * Can be used standalone or within BlogPostCTA - */ -export function GetStartedLinks({ links }: { links: CTALink[] }) { - return ( -
-

Get started

-
    - {links.map((link, index) => ( -
  1. - - {index + 1} - -
    - {link.external ? ( - - {link.label} - - ) : ( - - {link.label} - - )} - {link.description && — {link.description}} -
    -
  2. - ))} -
-
- ) -}