diff --git a/index.html b/index.html
index ee22b87..91ca898 100644
--- a/index.html
+++ b/index.html
@@ -126,6 +126,7 @@
/* ── How It Works ── */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:40px}
+.steps-4{grid-template-columns:repeat(4,1fr)}
.step{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:36px 28px;position:relative}
.step-num{font-family:'JetBrains Mono',monospace;font-size:48px;font-weight:700;color:var(--accent);opacity:.15;position:absolute;top:16px;right:20px;line-height:1}
.step-tag{font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.7px;margin-bottom:12px}
@@ -527,6 +528,49 @@
Identity
Register your agent in one request
diff --git a/openapi.json b/openapi.json
index 625adc8..50972ec 100644
--- a/openapi.json
+++ b/openapi.json
@@ -2,7 +2,7 @@
"openapi": "3.1.0",
"info": {
"title": "DJD Agent Score API",
- "description": "Trust infrastructure for AI agent wallets on Base. DJD helps apps and agent operators score wallets, publish public trust surfaces, and enforce payout or settlement policy before money moves. Paid endpoints support x402 on Base or API-key access for developer teams; free endpoints require no authentication. Interactive docs available at /docs.",
+ "description": "Trust infrastructure for AI agent wallets on Base. DJD helps apps and agent operators score wallets, publish public trust surfaces, and enforce payout or settlement policy before money moves. Use it for agent marketplaces, payout and escrow flows, paid tools, and automated settlement decisions. Paid endpoints support x402 on Base or API-key access for developer teams; free endpoints require no authentication. Interactive docs available at /docs.",
"version": "2.0.0",
"contact": { "email": "drewjacobs32@gmail.com" },
"license": { "name": "MIT", "url": "https://github.com/jacobsd32-cpu/djdagentscore/blob/main/LICENSE" }
diff --git a/src/services/discoveryService.ts b/src/services/discoveryService.ts
index adada0b..786613f 100644
--- a/src/services/discoveryService.ts
+++ b/src/services/discoveryService.ts
@@ -26,7 +26,36 @@ const OPENAPI_DOCUMENT = JSON.parse(OPENAPI_SPEC) as {
const SERVICE_TITLE = OPENAPI_DOCUMENT.info?.title ?? 'DJD Agent Score API'
const SERVICE_VERSION = OPENAPI_DOCUMENT.info?.version ?? FALLBACK_SERVICE_VERSION
-const SWAGGER_HTML = `
+export function getPublicDiscoveryCacheControl(): string {
+ return PUBLIC_CACHE_CONTROL
+}
+
+export function getOpenApiSpecView(): string {
+ const server = OPENAPI_DOCUMENT.servers?.[0]
+ return JSON.stringify(
+ {
+ ...OPENAPI_DOCUMENT,
+ info: {
+ ...OPENAPI_DOCUMENT.info,
+ contact: {
+ ...OPENAPI_DOCUMENT.info?.contact,
+ email: getSupportEmail(),
+ },
+ },
+ servers: [
+ {
+ description: server?.description ?? 'Production',
+ url: getPublicBaseUrl(),
+ },
+ ],
+ },
+ null,
+ 2,
+ )
+}
+
+export function getDocsHtmlView(): string {
+ return `
@@ -46,7 +75,7 @@ const SWAGGER_HTML = `
.swagger-ui select { font-weight: bold; }
.header-banner {
background: linear-gradient(135deg, #0f3460, #1a1a2e);
- padding: 2rem;
+ padding: 2.25rem 2rem 2rem;
text-align: center;
border-bottom: 2px solid #e94560;
}
@@ -57,10 +86,12 @@ const SWAGGER_HTML = `
margin: 0 0 0.5rem;
}
.header-banner p {
- color: #8888aa;
+ color: #a6afd0;
font-family: system-ui, sans-serif;
- margin: 0;
+ margin: 0 auto;
font-size: 0.95rem;
+ line-height: 1.7;
+ max-width: 760px;
}
.header-banner .badge {
display: inline-block;
@@ -73,12 +104,171 @@ const SWAGGER_HTML = `
margin-left: 0.5rem;
vertical-align: middle;
}
+ .header-actions {
+ display: flex;
+ justify-content: center;
+ gap: 0.75rem;
+ flex-wrap: wrap;
+ margin-top: 1rem;
+ }
+ .header-link {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.35rem;
+ padding: 0.7rem 1rem;
+ border-radius: 999px;
+ border: 1px solid rgba(129, 140, 248, 0.24);
+ background: rgba(15, 23, 42, 0.35);
+ color: #c7d2fe;
+ font-family: system-ui, sans-serif;
+ font-size: 0.9rem;
+ font-weight: 600;
+ text-decoration: none;
+ }
+ .header-link:hover { color: #ffffff; text-decoration: none; border-color: rgba(129, 140, 248, 0.5); }
+ .docs-shell {
+ max-width: 1120px;
+ margin: 0 auto;
+ padding: 2rem;
+ }
+ .docs-section {
+ margin-bottom: 1.5rem;
+ }
+ .docs-title {
+ color: #f8fafc;
+ font-family: system-ui, -apple-system, sans-serif;
+ font-size: 1.15rem;
+ font-weight: 700;
+ margin-bottom: 0.85rem;
+ }
+ .docs-copy {
+ color: #94a3b8;
+ font-family: system-ui, sans-serif;
+ font-size: 0.95rem;
+ line-height: 1.7;
+ margin-bottom: 1rem;
+ max-width: 860px;
+ }
+ .docs-grid {
+ display: grid;
+ gap: 1rem;
+ }
+ .docs-grid-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+ .docs-grid-4 {
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ }
+ .docs-card {
+ background: rgba(15, 23, 42, 0.58);
+ border: 1px solid rgba(129, 140, 248, 0.16);
+ border-radius: 16px;
+ padding: 1rem;
+ min-height: 170px;
+ }
+ .docs-kicker {
+ color: #818cf8;
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
+ font-size: 0.72rem;
+ font-weight: 700;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ margin-bottom: 0.65rem;
+ }
+ .docs-card h3 {
+ color: #f8fafc;
+ font-family: system-ui, sans-serif;
+ font-size: 1rem;
+ margin: 0 0 0.55rem;
+ }
+ .docs-card p {
+ color: #94a3b8;
+ font-family: system-ui, sans-serif;
+ font-size: 0.92rem;
+ line-height: 1.65;
+ margin: 0 0 0.8rem;
+ }
+ .docs-code {
+ display: inline-block;
+ padding: 0.45rem 0.65rem;
+ border-radius: 10px;
+ background: rgba(2, 6, 23, 0.85);
+ border: 1px solid rgba(148, 163, 184, 0.14);
+ color: #c7d2fe;
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
+ font-size: 0.78rem;
+ line-height: 1.5;
+ }
+ @media (max-width: 920px) {
+ .docs-grid-3,
+ .docs-grid-4 {
+ grid-template-columns: 1fr;
+ }
+ }
+
+
+ Ship your first DJD integration
+ The simplest path is: screen counterparties in development, choose your production billing path, then add public trust surfaces only when customers or operators need to inspect what your backend already knows.
+
+
+ Step 1
+ Screen counterparties during development
+ Start with the free score endpoint and test real wallet decisions before you change any production flow.
+ GET /v1/score/basic?wallet=0x...
+
+
+ Step 2
+ Add production auth
+ Human teams usually move to a Bearer API key. Autonomous agents can keep paying per request with x402.
+ Authorization: Bearer djd_sk_...
X-PAYMENT: <proof>
+
+
+ Step 3
+ Layer in trust surfaces
+ When the trust decision needs to be inspectable, add evaluator, directory, certification, and standards-facing outputs.
+ /v1/score/evaluator
/v1/certification/directory
/v1/score/erc8004
+
+
+
+
+ Use DJD when you're building
+ DJD fits best anywhere a wallet can cost you money, fulfillment quality, or customer trust. These are the strongest customer wedges in the product today.
+
+
+ Marketplaces
+ Agent marketplaces
+ Score providers before listing them and link buyers to profiles, badges, and certification surfaces they can inspect.
+
+
+ Settlement
+ Payout and escrow flows
+ Use score, risk, and evaluator outputs before releasing funds or treating a counterparty as settlement-ready.
+
+
+ Paid APIs
+ x402 and paid agent tools
+ Check the payer before expensive work starts and keep trust gating inside the same monetized route.
+
+
+ Discovery
+ Directories and service networks
+ Publish machine-readable trust documents and public pages so other apps can discover certified, inspectable wallets.
+
+
+
@@ -100,37 +290,6 @@ const SWAGGER_HTML = `
`
-
-export function getPublicDiscoveryCacheControl(): string {
- return PUBLIC_CACHE_CONTROL
-}
-
-export function getOpenApiSpecView(): string {
- const server = OPENAPI_DOCUMENT.servers?.[0]
- return JSON.stringify(
- {
- ...OPENAPI_DOCUMENT,
- info: {
- ...OPENAPI_DOCUMENT.info,
- contact: {
- ...OPENAPI_DOCUMENT.info?.contact,
- email: getSupportEmail(),
- },
- },
- servers: [
- {
- description: server?.description ?? 'Production',
- url: getPublicBaseUrl(),
- },
- ],
- },
- null,
- 2,
- )
-}
-
-export function getDocsHtmlView(): string {
- return SWAGGER_HTML
}
export function getX402DiscoveryView(requestUrl: string, forwardedProto?: string | null) {
diff --git a/src/templates/pricing.ts b/src/templates/pricing.ts
index cb8339f..1547c25 100644
--- a/src/templates/pricing.ts
+++ b/src/templates/pricing.ts
@@ -93,6 +93,13 @@ footer{border-top:1px solid var(--border);padding:36px 0 48px;margin-top:80px}
.how-title{font-size:15px;font-weight:600;margin-bottom:6px}
.how-desc{font-size:13px;color:var(--text-dim);line-height:1.6}
+/* Buyer stories */
+.buyer-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin:0 0 60px}
+.buyer-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:28px 26px}
+.buyer-kicker{font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:10px}
+.buyer-card h3{font-size:17px;font-weight:600;margin-bottom:8px}
+.buyer-card p{font-size:14px;color:var(--text-dim);line-height:1.75}
+
/* Plans grid */
.plans{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:0 0 60px}
.plan-card{background:var(--bg2);border:1px solid var(--border);padding:36px 28px;position:relative;transition:border-color .2s}
@@ -169,6 +176,7 @@ footer{border-top:1px solid var(--border);padding:36px 0 48px;margin-top:80px}
.plan-card:first-child{border-radius:var(--radius) var(--radius) 0 0!important;border-top:1px solid var(--border)}
.plan-card:last-child{border-radius:0 0 var(--radius) var(--radius)!important}
.how-strip{grid-template-columns:1fr}
+ .buyer-grid{grid-template-columns:1fr}
.compare{grid-template-columns:1fr}
.nav-links{gap:14px}
.ft-bot{flex-direction:column;gap:12px;text-align:center;padding:0 20px}
@@ -219,6 +227,29 @@ footer{border-top:1px solid var(--border);padding:36px 0 48px;margin-top:80px}
+
@@ -385,7 +416,7 @@ footer{border-top:1px solid var(--border);padding:36px 0 48px;margin-top:80px}
diff --git a/tests/routes/docs.test.ts b/tests/routes/docs.test.ts
index 2356e6e..5e1ce53 100644
--- a/tests/routes/docs.test.ts
+++ b/tests/routes/docs.test.ts
@@ -18,5 +18,9 @@ describe('GET /docs', () => {
expect(body).toContain('/openapi.json')
expect(body).toContain('Developer docs for scoring wallets')
expect(body).toContain('gating payouts or x402 routes')
+ expect(body).toContain('Ship your first DJD integration')
+ expect(body).toContain('Screen counterparties during development')
+ expect(body).toContain("Use DJD when you're building")
+ expect(body).toContain('Payout and escrow flows')
})
})
diff --git a/tests/routes/legal.test.ts b/tests/routes/legal.test.ts
index 7e06c9d..5ac4cd8 100644
--- a/tests/routes/legal.test.ts
+++ b/tests/routes/legal.test.ts
@@ -20,6 +20,10 @@ describe('GET /', () => {
expect(body).toContain('before your app sends money')
expect(body).toContain('A trust layer for AI agents and the apps around them')
expect(body).toContain('One trust engine, packaged for humans and software')
+ expect(body).toContain('Use DJD when your product has to trust a wallet')
+ expect(body).toContain('Payout and escrow flows')
+ expect(body).toContain('Ship the first version in one afternoon')
+ expect(body).toContain('Screen counterparties during development')
expect(body).toContain('Certification profile')
expect(body).toContain('Certify readiness')
expect(body).toContain('/directory')
diff --git a/tests/routes/openapi.test.ts b/tests/routes/openapi.test.ts
index 1f4861b..2db5934 100644
--- a/tests/routes/openapi.test.ts
+++ b/tests/routes/openapi.test.ts
@@ -32,6 +32,7 @@ describe('GET /openapi.json', () => {
const body = JSON.parse(await res.text()) as { info?: { title?: string; description?: string } }
expect(body.info?.title).toBe('DJD Agent Score API')
expect(body.info?.description).toContain('Trust infrastructure')
+ expect(body.info?.description).toContain('agent marketplaces')
})
it('injects the canonical public URL and support email at runtime', async () => {
diff --git a/tests/routes/pricing.test.ts b/tests/routes/pricing.test.ts
index dfae8a1..44a9ee8 100644
--- a/tests/routes/pricing.test.ts
+++ b/tests/routes/pricing.test.ts
@@ -17,6 +17,9 @@ describe('GET /pricing', () => {
expect(body).toContain('production API-key access')
expect(body).toContain('certified directory')
expect(body).toContain('ERC-8183 evaluator preview endpoint')
+ expect(body).toContain('Common ways developer teams use DJD')
+ expect(body).toContain('Payout and settlement products')
+ expect(body).toContain('Paid agent tools and x402 services')
expect(body).toContain('No. x402 is the crypto-native path for autonomous agents')
expect(body).toContain('/directory')
expect(body).toContain('/explorer')