From 96308c467417ef1e3738909f44c288abf7f054c3 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Sun, 26 Oct 2025 02:33:31 +0000 Subject: [PATCH 1/2] feat: add Google Ads conversion tracking to reviewer page --- .../src/app/reviewer/ReviewerContent.tsx | 217 ++++++++++++++++++ apps/web-roo-code/src/app/reviewer/page.tsx | 210 +---------------- .../src/lib/analytics/google-ads.ts | 17 ++ 3 files changed, 236 insertions(+), 208 deletions(-) create mode 100644 apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx create mode 100644 apps/web-roo-code/src/lib/analytics/google-ads.ts diff --git a/apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx b/apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx new file mode 100644 index 00000000000..9a96c2cb4d8 --- /dev/null +++ b/apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx @@ -0,0 +1,217 @@ +"use client" + +import { ArrowRight, Blocks, BookMarked, ListChecks, LucideIcon } from "lucide-react" +import Image from "next/image" + +import { Button } from "@/components/ui" +import { AnimatedBackground } from "@/components/homepage" +import { AgentCarousel } from "@/components/reviewer/agent-carousel" +import { EXTERNAL_LINKS } from "@/lib/constants" +import { trackGoogleAdsConversion } from "@/lib/analytics/google-ads" + +interface Feature { + icon: LucideIcon + title: string + description: string | React.ReactNode + logos?: string[] +} + +const howItWorks: Feature[] = [ + { + icon: Blocks, + title: "Our agents, your provider keys", + description: ( + <> +

+ We orchestrate the review, optimize the hell out of the prompts, integrate with GitHub, keep you + properly posted. +

+

We're thoughtful about token usage, but not incentivized to skimp to grow our margins.

+ + ), + }, + { + icon: ListChecks, + title: "Advanced reasoning and workflows", + description: + "We optimize for state-of-the-art reasoning models and leverage powerful workflows (Diff analysis → Context Gathering → Impact Mapping → Contract checks) to produce crisp, actionable comments at the right level.", + }, + { + icon: BookMarked, + title: "Fully repository-aware", + description: + "Reviews traverse code ownership, dependency graphs, and historical patterns to surface risk and deviations, not noise.", + }, +] + +// Workaround for next/image choking on these for some reason +import hero from "/public/heroes/agent-reviewer.png" + +export function ReviewerContent() { + return ( + <> +
+ +
+
+
+
+

+ Get comprehensive code reviews that save you time, not tokens. +

+
+

+ Regular AI code review tools cap model usage to protect their margins from fixed + monthly prices. That leads to shallow prompts, limited context, and missed + issues. +

+

+ Roo Code's PR Reviewer flips the script: you bring your own key and + leverage it to the max – to find real issues, increase code quality and keep + your PR queue moving. +

+
+
+
+ + + (cancel anytime) + +
+
+
+
+
+ Example of a code review generated by Roo Code PR Reviewer +
+
+
+
+
+
+ +
+
+
+
+

+ Why Roo's PR Reviewer is so much better +

+
+
+ +
+
    + {howItWorks.map((feature, index) => { + const Icon = feature.icon + return ( +
  • + +

    + {feature.title} +

    +
    + {feature.description} +
    + {feature.logos && ( +
    + {feature.logos.map((logo) => ( + {`${logo} + ))} +
    + )} +
  • + ) + })} +
+
+
+
+ +
+
+
+
+

+ The first member 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 PR Reviewer 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. +

+
+
+ +
+ +
+
+
+ + {/* CTA Section */} +
+
+
+

Stop wasting time.

+

+ Give Roo Code's PR Reviewer your model key and turn painful reviews into a tangible + quality advantage. +

+
+ +
+
+
+
+ + ) +} diff --git a/apps/web-roo-code/src/app/reviewer/page.tsx b/apps/web-roo-code/src/app/reviewer/page.tsx index 5f0cc3fe52a..7f7cce862a6 100644 --- a/apps/web-roo-code/src/app/reviewer/page.tsx +++ b/apps/web-roo-code/src/app/reviewer/page.tsx @@ -1,13 +1,8 @@ -import { ArrowRight, Blocks, BookMarked, ListChecks, LucideIcon } from "lucide-react" import type { Metadata } from "next" -import { Button } from "@/components/ui" -import { AnimatedBackground } from "@/components/homepage" -import { AgentCarousel } from "@/components/reviewer/agent-carousel" import { SEO } from "@/lib/seo" import { ogImageUrl } from "@/lib/og" -import { EXTERNAL_LINKS } from "@/lib/constants" -import Image from "next/image" +import { ReviewerContent } from "./ReviewerContent" const TITLE = "PR Reviewer" const DESCRIPTION = @@ -61,207 +56,6 @@ export const metadata: Metadata = { ], } -interface Feature { - icon: LucideIcon - title: string - description: string | React.ReactNode - logos?: string[] -} - -const howItWorks: Feature[] = [ - { - icon: Blocks, - title: "Our agents, your provider keys", - description: ( - <> -

- We orchestrate the review, optimize the hell out of the prompts, integrate with GitHub, keep you - properly posted. -

-

We're thoughtful about token usage, but not incentivized to skimp to grow our margins.

- - ), - }, - { - icon: ListChecks, - title: "Advanced reasoning and workflows", - description: - "We optimize for state-of-the-art reasoning models and leverage powerful workflows (Diff analysis → Context Gathering → Impact Mapping → Contract checks) to produce crisp, actionable comments at the right level.", - }, - { - icon: BookMarked, - title: "Fully repository-aware", - description: - "Reviews traverse code ownership, dependency graphs, and historical patterns to surface risk and deviations, not noise.", - }, -] - -// Workaround for next/image choking on these for some reason -import hero from "/public/heroes/agent-reviewer.png" - export default function AgentReviewerPage() { - return ( - <> -
- -
-
-
-
-

- Get comprehensive code reviews that save you time, not tokens. -

-
-

- Regular AI code review tools cap model usage to protect their margins from fixed - monthly prices. That leads to shallow prompts, limited context, and missed - issues. -

-

- Roo Code's PR Reviewer flips the script: you bring your own key and leverage - it to the max – to find real issues, increase code quality and keep your PR - queue moving. -

-
-
-
- - - (cancel anytime) - -
-
-
-
-
- Example of a code review generated by Roo Code PR Reviewer -
-
-
-
-
-
- -
-
-
-
-

- Why Roo's PR Reviewer is so much better -

-
-
- -
-
    - {howItWorks.map((feature, index) => { - const Icon = feature.icon - return ( -
  • - -

    - {feature.title} -

    -
    - {feature.description} -
    - {feature.logos && ( -
    - {feature.logos.map((logo) => ( - {`${logo} - ))} -
    - )} -
  • - ) - })} -
-
-
-
- -
-
-
-
-

- The first member 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 PR Reviewer 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. -

-
-
- -
- -
-
-
- - {/* CTA Section */} -
-
-
-

Stop wasting time.

-

- Give Roo Code's PR Reviewer your model key and turn painful reviews into a tangible - quality advantage. -

-
- -
-
-
-
- - ) + return } diff --git a/apps/web-roo-code/src/lib/analytics/google-ads.ts b/apps/web-roo-code/src/lib/analytics/google-ads.ts new file mode 100644 index 00000000000..29ced92e99e --- /dev/null +++ b/apps/web-roo-code/src/lib/analytics/google-ads.ts @@ -0,0 +1,17 @@ +/** + * Google Ads conversion tracking utilities + */ + +/** + * Track a Google Ads conversion event + * This should only be called after user consent has been given + */ +export function trackGoogleAdsConversion() { + if (typeof window !== "undefined" && window.gtag) { + window.gtag("event", "conversion", { + send_to: "AW-17391954825/VtOZCJe_77MbEInXkOVA", + value: 10.0, + currency: "USD", + }) + } +} From 1c65f6fa5a03b91d1260668a099a85c01322f961 Mon Sep 17 00:00:00 2001 From: daniel-lxs Date: Sat, 25 Oct 2025 22:46:13 -0500 Subject: [PATCH 2/2] fix: add asChild prop to first button to prevent invalid HTML nesting --- apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx b/apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx index 9a96c2cb4d8..7abcea5ce04 100644 --- a/apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx +++ b/apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx @@ -75,7 +75,8 @@ export function ReviewerContent() {