Skip to content

feat(marketing): proof CTAs linking to /proof dashboard per sim24 pricing pushback#55

Merged
Gradata merged 1 commit intomainfrom
wt-proof-cta
Apr 15, 2026
Merged

feat(marketing): proof CTAs linking to /proof dashboard per sim24 pricing pushback#55
Gradata merged 1 commit intomainfrom
wt-proof-cta

Conversation

@Gradata
Copy link
Copy Markdown
Owner

@Gradata Gradata commented Apr 15, 2026

Summary

Motivation

Sim24: ~40% of agents pushed back on $50/user/month pricing. Most-liked comment (VP Eng): "Hard to justify without proof." The /proof endpoint + dashboard route exists; marketing wasn't linking to it.

Numbers used (ablation v4 closer)

  • 192 trials, 4 models × 16 tasks × 3 iters, blind Haiku 4.5 judge
  • Sonnet +7.8% preference adherence
  • Gemma4 +9.5% correctness, +11.1% quality
  • Min 2022 random-content control: -3 to -10% on 3 of 4 models

Test plan

  • pnpm build passes, 10 static pages, 0 TS errors
  • Visual check on preview deploy

Co-Authored-By: Gradata noreply@gradata.ai

…24 pricing pushback

Add secondary hero CTA (See the 192-trial ablation), link under KPI row on landing,
and contextual proof card in how-it-works after the graduation stages. All point to
site.proofUrl (app.gradata.ai/proof) so skeptical visitors can reach the live A/B
data one click from landing.

Co-Authored-By: Gradata <noreply@gradata.ai>
Copy link
Copy Markdown

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

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

Gradata has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 15, 2026

📝 Walkthrough
  • Added prominent proof CTAs across marketing pages linking to the /proof dashboard to address pricing objections from Sim24
  • Centralized proofUrl constant in marketing/src/lib/site.ts pointing to https://app.gradata.ai/proof
  • Hero component: Replaced "How it works" secondary button with "See the 192-trial ablation" CTA; added separate "How it works" link with muted styling
  • Landing page: Added CTA block displaying ablation trial results (Sonnet +7.8%, Gemma4 +9.5% correctness)
  • How-it-works page: Inserted new "See the ablation data" section featuring trial metrics and proof CTA
  • New public API property: site.proofUrl exported constant added to site object
  • Build validation: pnpm build passes with 10 static pages, zero TypeScript errors

Walkthrough

The PR introduces proof-of-concept call-to-action elements linking to an A/B test proof page across multiple marketing pages. A new proofUrl configuration constant is added, and hero and page components are updated with new CTA links directing users to ablation trial evidence.

Changes

Cohort / File(s) Summary
Proof URL Configuration & Hero Component
marketing/src/lib/site.ts, marketing/src/components/Hero.tsx
Added proofUrl constant to site config pointing to https://app.gradata.ai/proof. Updated Hero CTA to replace "How it works" link with dynamic proof URL link labeled "See the 192-trial ablation", and added separate "How it works" link with muted styling.
Marketing Pages
marketing/app/page.tsx, marketing/app/how-it-works/page.tsx
Added proof-related CTA elements to homepage and how-it-works page. Homepage includes anchor link to proof URL with A/B test metrics. How-it-works page inserts new GlassCard section between stage cards with ablation trial description (192 trials, model names, lift claims) and "Read the A/B proof" CTA.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Suggested labels

feature

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: adding prominent proof CTAs across marketing pages that link to the /proof dashboard in response to pricing objections.
Description check ✅ Passed The description is well-detailed and directly related to the changeset, explaining the motivation, specific changes, data, and test plan.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 wt-proof-cta

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

@coderabbitai coderabbitai Bot added the feature label Apr 15, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@marketing/app/how-it-works/page.tsx`:
- Line 106: The user-facing copy in marketing/app/how-it-works/page.tsx contains
the lowercase token "qwen14b"; update that string to the normalized product
casing "Qwen14B" in the sentence "192 trials across Sonnet, DeepSeek, qwen14b,
and Gemma4." and scan the same file for any other occurrences of "qwen14b" to
change them to "Qwen14B" so casing is consistent across the page copy.

In `@marketing/src/components/Hero.tsx`:
- Around line 35-40: Replace the plain anchor in the Hero component with Next.js
client-side navigation: import Link from 'next/link' and swap the <a
href="/how-it-works/"> element for a <Link href="/how-it-works/"> that carries
the same className and text content so the styling and behavior remain; ensure
you remove the raw anchor and let Link handle the navigation (in Next.js 13+ you
can put the className directly on Link).

In `@marketing/src/lib/site.ts`:
- Line 5: Replace the hard-coded proofUrl with a derived value computed from
appUrl so the CTA never drifts; locate the exported constants (appUrl and
proofUrl) in site.ts and set proofUrl by deriving its origin/path from appUrl
(e.g., using URL or string concat) instead of a separate literal, ensuring any
change to appUrl automatically updates proofUrl.
🪄 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: ASSERTIVE

Plan: Pro

Run ID: 801625f3-dbf8-40ab-b0b4-d6488779649b

📥 Commits

Reviewing files that changed from the base of the PR and between 52a735e and 35ab260.

📒 Files selected for processing (4)
  • marketing/app/how-it-works/page.tsx
  • marketing/app/page.tsx
  • marketing/src/components/Hero.tsx
  • marketing/src/lib/site.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: test (3.13)
  • GitHub Check: test (3.11)
  • GitHub Check: test (3.12)
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (1)
marketing/app/page.tsx (1)

36-43: Good CTA insertion and URL centralization.

This cleanly adds the proof entry point and correctly uses site.proofUrl as the shared source.

<GlassCard className="p-6">
<div className="font-heading text-lg font-semibold">See the ablation data</div>
<p className="mt-2 text-sm text-[color:var(--color-muted-foreground)]">
192 trials across Sonnet, DeepSeek, qwen14b, and Gemma4. Blind Haiku 4.5 judge.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Normalize model naming in user-facing copy.

Line 106 uses qwen14b; use consistent product casing (e.g., Qwen14B) to avoid credibility friction in marketing claims.

✏️ Proposed copy fix
-            192 trials across Sonnet, DeepSeek, qwen14b, and Gemma4. Blind Haiku 4.5 judge.
+            192 trials across Sonnet, DeepSeek, Qwen14B, and Gemma4. Blind Haiku 4.5 judge.
📝 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
192 trials across Sonnet, DeepSeek, qwen14b, and Gemma4. Blind Haiku 4.5 judge.
192 trials across Sonnet, DeepSeek, Qwen14B, and Gemma4. Blind Haiku 4.5 judge.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@marketing/app/how-it-works/page.tsx` at line 106, The user-facing copy in
marketing/app/how-it-works/page.tsx contains the lowercase token "qwen14b";
update that string to the normalized product casing "Qwen14B" in the sentence
"192 trials across Sonnet, DeepSeek, qwen14b, and Gemma4." and scan the same
file for any other occurrences of "qwen14b" to change them to "Qwen14B" so
casing is consistent across the page copy.

Comment on lines +35 to 40
<a
href="/how-it-works/"
className="inline-flex w-full items-center justify-center rounded-md px-5 py-2.5 text-sm font-medium text-[color:var(--color-muted-foreground)] transition-colors hover:text-[color:var(--color-foreground)] sm:w-auto"
>
How it works
</a>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Use next/link for the internal /how-it-works/ navigation.

Line 36 is an internal route; using <Link> preserves client-side navigation/prefetch behavior and avoids full page reloads.

⚡ Proposed Next.js-idiomatic change
+import Link from "next/link";
 import { site } from "@/lib/site";
 import { CodeBlock } from "./CodeBlock";
@@
-            <a
-              href="/how-it-works/"
+            <Link
+              href="/how-it-works/"
               className="inline-flex w-full items-center justify-center rounded-md px-5 py-2.5 text-sm font-medium text-[color:var(--color-muted-foreground)] transition-colors hover:text-[color:var(--color-foreground)] sm:w-auto"
             >
               How it works
-            </a>
+            </Link>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@marketing/src/components/Hero.tsx` around lines 35 - 40, Replace the plain
anchor in the Hero component with Next.js client-side navigation: import Link
from 'next/link' and swap the <a href="/how-it-works/"> element for a <Link
href="/how-it-works/"> that carries the same className and text content so the
styling and behavior remain; ensure you remove the raw anchor and let Link
handle the navigation (in Next.js 13+ you can put the className directly on
Link).

Comment thread marketing/src/lib/site.ts
name: "Gradata",
url: "https://gradata.ai",
appUrl: "https://app.gradata.ai",
proofUrl: "https://app.gradata.ai/proof",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Derive proofUrl from appUrl to avoid URL drift.

Line 5 duplicates the origin from Line 4. If appUrl changes later, this can silently desync CTA targets.

♻️ Proposed refactor
+const appUrl = "https://app.gradata.ai";
+
 export const site = {
   name: "Gradata",
   url: "https://gradata.ai",
-  appUrl: "https://app.gradata.ai",
-  proofUrl: "https://app.gradata.ai/proof",
+  appUrl,
+  proofUrl: `${appUrl}/proof`,
   docsUrl: "https://github.com/Gradata/gradata",
   tagline: "AI that learns the corrections you keep making.",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@marketing/src/lib/site.ts` at line 5, Replace the hard-coded proofUrl with a
derived value computed from appUrl so the CTA never drifts; locate the exported
constants (appUrl and proofUrl) in site.ts and set proofUrl by deriving its
origin/path from appUrl (e.g., using URL or string concat) instead of a separate
literal, ensuring any change to appUrl automatically updates proofUrl.

@Gradata Gradata merged commit fcd421a into main Apr 15, 2026
6 checks passed
@Gradata Gradata deleted the wt-proof-cta branch April 17, 2026 19:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant