From 064e21001ef6f6fdabfc43ef2151ba417156ddee Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Sun, 13 Sep 2026 09:31:05 +0000 Subject: [PATCH] Price public implementation quotes at $400 per agent-hour --- app/(marketing)/hire/page.tsx | 2 +- lib/audit/quote.ts | 4 ++-- lib/markdown.ts | 2 +- tests/quote.test.ts | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/(marketing)/hire/page.tsx b/app/(marketing)/hire/page.tsx index ceb338a5..e0a881d6 100644 --- a/app/(marketing)/hire/page.tsx +++ b/app/(marketing)/hire/page.tsx @@ -38,7 +38,7 @@ export default async function HirePage({
  • Scoped from your scan

    - We price the work off what the report actually found, at $100/hour. + We price the work off what the report actually found, at $400/hour/agent. Most engagements run two to three weeks.

  • diff --git a/lib/audit/quote.ts b/lib/audit/quote.ts index 6de490c0..b1d819ec 100644 --- a/lib/audit/quote.ts +++ b/lib/audit/quote.ts @@ -18,8 +18,8 @@ import type { Finding } from "./types"; -/** Blended hourly rate, USD. */ -export const HOURLY_RATE_USD = 100; +/** Standard price per agent-hour, USD. */ +export const HOURLY_RATE_USD = 400; /** Score we commit to reaching across every engine in the report. */ export const TARGET_SCORE = 90; diff --git a/lib/markdown.ts b/lib/markdown.ts index ffc2336d..1763f950 100644 --- a/lib/markdown.ts +++ b/lib/markdown.ts @@ -420,7 +420,7 @@ function quoteBlock(q: Quote, target?: string): string {
    Want us to fix this for you?
    ${formatUsd(q.amountUsd)} USD${q.cappedForScoping ? "+" : ""}
    - Estimated ${formatHours(q.totalHours)} at ${formatUsd(q.rateUsd)}/hour to take + Estimated ${formatHours(q.totalHours)} of agent time at ${formatUsd(q.rateUsd)}/agent-hour to take ${escapeHtml(host)} to a ${q.targetScore}%+ score across the board.
    diff --git a/tests/quote.test.ts b/tests/quote.test.ts index 1cd27c87..73d5298e 100644 --- a/tests/quote.test.ts +++ b/tests/quote.test.ts @@ -14,13 +14,13 @@ function f(check_key: string, status: Finding["status"] = "fail"): Finding { } describe("quote: pricing basics", () => { - it("bills at $100/hour and promises 90%+", () => { - expect(HOURLY_RATE_USD).toBe(100); + it("bills at $400/hour/agent and promises 90%+", () => { + expect(HOURLY_RATE_USD).toBe(400); expect(TARGET_SCORE).toBe(90); const q = quoteFromFindings([f("homepage.title")]); - expect(q.rateUsd).toBe(100); + expect(q.rateUsd).toBe(400); expect(q.targetScore).toBe(90); - expect(q.amountUsd).toBe(Math.round((q.totalHours * 100) / 100) * 100); + expect(q.amountUsd).toBe(q.totalHours * 400); }); it("always splits hours into AI-assisted and manual", () => { @@ -151,7 +151,7 @@ describe("quote: guardrails", () => { ); expect(q.cappedForScoping).toBe(true); expect(q.totalHours).toBeLessThanOrEqual(120); - expect(q.amountUsd).toBeLessThanOrEqual(12_000); + expect(q.amountUsd).toBeLessThanOrEqual(48_000); }); it("does not flag a normal report for scoping", () => {