From 7971bb745179f77034367cf8b7fce7bfc2374a59 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Thu, 4 Dec 2025 12:27:20 +0000 Subject: [PATCH 1/7] Removes Pro, restructures pricing page --- apps/web-roo-code/src/app/page.tsx | 3 +- apps/web-roo-code/src/app/pricing/page.tsx | 178 +++++++++------------ 2 files changed, 82 insertions(+), 99 deletions(-) diff --git a/apps/web-roo-code/src/app/page.tsx b/apps/web-roo-code/src/app/page.tsx index f7ac47cf93e..dde776c4ba9 100644 --- a/apps/web-roo-code/src/app/page.tsx +++ b/apps/web-roo-code/src/app/page.tsx @@ -21,7 +21,8 @@ export default async function Home() {
-
+ {/*
*/} +

diff --git a/apps/web-roo-code/src/app/pricing/page.tsx b/apps/web-roo-code/src/app/pricing/page.tsx index 664f0ea9043..afb33406766 100644 --- a/apps/web-roo-code/src/app/pricing/page.tsx +++ b/apps/web-roo-code/src/app/pricing/page.tsx @@ -1,17 +1,16 @@ -import { Users, Building2, ArrowRight, Star, LucideIcon, Check, Cloud, PlugZap } from "lucide-react" +import { Users, ArrowRight, LucideIcon, Check, PlugZap, SquareTerminal, User, CornerRightDown } from "lucide-react" import type { Metadata } from "next" import Link from "next/link" import { Button } from "@/components/ui" import { AnimatedBackground } from "@/components/homepage" -import { ContactForm } from "@/components/enterprise/contact-form" import { SEO } from "@/lib/seo" import { ogImageUrl } from "@/lib/og" import { EXTERNAL_LINKS } from "@/lib/constants" -const TITLE = "Roo Code Cloud Pricing" +const TITLE = "Roo Code Pricing" const DESCRIPTION = - "Simple, transparent pricing for Roo Code Cloud. The VS Code extension is free forever. Choose the cloud plan that fits your needs." + "Simple, transparent pricing for all Roo Code products. The VS Code extension is free forever. Choose the cloud plan that fits your needs." const OG_DESCRIPTION = "" const PATH = "/pricing" @@ -61,6 +60,7 @@ interface PricingTier { name: string icon: LucideIcon price: string + priceSuffix: string period?: string creditPrice?: string trial?: string @@ -70,57 +70,53 @@ interface PricingTier { cta: { text: string href?: string - isContactForm?: boolean } } const pricingTiers: PricingTier[] = [ { - name: "Cloud Free", - icon: Cloud, - price: "$0", - description: "For folks just getting started", - features: [ - "Token usage analytics", - "Access to the Roo Code Cloud Provider, including early access to free stealth models", - "Follow your tasks from anywhere", - "Share tasks with friends and co-workers", - "Community support", - ], + name: "VS Code Extension", + icon: SquareTerminal, + price: "Free", + priceSuffix: "inference", + description: "The best local coding agent", + features: ["Unlimited local use", "Bring your own model", "Powerful, extensible modes", "Community support"], cta: { - text: "Get started", - href: EXTERNAL_LINKS.CLOUD_APP_SIGNUP, + text: "Install Now", + href: EXTERNAL_LINKS.MARKETPLACE, }, }, { - name: "Cloud Pro", - icon: Star, - price: "$20", + name: "Cloud Free", + icon: User, + price: "$0", period: "/mo", - trial: "Free for 14 days, then", + priceSuffix: "credits", creditPrice: `$${PRICE_CREDITS}`, - description: "For pro Roo coders", - featuresIntro: "Everything in Free +", + description: "For AI-forward engineers", features: [ - "Cloud Agents: Coder, Explainer, Planner, Reviewer, Fixer and more", - "Start tasks from Slack", - "Roomote Control: Start, stop and control extension tasks from anywhere", - "Paid support", + "Access to Cloud Agents: fully autonomous development you can call from Slack, Github and the web", + "Access to the Roo Code Cloud Provider", + "Follow your tasks from anywhere", + "Share tasks with friends and co-workers", + "Token usage analytics", + "Professional support", ], cta: { text: "Get started", - href: EXTERNAL_LINKS.CLOUD_APP_SIGNUP + "?redirect_url=/billing", + href: EXTERNAL_LINKS.CLOUD_APP_SIGNUP, }, }, { name: "Cloud Team", icon: Users, price: "$99", + priceSuffix: "credits", period: "/mo", creditPrice: `$${PRICE_CREDITS}`, trial: "Free for 14 days, then", description: "For AI-forward teams", - featuresIntro: "Everything in Pro +", + featuresIntro: "Everything in Free +", features: ["Unlimited users (no per-seat cost)", "Shared configuration & policies", "Centralized billing"], cta: { text: "Get started", @@ -138,44 +134,15 @@ export default function PricingPage() {
-

Roo Code Cloud Pricing

-

- Simple, transparent pricing that scales with your needs. -
- No inference markups. Free 14-day trials to kick the tires. +

Roo Code Pricing

+

+ For all of our products: the Roo Code VS Code Extension, Roo Code Cloud and the Roo Code + Cloud inference Provider.

-
-
-

- The Roo Code extension is totally free! - But Cloud takes you so much further. -

-
-
- -
-

- Roo Code Provider - -

-
-

- On any plan, you can bring your own provider key or use the built-in Roo Code Cloud provider. -

-

- We offer a select mix of tested state of the art closed and open weight LLMs for you to choose, - with no markup. - - See detailed pricing - -

-
-
- {/* Pricing Tiers */}
@@ -185,8 +152,8 @@ export default function PricingPage() { return (
-
+ className="relative p-6 flex flex-col justify-start bg-background border rounded-2xl outline-1 outline-border transition-all hover:shadow-lg hover:outline-6"> +

{tier.name}

@@ -198,7 +165,7 @@ export default function PricingPage() {

{tier.featuresIntro} 

-
    +
      {tier.features.map((feature) => (
    • @@ -212,56 +179,58 @@ export default function PricingPage() {

      {tier.price} - {tier.period} + prepaid credits + {tier.period} + {tier.priceSuffix} +

      -

      +

      {tier.creditPrice && ( <> - Cloud Agents: {tier.creditPrice}/hour if used + Cloud Agents: {tier.creditPrice}/hour in credits
      )} Inference:{" "} - - Roo Provider pricing + + Roo Provider {" "} - or{" "} - - BYOK + credits or{" "} + + BYOM

      - {tier.cta.isContactForm ? ( - - ) : ( - - )} +
) })}
-
-

- - Need SAML, advanced security, custom integrations or terms? Enterprise is for you. - - Talk to Sales - - . -

+
+

+ Roo Code Provider + +

+
+

+ On any plan, you can bring your own LLM provider key or use the built-in Roo Code Cloud + provider. +

+

+ We offer curated models, from free stealth models to the state-of-the-art with no markup. + + See per model pricing + +

+
@@ -337,6 +306,19 @@ export default function PricingPage() { reflected in your next billing cycle.

+
+

+ What if I have enterprise-level needs like SAML/SCIM, large-scale deployments, specific + integrations and custom terms? +

+

+ We have an Enterprise plan which can be a fit. Please{" "} + + reach out to our sales team + {" "} + to discuss it. +

+
From 1c54863caed588d72e39c706cde299072890ff66 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Thu, 4 Dec 2025 13:08:31 +0000 Subject: [PATCH 2/7] Solves provider/credits --- apps/web-roo-code/src/app/pricing/page.tsx | 70 ++++++++++++---------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/apps/web-roo-code/src/app/pricing/page.tsx b/apps/web-roo-code/src/app/pricing/page.tsx index afb33406766..1538c9b0954 100644 --- a/apps/web-roo-code/src/app/pricing/page.tsx +++ b/apps/web-roo-code/src/app/pricing/page.tsx @@ -1,4 +1,4 @@ -import { Users, ArrowRight, LucideIcon, Check, PlugZap, SquareTerminal, User, CornerRightDown } from "lucide-react" +import { Users, ArrowRight, LucideIcon, Check, SquareTerminal, CornerRightDown, Cloud } from "lucide-react" import type { Metadata } from "next" import Link from "next/link" @@ -88,12 +88,13 @@ const pricingTiers: PricingTier[] = [ }, { name: "Cloud Free", - icon: User, + icon: Cloud, price: "$0", period: "/mo", priceSuffix: "credits", creditPrice: `$${PRICE_CREDITS}`, description: "For AI-forward engineers", + featuresIntro: "Go beyond the extension with", features: [ "Access to Cloud Agents: fully autonomous development you can call from Slack, Github and the web", "Access to the Roo Code Cloud Provider", @@ -103,7 +104,7 @@ const pricingTiers: PricingTier[] = [ "Professional support", ], cta: { - text: "Get started", + text: "Sign up", href: EXTERNAL_LINKS.CLOUD_APP_SIGNUP, }, }, @@ -119,7 +120,7 @@ const pricingTiers: PricingTier[] = [ featuresIntro: "Everything in Free +", features: ["Unlimited users (no per-seat cost)", "Shared configuration & policies", "Centralized billing"], cta: { - text: "Get started", + text: "Sign up", href: EXTERNAL_LINKS.CLOUD_APP_SIGNUP + "?redirect_url=/billing", }, }, @@ -131,7 +132,7 @@ export default function PricingPage() { {/* Hero Section */} -
+

Roo Code Pricing

@@ -146,19 +147,21 @@ export default function PricingPage() { {/* Pricing Tiers */}
-
+
{pricingTiers.map((tier) => { const Icon = tier.icon return (
-
+ className="relative group p-6 flex flex-col justify-start bg-background rounded-2xl outline outline-2 outline-border/50 hover:outline-8 transition-all shadow-xl hover:shadow-2xl hover:outline-6"> +

{tier.name}

-
-

{tier.description}

+

{tier.description}

+
+
+
@@ -177,7 +180,7 @@ export default function PricingPage() {

{tier.trial}

-

+

{tier.price} {tier.period} + {tier.priceSuffix} @@ -191,7 +194,7 @@ export default function PricingPage() { )} Inference:{" "} - + Roo Provider {" "} credits or{" "} @@ -206,30 +209,35 @@ export default function PricingPage() { + + {/*

*/} +
) })}
-
-
-

- Roo Code Provider - -

-
-

- On any plan, you can bring your own LLM provider key or use the built-in Roo Code Cloud - provider. -

-

- We offer curated models, from free stealth models to the state-of-the-art with no markup. - - See per model pricing - -

+
+
+

Roo Code Provider

+
+

+ On any plan, you can use your own LLM provider API key or use the built-in Roo Code + Cloud provider – curated models to work with Roo with no markup, including the + latest Gemini, GPT and Claude. Paid with credits. + + See per model pricing. + +

+
+
+
+

Credits

+

+ Credits are pre-paid, in dollars, and are deducted with usage for inference and Cloud + Agent runs. You're always in control of your spend, no surprises. +

+
From 0fc83d761ca783ed208559b7a8f4169f79ddda92 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Thu, 4 Dec 2025 13:50:40 +0000 Subject: [PATCH 3/7] Update apps/web-roo-code/src/app/pricing/page.tsx Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> --- apps/web-roo-code/src/app/pricing/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-roo-code/src/app/pricing/page.tsx b/apps/web-roo-code/src/app/pricing/page.tsx index 1538c9b0954..361bc3f7882 100644 --- a/apps/web-roo-code/src/app/pricing/page.tsx +++ b/apps/web-roo-code/src/app/pricing/page.tsx @@ -217,7 +217,7 @@ export default function PricingPage() { })}
-
+

Roo Code Provider

From 31538c683006ec145d650da3f6f96a1016377099 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Thu, 4 Dec 2025 14:18:44 +0000 Subject: [PATCH 4/7] Updates agent landing pages to not mention a trial that doesn't exist --- apps/web-roo-code/src/app/pr-fixer/content-a.tsx | 4 ++-- apps/web-roo-code/src/app/reviewer/content-b.ts | 4 ++-- apps/web-roo-code/src/app/reviewer/content.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/web-roo-code/src/app/pr-fixer/content-a.tsx b/apps/web-roo-code/src/app/pr-fixer/content-a.tsx index cce8ed24658..78838f70d14 100644 --- a/apps/web-roo-code/src/app/pr-fixer/content-a.tsx +++ b/apps/web-roo-code/src/app/pr-fixer/content-a.tsx @@ -33,8 +33,8 @@ export const content: AgentPageContent = { ], }, cta: { - buttonText: "Start 14-day Free Trial", - disclaimer: "(cancel anytime)", + buttonText: "Try now for free", + disclaimer: "", }, }, howItWorks: { diff --git a/apps/web-roo-code/src/app/reviewer/content-b.ts b/apps/web-roo-code/src/app/reviewer/content-b.ts index 988dee73a14..c00522140e4 100644 --- a/apps/web-roo-code/src/app/reviewer/content-b.ts +++ b/apps/web-roo-code/src/app/reviewer/content-b.ts @@ -32,8 +32,8 @@ export const content: AgentPageContent = { ], }, cta: { - buttonText: "Start 14-day Free Trial", - disclaimer: "(cancel anytime)", + buttonText: "Try now for free", + disclaimer: "", }, }, howItWorks: { diff --git a/apps/web-roo-code/src/app/reviewer/content.ts b/apps/web-roo-code/src/app/reviewer/content.ts index 988dee73a14..c00522140e4 100644 --- a/apps/web-roo-code/src/app/reviewer/content.ts +++ b/apps/web-roo-code/src/app/reviewer/content.ts @@ -32,8 +32,8 @@ export const content: AgentPageContent = { ], }, cta: { - buttonText: "Start 14-day Free Trial", - disclaimer: "(cancel anytime)", + buttonText: "Try now for free", + disclaimer: "", }, }, howItWorks: { From 7838e9c4d0262a3e3cfb4b3a24771489fd7e3a16 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Thu, 4 Dec 2025 14:27:51 +0000 Subject: [PATCH 5/7] Updates agent-specific landing pages to reflect new home and trial --- apps/web-roo-code/src/app/page.tsx | 3 +-- apps/web-roo-code/src/app/pr-fixer/content-a.tsx | 2 +- apps/web-roo-code/src/app/reviewer/content-b.ts | 2 +- apps/web-roo-code/src/app/reviewer/content.ts | 2 +- .../src/app/shared/AgentLandingContent.tsx | 11 ++++++++--- .../src/components/homepage/use-examples-section.tsx | 12 ++++++++++-- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/apps/web-roo-code/src/app/page.tsx b/apps/web-roo-code/src/app/page.tsx index dde776c4ba9..f7ac47cf93e 100644 --- a/apps/web-roo-code/src/app/page.tsx +++ b/apps/web-roo-code/src/app/page.tsx @@ -21,8 +21,7 @@ export default async function Home() {
- {/*
*/} -
+

diff --git a/apps/web-roo-code/src/app/pr-fixer/content-a.tsx b/apps/web-roo-code/src/app/pr-fixer/content-a.tsx index 78838f70d14..e48bbf9efed 100644 --- a/apps/web-roo-code/src/app/pr-fixer/content-a.tsx +++ b/apps/web-roo-code/src/app/pr-fixer/content-a.tsx @@ -89,6 +89,6 @@ export const content: AgentPageContent = { cta: { heading: "Ship fixes, not follow-ups.", description: "Let Roo Code's PR Fixer turn your review feedback into clean, ready-to-merge commits.", - buttonText: "Start 14-day Free Trial", + buttonText: "Try now for free", }, } diff --git a/apps/web-roo-code/src/app/reviewer/content-b.ts b/apps/web-roo-code/src/app/reviewer/content-b.ts index c00522140e4..2176a012012 100644 --- a/apps/web-roo-code/src/app/reviewer/content-b.ts +++ b/apps/web-roo-code/src/app/reviewer/content-b.ts @@ -87,6 +87,6 @@ export const content: AgentPageContent = { cta: { heading: "Ready for better code reviews?", description: "Start finding the issues that matter with AI-powered reviews built for depth, not cost-cutting.", - buttonText: "Start 14-day Free Trial", + buttonText: "Try now for free", }, } diff --git a/apps/web-roo-code/src/app/reviewer/content.ts b/apps/web-roo-code/src/app/reviewer/content.ts index c00522140e4..2176a012012 100644 --- a/apps/web-roo-code/src/app/reviewer/content.ts +++ b/apps/web-roo-code/src/app/reviewer/content.ts @@ -87,6 +87,6 @@ export const content: AgentPageContent = { cta: { heading: "Ready for better code reviews?", description: "Start finding the issues that matter with AI-powered reviews built for depth, not cost-cutting.", - buttonText: "Start 14-day Free Trial", + buttonText: "Try now for free", }, } diff --git a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx b/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx index 8d99c033558..669d2314d81 100644 --- a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx +++ b/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx @@ -16,8 +16,7 @@ import Image from "next/image" import Link from "next/link" import { Button } from "@/components/ui" -import { AnimatedBackground } from "@/components/homepage" -import { AgentCarousel } from "@/components/reviewer/agent-carousel" +import { AnimatedBackground, UseExamplesSection } from "@/components/homepage" import { EXTERNAL_LINKS } from "@/lib/constants" import { type AgentPageContent, type IconName } from "./agent-page-content" @@ -127,6 +126,9 @@ export function AgentLandingContent({ content }: { content: AgentPageContent }) {/* How It Works Section */}
+
+
+
@@ -161,6 +163,9 @@ export function AgentLandingContent({ content }: { content: AgentPageContent }) {/* Why Better Section */}
+
+
+
@@ -198,7 +203,7 @@ export function AgentLandingContent({ content }: { content: AgentPageContent })
{/* Agent Carousel */} - + {/* CTA Section */}
diff --git a/apps/web-roo-code/src/components/homepage/use-examples-section.tsx b/apps/web-roo-code/src/components/homepage/use-examples-section.tsx index 9d226254139..f1170321df2 100644 --- a/apps/web-roo-code/src/components/homepage/use-examples-section.tsx +++ b/apps/web-roo-code/src/components/homepage/use-examples-section.tsx @@ -372,7 +372,7 @@ function DesktopUseCaseCard({ item }: { item: PositionedUseCase }) { ) } -export function UseExamplesSection() { +export function UseExamplesSection({ agentTitle = false }: { agentTitle?: boolean }) { const positionedItems = useMemo(() => distributeItems(USE_CASES), []) const [showAllMobile, setShowAllMobile] = useState(false) @@ -384,7 +384,15 @@ export function UseExamplesSection() {

- The AI team to help your entire human team + {agentTitle ? ( + <> + Part of the AI team to help your entire human team + + ) : ( + <> + The AI team to help your entire human team + + )}

Developers, PMs, Designers, Customer Success: everyone moves faster and more independently with From 33749935123b9562745bf305002fa4865573b7b8 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Thu, 4 Dec 2025 14:33:33 +0000 Subject: [PATCH 6/7] Indicate the agent landing page the user came from --- apps/web-roo-code/src/app/pr-fixer/content-a.tsx | 1 + apps/web-roo-code/src/app/reviewer/content-b.ts | 1 + apps/web-roo-code/src/app/reviewer/content.ts | 1 + apps/web-roo-code/src/app/shared/AgentLandingContent.tsx | 6 +++--- apps/web-roo-code/src/app/shared/agent-page-content.ts | 1 + 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/web-roo-code/src/app/pr-fixer/content-a.tsx b/apps/web-roo-code/src/app/pr-fixer/content-a.tsx index e48bbf9efed..1935ca27740 100644 --- a/apps/web-roo-code/src/app/pr-fixer/content-a.tsx +++ b/apps/web-roo-code/src/app/pr-fixer/content-a.tsx @@ -35,6 +35,7 @@ export const content: AgentPageContent = { cta: { buttonText: "Try now for free", disclaimer: "", + tracking: "&agent=pr-fixer", }, }, howItWorks: { diff --git a/apps/web-roo-code/src/app/reviewer/content-b.ts b/apps/web-roo-code/src/app/reviewer/content-b.ts index 2176a012012..0c2f76a2f53 100644 --- a/apps/web-roo-code/src/app/reviewer/content-b.ts +++ b/apps/web-roo-code/src/app/reviewer/content-b.ts @@ -34,6 +34,7 @@ export const content: AgentPageContent = { cta: { buttonText: "Try now for free", disclaimer: "", + tracking: "&agent=reviewer", }, }, howItWorks: { diff --git a/apps/web-roo-code/src/app/reviewer/content.ts b/apps/web-roo-code/src/app/reviewer/content.ts index 2176a012012..0c2f76a2f53 100644 --- a/apps/web-roo-code/src/app/reviewer/content.ts +++ b/apps/web-roo-code/src/app/reviewer/content.ts @@ -34,6 +34,7 @@ export const content: AgentPageContent = { cta: { buttonText: "Try now for free", disclaimer: "", + tracking: "&agent=reviewer", }, }, howItWorks: { diff --git a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx b/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx index 669d2314d81..f3274b8269b 100644 --- a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx +++ b/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx @@ -92,7 +92,7 @@ export function AgentLandingContent({ content }: { content: AgentPageContent }) className="w-full sm:w-auto backdrop-blur-sm border hover:shadow-[0_0_20px_rgba(59,130,246,0.5)] transition-all duration-300" asChild> @@ -219,11 +219,11 @@ export function AgentLandingContent({ content }: { content: AgentPageContent }) className="bg-black text-white hover:bg-gray-800 hover:shadow-lg hover:shadow-black/20 dark:bg-white dark:text-black dark:hover:bg-gray-200 dark:hover:shadow-white/20 transition-all duration-300" asChild> - {content.cta.buttonText} + {content.hero.cta.buttonText} diff --git a/apps/web-roo-code/src/app/shared/agent-page-content.ts b/apps/web-roo-code/src/app/shared/agent-page-content.ts index 3a22c2a851b..2ee31e630c9 100644 --- a/apps/web-roo-code/src/app/shared/agent-page-content.ts +++ b/apps/web-roo-code/src/app/shared/agent-page-content.ts @@ -45,6 +45,7 @@ export interface AgentPageContent { cta: { buttonText: string disclaimer: string + tracking: string } } howItWorks: { From 44074ce1913312129f22d157802402b698db8de1 Mon Sep 17 00:00:00 2001 From: Bruno Bergher Date: Thu, 4 Dec 2025 14:37:06 +0000 Subject: [PATCH 7/7] Clean up the carousel --- .../src/app/shared/AgentLandingContent.tsx | 1 - .../src/app/shared/agent-page-content.ts | 1 - .../components/reviewer/agent-carousel.tsx | 172 ------------------ 3 files changed, 174 deletions(-) delete mode 100644 apps/web-roo-code/src/components/reviewer/agent-carousel.tsx diff --git a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx b/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx index f3274b8269b..4db166b9199 100644 --- a/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx +++ b/apps/web-roo-code/src/app/shared/AgentLandingContent.tsx @@ -202,7 +202,6 @@ export function AgentLandingContent({ content }: { content: AgentPageContent })

- {/* Agent Carousel */} {/* CTA Section */} diff --git a/apps/web-roo-code/src/app/shared/agent-page-content.ts b/apps/web-roo-code/src/app/shared/agent-page-content.ts index 2ee31e630c9..01a64e85472 100644 --- a/apps/web-roo-code/src/app/shared/agent-page-content.ts +++ b/apps/web-roo-code/src/app/shared/agent-page-content.ts @@ -21,7 +21,6 @@ export type IconName = * serialization from Server Components to Client Components. */ export interface AgentPageContent { - /** The agent name used for the carousel display */ agentName: string hero: { /** Optional icon name to display in the hero section */ diff --git a/apps/web-roo-code/src/components/reviewer/agent-carousel.tsx b/apps/web-roo-code/src/components/reviewer/agent-carousel.tsx deleted file mode 100644 index a0b05702c80..00000000000 --- a/apps/web-roo-code/src/components/reviewer/agent-carousel.tsx +++ /dev/null @@ -1,172 +0,0 @@ -"use client" - -import { useEffect } from "react" -import { motion } from "framer-motion" -import useEmblaCarousel from "embla-carousel-react" -import AutoPlay from "embla-carousel-autoplay" -import { - Bug, - FileText, - Gauge, - GitPullRequest, - Languages, - Microscope, - PocketKnife, - TestTube, - Wrench, - type LucideIcon, -} from "lucide-react" - -// AI Agent types for the carousel -interface AIAgent { - icon: LucideIcon - name: string - page?: string -} - -const aiAgents: AIAgent[] = [ - { icon: GitPullRequest, name: "PR Reviewer", page: "/reviewer" }, - { icon: Wrench, name: "PR Fixer", page: "/pr-fixer" }, - { icon: PocketKnife, name: "Generalist" }, - { icon: Bug, name: "Bug Fixer" }, - { icon: TestTube, name: "Test Engineer" }, - { icon: Microscope, name: "Security Auditor" }, - { icon: Gauge, name: "Performance Optimizer" }, - { icon: FileText, name: "Documentation Writer" }, - { icon: Languages, name: "String Translator" }, -] - -export function AgentCarousel({ currentAgent = "" }: { currentAgent?: string } = {}) { - const [emblaRef, emblaApi] = useEmblaCarousel( - { - loop: true, - align: "start", - watchDrag: true, - dragFree: false, - containScroll: false, - duration: 10000, - }, - [ - AutoPlay({ - playOnInit: true, - delay: 0, - stopOnInteraction: false, - stopOnMouseEnter: false, - stopOnFocusIn: false, - }), - ], - ) - - // Continuous scrolling effect - useEffect(() => { - if (!emblaApi) return - - const autoPlay = emblaApi?.plugins()?.autoPlay as - | { - play?: () => void - } - | undefined - - if (autoPlay?.play) { - autoPlay.play() - } - - // Set up continuous scrolling - const interval = setInterval(() => { - if (emblaApi) { - emblaApi.scrollNext() - } - }, 30) // Smooth continuous scroll - - return () => clearInterval(interval) - }, [emblaApi]) - - const containerVariants = { - hidden: { opacity: 0 }, - visible: { - opacity: 1, - transition: { - duration: 0.6, - ease: [0.21, 0.45, 0.27, 0.9], - }, - }, - } - - // Duplicate the agents array for seamless infinite scroll - const displayAgents = [...aiAgents, ...aiAgents] - - return ( -
-
-
-
-

- The first members of a whole new team -

-

- Architecture, coding, reviewing, testing, debugging, documenting, designing – almost - everything we do today is mostly through our agents. Now we're bringing them to you. -

-

- Roo's {currentAgent} isn't yet another single-purpose tool to add to your already - complicated stack. It's the first member of your AI-powered development team. More - agents are shipping soon. -

-
-
- -
- - {/* Gradient Overlays */} -
-
- - {/* Embla Carousel Container */} -
-
- {displayAgents.map((agent, index) => { - const Icon = agent.icon - return ( -
-
-
- -

- {agent.page ? ( - - {agent.name} - - ) : ( - - {agent.name} - - )} -

-
-
-
- ) - })} -
-
- -
-
-
- ) -}