Skip to content

Commit ad4f393

Browse files
authored
Price public implementation quotes at $400 per agent-hour (#257)
1 parent 4bc6ad3 commit ad4f393

4 files changed

Lines changed: 9 additions & 9 deletions

File tree

‎app/(marketing)/hire/page.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export default async function HirePage({
3838
<li className="card p-4">
3939
<strong>Scoped from your scan</strong>
4040
<p className="mt-1 text-[var(--color-muted)]">
41-
We price the work off what the report actually found, at $100/hour.
41+
We price the work off what the report actually found, at $400/hour/agent.
4242
Most engagements run two to three weeks.
4343
</p>
4444
</li>

‎lib/audit/quote.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
import type { Finding } from "./types";
2020

21-
/** Blended hourly rate, USD. */
22-
export const HOURLY_RATE_USD = 100;
21+
/** Standard price per agent-hour, USD. */
22+
export const HOURLY_RATE_USD = 400;
2323

2424
/** Score we commit to reaching across every engine in the report. */
2525
export const TARGET_SCORE = 90;

‎lib/markdown.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ function quoteBlock(q: Quote, target?: string): string {
420420
<div class="kicker">Want us to fix this for you?</div>
421421
<div class="amount">${formatUsd(q.amountUsd)} <span class="unit">USD${q.cappedForScoping ? "+" : ""}</span></div>
422422
<div class="promise">
423-
Estimated <strong>${formatHours(q.totalHours)}</strong> at ${formatUsd(q.rateUsd)}/hour to take
423+
Estimated <strong>${formatHours(q.totalHours)} of agent time</strong> at ${formatUsd(q.rateUsd)}/agent-hour to take
424424
${escapeHtml(host)} to a <strong>${q.targetScore}%+ score across the board</strong>.
425425
</div>
426426
<div class="split">

‎tests/quote.test.ts‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ function f(check_key: string, status: Finding["status"] = "fail"): Finding {
1414
}
1515

1616
describe("quote: pricing basics", () => {
17-
it("bills at $100/hour and promises 90%+", () => {
18-
expect(HOURLY_RATE_USD).toBe(100);
17+
it("bills at $400/hour/agent and promises 90%+", () => {
18+
expect(HOURLY_RATE_USD).toBe(400);
1919
expect(TARGET_SCORE).toBe(90);
2020
const q = quoteFromFindings([f("homepage.title")]);
21-
expect(q.rateUsd).toBe(100);
21+
expect(q.rateUsd).toBe(400);
2222
expect(q.targetScore).toBe(90);
23-
expect(q.amountUsd).toBe(Math.round((q.totalHours * 100) / 100) * 100);
23+
expect(q.amountUsd).toBe(q.totalHours * 400);
2424
});
2525

2626
it("always splits hours into AI-assisted and manual", () => {
@@ -151,7 +151,7 @@ describe("quote: guardrails", () => {
151151
);
152152
expect(q.cappedForScoping).toBe(true);
153153
expect(q.totalHours).toBeLessThanOrEqual(120);
154-
expect(q.amountUsd).toBeLessThanOrEqual(12_000);
154+
expect(q.amountUsd).toBeLessThanOrEqual(48_000);
155155
});
156156

157157
it("does not flag a normal report for scoping", () => {

0 commit comments

Comments
 (0)