Clarify public implementation pricing per agent-hour

This commit is contained in:
Anthony Ettinger 2026-09-13 09:30:24 +00:00
parent d8b3126782
commit 5727ac8d06
12 changed files with 30 additions and 27 deletions

View file

@ -177,7 +177,7 @@ describe("POST /api/hire-us/coinpay-checkout", () => {
payment_method: "both", payment_method: "both",
currency: "usdc_pol", currency: "usdc_pol",
blockchain: "USDC_POL", blockchain: "USDC_POL",
description: "LogicSRC Hire Us - 10h @ $400/hour", description: "LogicSRC Hire Us - 10 agent-hours @ $400/agent-hour",
success_url: "https://logicsrc.test/hire-us?payment=success", success_url: "https://logicsrc.test/hire-us?payment=success",
cancel_url: "https://logicsrc.test/hire-us?payment=cancelled", cancel_url: "https://logicsrc.test/hire-us?payment=cancelled",
redirect_url: "https://logicsrc.test/hire-us?payment=coinpay", redirect_url: "https://logicsrc.test/hire-us?payment=coinpay",
@ -277,7 +277,7 @@ describe("POST /api/hire-us/coinpay-checkout", () => {
expect(response.status).toBe(201); expect(response.status).toBe(201);
expect(createBody.amount_usd).toBe(10100); expect(createBody.amount_usd).toBe(10100);
expect(createBody.description).toBe("LogicSRC Hire Us - 25.25h @ $400/hour"); expect(createBody.description).toBe("LogicSRC Hire Us - 25.25 agent-hours @ $400/agent-hour");
expect(createBody.metadata).toMatchObject({ billing: "metered_hours", hours: 25.25, rate_usd_per_hour: 400 }); expect(createBody.metadata).toMatchObject({ billing: "metered_hours", hours: 25.25, rate_usd_per_hour: 400 });
expect(body.payment).toMatchObject({ amount_usd: 10100, hours: 25.25, rate_usd_per_hour: 400 }); expect(body.payment).toMatchObject({ amount_usd: 10100, hours: 25.25, rate_usd_per_hour: 400 });
}); });

View file

@ -66,7 +66,7 @@ test.describe("LogicSRC PWA", () => {
await expect(page.getByRole("heading", { name: "Hire Us", exact: true })).toBeVisible(); await expect(page.getByRole("heading", { name: "Hire Us", exact: true })).toBeVisible();
await expect(page.locator(".price-row strong", { hasText: "$400" })).toBeVisible(); await expect(page.locator(".price-row strong", { hasText: "$400" })).toBeVisible();
await expect(page.getByText("per hour")).toBeVisible(); await expect(page.getByText("per hour")).toBeVisible();
await expect(page.getByText("Ten-hour minimum engagement")).toBeVisible(); await expect(page.getByText("Ten-agent-hour minimum engagement")).toBeVisible();
await expect(page.getByText("open infrastructure and open specs for AI agent systems")).toBeVisible(); await expect(page.getByText("open infrastructure and open specs for AI agent systems")).toBeVisible();
await expect(page.getByRole("button", { name: "Request review" })).toBeVisible(); await expect(page.getByRole("button", { name: "Request review" })).toBeVisible();
await expect(page.getByPlaceholder("you@example.com")).toBeVisible(); await expect(page.getByPlaceholder("you@example.com")).toBeVisible();

View file

@ -25,7 +25,7 @@ const ROUTE_META: Record<string, { title: string; description: string }> = {
}, },
"hire-us": { "hire-us": {
title: "Hire Us · LogicSRC", title: "Hire Us · LogicSRC",
description: "Implementation help for LogicSRC, AgentSwarm, and Credential Sharing at $400/hour for accepted work, paid via CoinPay.", description: "Implementation help for LogicSRC, AgentSwarm, and Credential Sharing at $400/hour/agent for accepted work, paid via CoinPay.",
}, },
// /agent-swarm was the AgentSwarm placeholder band. It is now the OpenFleet // /agent-swarm was the AgentSwarm placeholder band. It is now the OpenFleet
// spec at app/openfleet; next.config.ts redirects the old path there. // spec at app/openfleet; next.config.ts redirects the old path there.

View file

@ -84,7 +84,7 @@ export default function AboutPage(): ReactNode {
<h3>Work with us</h3> <h3>Work with us</h3>
<p> <p>
Profullstack implements LogicSRC-based systems at $400/hour for Profullstack implements LogicSRC-based systems at $400/hour/agent for
accepted work, paid via CoinPay. See <a href="/hire-us">Hire Us</a>. accepted work, paid via CoinPay. See <a href="/hire-us">Hire Us</a>.
</p> </p>
</div> </div>

View file

@ -5,12 +5,13 @@ import { choosePaymentRail, fetchMerchantEligibility, parseJson } from "@/lib/co
export const dynamic = "force-dynamic"; export const dynamic = "force-dynamic";
// POST /api/hire-us/coinpay-checkout — create a CoinPay checkout for approved // POST /api/hire-us/coinpay-checkout — create a CoinPay checkout for approved
// Hire Us hours at $400/hour, choosing card/crypto/both based on merchant // Hire Us hours at $400/hour/agent, choosing card/crypto/both based on merchant
// eligibility. Billing is metered: the caller supplies the approved hours and the // eligibility. Billing is metered: the caller supplies the approved hours and the
// amount is derived from them, never a fixed recurring figure. // amount is derived from them, never a fixed recurring figure.
const RATE_USD_PER_HOUR = 400; const RATE_USD_PER_HOUR = 400;
const MINIMUM_HOURS = 10; const MINIMUM_HOURS = 10;
// Hours represent total approved agent-hours, not wall-clock duration.
// Hours are quoted in quarter-hour increments; anything finer is a rounding // Hours are quoted in quarter-hour increments; anything finer is a rounding
// artifact rather than a real billing unit. // artifact rather than a real billing unit.
function parseHours(value: unknown): number | null { function parseHours(value: unknown): number | null {
@ -43,7 +44,7 @@ export async function POST(request: NextRequest) {
return json( return json(
{ {
success: false, success: false,
error: `Approved hours must be a quarter-hour increment of at least ${MINIMUM_HOURS}` error: `Approved agent-hours must be a quarter-hour increment of at least ${MINIMUM_HOURS}`
}, },
422 422
); );
@ -69,7 +70,7 @@ export async function POST(request: NextRequest) {
payment_method: paymentRail.method, payment_method: paymentRail.method,
currency: paymentRail.currency, currency: paymentRail.currency,
...(paymentRail.blockchain ? { blockchain: paymentRail.blockchain } : {}), ...(paymentRail.blockchain ? { blockchain: paymentRail.blockchain } : {}),
description: `LogicSRC Hire Us - ${hours}h @ $${RATE_USD_PER_HOUR}/hour`, description: `LogicSRC Hire Us - ${hours} agent-hours @ $${RATE_USD_PER_HOUR}/agent-hour`,
success_url: `${publicUrl}/hire-us?payment=success`, success_url: `${publicUrl}/hire-us?payment=success`,
cancel_url: `${publicUrl}/hire-us?payment=cancelled`, cancel_url: `${publicUrl}/hire-us?payment=cancelled`,
redirect_url: `${publicUrl}/hire-us?payment=coinpay`, redirect_url: `${publicUrl}/hire-us?payment=coinpay`,
@ -77,6 +78,7 @@ export async function POST(request: NextRequest) {
metadata: { metadata: {
product: "logicsrc-hire-us", product: "logicsrc-hire-us",
billing: "metered_hours", billing: "metered_hours",
unit: "agent_hour",
hours, hours,
rate_usd_per_hour: RATE_USD_PER_HOUR, rate_usd_per_hour: RATE_USD_PER_HOUR,
source: "logicsrc.com/hire-us", source: "logicsrc.com/hire-us",

View file

@ -4,7 +4,7 @@ import { json } from "@/lib/http";
export const dynamic = "force-dynamic"; export const dynamic = "force-dynamic";
// POST /api/hire-us/project-request — accept a Hire Us project request before any // POST /api/hire-us/project-request — accept a Hire Us project request before any
// CoinPay invoice is created. Hire Us bills metered hours at $400/hour, so there is // CoinPay invoice is created. Hire Us bills metered hours at $400/hour/agent, so there is
// no amount until we accept the project and hours are approved. // no amount until we accept the project and hours are approved.
const RATE_USD_PER_HOUR = 400; const RATE_USD_PER_HOUR = 400;
const MINIMUM_HOURS = 10; const MINIMUM_HOURS = 10;

View file

@ -43,7 +43,7 @@ ${guides}
## Company & legal ## Company & legal
- [About](${SITE_URL}/about): What LogicSRC is and who maintains it (Profullstack, Inc.). - [About](${SITE_URL}/about): What LogicSRC is and who maintains it (Profullstack, Inc.).
- [Hire Us](${SITE_URL}/hire-us): Implementation help at $400/hour for accepted LogicSRC work. - [Hire Us](${SITE_URL}/hire-us): Implementation help at $400/hour/agent for accepted LogicSRC work.
- [Pricing](${SITE_URL}/pricing) - [Pricing](${SITE_URL}/pricing)
- [Terms](${SITE_URL}/terms) - [Terms](${SITE_URL}/terms)
- [Privacy](${SITE_URL}/privacy) - [Privacy](${SITE_URL}/privacy)

View file

@ -5,7 +5,7 @@ import { SiteShell } from "@/components/site-shell";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Pricing · LogicSRC", title: "Pricing · LogicSRC",
description: description:
"LogicSRC the open specification, schemas, SDKs, and CLI are free and open source. Implementation help is $400/hour for accepted work, paid via CoinPay.", "LogicSRC the open specification, schemas, SDKs, and CLI are free and open source. Implementation help is $400/hour/agent for accepted work, paid via CoinPay.",
alternates: { canonical: "/pricing" }, alternates: { canonical: "/pricing" },
}; };
@ -16,7 +16,7 @@ const FAQ: Array<{ q: string; a: string }> = [
}, },
{ {
q: "How does pricing work?", q: "How does pricing work?",
a: "The standard is free. If you want Profullstack to build a LogicSRC-based system for you, implementation work is billed at $400/hour against actual hours worked, invoiced through CoinPay after you approve them. The minimum engagement is 10 hours.", a: "The standard is free. If you want Profullstack to build a LogicSRC-based system for you, implementation work is billed at $400/hour/agent against actual agent-hours worked, invoiced through CoinPay after you approve them. The minimum engagement is 10 agent-hours.",
}, },
{ {
q: "Who is LogicSRC for?", q: "Who is LogicSRC for?",
@ -61,10 +61,10 @@ export default function PricingPage(): ReactNode {
CLI, TUI, and reference plugins are open source. CLI, TUI, and reference plugins are open source.
</li> </li>
<li> <li>
<strong>Implementation — $400/hour.</strong> Profullstack builds <strong>Implementation — $400/hour/agent.</strong> Profullstack builds
LogicSRC-based systems for accepted projects, billed against actual LogicSRC-based systems for accepted projects, billed against actual
hours worked and invoiced via CoinPay once you approve them. hours worked and invoiced via CoinPay once you approve them.
Ten-hour minimum engagement. See <a href="/hire-us">Hire Us</a> and{" "} Ten-agent-hour minimum engagement. See <a href="/hire-us">Hire Us</a> and{" "}
<a href="/terms">Terms</a>. <a href="/terms">Terms</a>.
</li> </li>
</ul> </ul>

View file

@ -27,7 +27,7 @@ Base URL: ${SITE_URL}
- Read the LogicSRC coordination schemas and conventions. - Read the LogicSRC coordination schemas and conventions.
- Compare LogicSRC with OpenSpec.dev. - Compare LogicSRC with OpenSpec.dev.
- Request paid implementation help via the Hire Us flow (${SITE_URL}/hire-us), - Request paid implementation help via the Hire Us flow (${SITE_URL}/hire-us),
billed at $400/hour for accepted work and paid through CoinPay. billed at $400/hour/agent for accepted work and paid through CoinPay.
## Notes ## Notes

View file

@ -5,7 +5,7 @@ import { SiteShell } from "@/components/site-shell";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Terms · LogicSRC", title: "Terms · LogicSRC",
description: description:
"Terms of engagement for LogicSRC: the specification and tooling are open source and free; Profullstack implementation work is billed at $400/hour against approved hours, with a 10-hour minimum.", "Terms of engagement for LogicSRC: the specification and tooling are open source and free; Profullstack implementation work is billed at $400/hour/agent against approved hours, with a 10-agent-hour minimum.",
alternates: { canonical: "/terms" }, alternates: { canonical: "/terms" },
}; };
@ -35,7 +35,7 @@ export default function TermsPage(): ReactNode {
<h3>Rate</h3> <h3>Rate</h3>
<p> <p>
Profullstack implementation work is billed at{" "} Profullstack implementation work is billed at{" "}
<strong>$400 per hour</strong>. One rate applies to all <strong>$400 per agent-hour</strong>. One rate applies to all
implementation work — specs, CLIs, SDKs, MCP resources, APIs, PWAs, implementation work — specs, CLIs, SDKs, MCP resources, APIs, PWAs,
and provider-neutral plugin surfaces. There are no tiers, role-based and provider-neutral plugin surfaces. There are no tiers, role-based
rates, or volume discounts. rates, or volume discounts.
@ -56,10 +56,11 @@ export default function TermsPage(): ReactNode {
<h3>How you are invoiced</h3> <h3>How you are invoiced</h3>
<p> <p>
Billing is metered against actual hours worked, not a subscription. Billing is metered against actual agent-hours worked. Two agents working
five hours use ten agent-hours and cost $4,000.
After we accept a project, we send you a record of hours worked. Once After we accept a project, we send you a record of hours worked. Once
you approve those hours, we issue a CoinPay invoice for exactly that you approve those hours, we issue a CoinPay invoice for exactly that
amount at $400/hour. You are never charged for hours you have not amount at $400/hour/agent. You are never charged for hours you have not
seen and approved. seen and approved.
</p> </p>
<p> <p>
@ -69,7 +70,7 @@ export default function TermsPage(): ReactNode {
<h3>Minimum engagement</h3> <h3>Minimum engagement</h3>
<p> <p>
The minimum engagement is <strong>10 hours</strong>. Engagements The minimum engagement is <strong>10 agent-hours</strong>. Engagements
smaller than this do not cover the cost of scoping and context, so we smaller than this do not cover the cost of scoping and context, so we
will decline them rather than quote them. will decline them rather than quote them.
</p> </p>

View file

@ -45,7 +45,7 @@ export function HomeInteractivity(): null {
} }
result.replaceChildren( result.replaceChildren(
buildParagraph("Request received. If it is a fit, we will scope the work and invoice approved hours at $400/hour via CoinPay.") buildParagraph("Request received. If it is a fit, we will scope the work and invoice approved hours at $400/hour/agent via CoinPay.")
); );
} catch (error) { } catch (error) {
result.replaceChildren( result.replaceChildren(

View file

@ -72,9 +72,9 @@ const pages = [
{ id: "blog", title: "Blog", detail: "Project notes for LogicSRC, AgentSwarm, AgentByte, OpenSpec workflows, and reference implementations." }, { id: "blog", title: "Blog", detail: "Project notes for LogicSRC, AgentSwarm, AgentByte, OpenSpec workflows, and reference implementations." },
{ id: "openspec", title: "OpenSpec", detail: "Comparison and compatibility notes for OpenSpec.dev-style repo-local specs, proposals, tasks, and deltas." }, { id: "openspec", title: "OpenSpec", detail: "Comparison and compatibility notes for OpenSpec.dev-style repo-local specs, proposals, tasks, and deltas." },
{ id: "credential-sharing", title: "Credential Sharing", detail: "Open replacement architecture for portable secret sync across end-to-end-encrypted team vaults, .env, Doppler, Railway variables, GitHub Secrets, and sh1pt." }, { id: "credential-sharing", title: "Credential Sharing", detail: "Open replacement architecture for portable secret sync across end-to-end-encrypted team vaults, .env, Doppler, Railway variables, GitHub Secrets, and sh1pt." },
{ id: "hire-us", title: "Hire Us", detail: "$400/hour LogicSRC work on open infrastructure, specs, AI agent workflows, and reference implementations paid through CoinPay after project acceptance." }, { id: "hire-us", title: "Hire Us", detail: "$400/hour/agent LogicSRC work on open infrastructure, specs, AI agent workflows, and reference implementations paid through CoinPay after project acceptance." },
{ id: "about", title: "About", detail: "LogicSRC is the Profullstack open specification project for human and AI agent coordination." }, { id: "about", title: "About", detail: "LogicSRC is the Profullstack open specification project for human and AI agent coordination." },
{ id: "terms", title: "Terms", detail: "Terms of engagement: the $400/hour rate, what is billable, how approved hours are invoiced, the 10-hour minimum, cancellation, acceptable use, and reference implementation boundaries." }, { id: "terms", title: "Terms", detail: "Terms of engagement: the $400/hour/agent rate, what is billable, how approved hours are invoiced, the 10-agent-hour minimum, cancellation, acceptable use, and reference implementation boundaries." },
{ id: "privacy", title: "Privacy", detail: "What this site collects and what it does not: analytics, the Hire Us form, the CoinPay sign-in cookie, and where credential data does and does not go." } { id: "privacy", title: "Privacy", detail: "What this site collects and what it does not: analytics, the Hire Us form, the CoinPay sign-in cookie, and where credential data does and does not go." }
]; ];
@ -363,7 +363,7 @@ logicsrc secrets ssh agent profullstack # load into ssh-agent, never onto disk<
<section id="hire-us" class="band hire-us"> <section id="hire-us" class="band hire-us">
<div class="section-head"> <div class="section-head">
<h2>Hire Us</h2> <h2>Hire Us</h2>
<p>$400/hour for accepted LogicSRC work using open infrastructure and open specs for AI agent systems.</p> <p>$400/hour/agent for accepted LogicSRC work using open infrastructure and open specs for AI agent systems.</p>
</div> </div>
<div class="hire-layout"> <div class="hire-layout">
<article class="hire-panel"> <article class="hire-panel">
@ -372,9 +372,9 @@ logicsrc secrets ssh agent profullstack # load into ssh-agent, never onto disk<
<p>Hire us to turn agent ideas into portable LogicSRC specs, CLIs, SDKs, MCP resources, PWAs, APIs, and provider-neutral plugin workflows. We prioritize auditable contracts, repo-local artifacts, and integrations that can move between model providers and infrastructure.</p> <p>Hire us to turn agent ideas into portable LogicSRC specs, CLIs, SDKs, MCP resources, PWAs, APIs, and provider-neutral plugin workflows. We prioritize auditable contracts, repo-local artifacts, and integrations that can move between model providers and infrastructure.</p>
<div class="price-row"> <div class="price-row">
<strong>$400</strong> <strong>$400</strong>
<span>per hour</span> <span>per agent-hour</span>
</div> </div>
<p class="price-terms">Billed against actual hours worked, invoiced after you approve them. Ten-hour minimum engagement; cancel any time with one week&rsquo;s notice and pay only for hours already approved. See <a href="/terms">Terms</a>.</p> <p class="price-terms">Billed against actual agent-hours worked, invoiced after you approve them. Ten-agent-hour minimum engagement; cancel any time with one week&rsquo;s notice and pay only for hours already approved. See <a href="/terms">Terms</a>.</p>
<form id="project-request-form" class="project-request-form"> <form id="project-request-form" class="project-request-form">
<label> <label>
<span>Contact</span> <span>Contact</span>
@ -402,7 +402,7 @@ logicsrc secrets ssh agent profullstack # load into ssh-agent, never onto disk<
</div> </div>
<article id="coinpay-setup" class="coinpay-panel"> <article id="coinpay-setup" class="coinpay-panel">
<h3>CoinPay hourly invoice</h3> <h3>CoinPay hourly invoice</h3>
<p>After we accept the project, we invoice approved hours at $400/hour through CoinPay without exposing merchant credentials to the browser.</p> <p>After we accept the project, we invoice approved hours at $400/hour/agent through CoinPay without exposing merchant credentials to the browser.</p>
<pre><code>COINPAY_ORG=profullstack <pre><code>COINPAY_ORG=profullstack
COINPAY_PRODUCT=logicsrc-hire-us COINPAY_PRODUCT=logicsrc-hire-us
COINPAY_RATE_USD_PER_HOUR=400 COINPAY_RATE_USD_PER_HOUR=400