@nordsym/apiclaw 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/add-api.yml +123 -0
- package/BRIEFING.md +30 -0
- package/CONCEPT.md +494 -0
- package/README.md +272 -0
- package/backend/convex/README.md +90 -0
- package/backend/convex/_generated/api.d.ts +55 -0
- package/backend/convex/_generated/api.js +23 -0
- package/backend/convex/_generated/dataModel.d.ts +60 -0
- package/backend/convex/_generated/server.d.ts +143 -0
- package/backend/convex/_generated/server.js +93 -0
- package/backend/convex/apiKeys.ts +75 -0
- package/backend/convex/purchases.ts +74 -0
- package/backend/convex/schema.ts +45 -0
- package/backend/convex/transactions.ts +57 -0
- package/backend/convex/tsconfig.json +25 -0
- package/backend/convex/users.ts +94 -0
- package/backend/package-lock.json +521 -0
- package/backend/package.json +15 -0
- package/dist/credits.d.ts +54 -0
- package/dist/credits.d.ts.map +1 -0
- package/dist/credits.js +209 -0
- package/dist/credits.js.map +1 -0
- package/dist/discovery.d.ts +37 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +109 -0
- package/dist/discovery.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +355 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/apis.json +20894 -0
- package/dist/registry/parse_apis.py +146 -0
- package/dist/revenuecat.d.ts +61 -0
- package/dist/revenuecat.d.ts.map +1 -0
- package/dist/revenuecat.js +166 -0
- package/dist/revenuecat.js.map +1 -0
- package/dist/test.d.ts +6 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +81 -0
- package/dist/test.js.map +1 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/webhooks/revenuecat.d.ts +48 -0
- package/dist/webhooks/revenuecat.d.ts.map +1 -0
- package/dist/webhooks/revenuecat.js +119 -0
- package/dist/webhooks/revenuecat.js.map +1 -0
- package/docs/revenuecat-setup.md +89 -0
- package/landing/next-env.d.ts +5 -0
- package/landing/next.config.mjs +6 -0
- package/landing/package-lock.json +1666 -0
- package/landing/package.json +27 -0
- package/landing/postcss.config.js +6 -0
- package/landing/src/app/api/keys/route.ts +71 -0
- package/landing/src/app/api/log/route.ts +37 -0
- package/landing/src/app/api/stats/route.ts +37 -0
- package/landing/src/app/globals.css +261 -0
- package/landing/src/app/layout.tsx +37 -0
- package/landing/src/app/page.tsx +753 -0
- package/landing/src/app/page.tsx.bak +567 -0
- package/landing/src/components/AddKeyModal.tsx +159 -0
- package/landing/tailwind.config.ts +34 -0
- package/landing/tsconfig.json +20 -0
- package/newsletter-template.html +71 -0
- package/outreach/OUTREACH-SYSTEM.md +211 -0
- package/outreach/email-template.html +179 -0
- package/outreach/targets.md +133 -0
- package/package.json +39 -0
- package/src/credits.ts +261 -0
- package/src/discovery.ts +147 -0
- package/src/index.ts +396 -0
- package/src/registry/apis.json +20894 -0
- package/src/registry/parse_apis.py +146 -0
- package/src/revenuecat.ts +239 -0
- package/src/test.ts +97 -0
- package/src/types.ts +110 -0
- package/src/webhooks/revenuecat.ts +187 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,753 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from "react";
|
|
4
|
+
import {
|
|
5
|
+
MessageSquare, Mail, Search, Cpu, Volume2,
|
|
6
|
+
ArrowRight, Zap, Shield, Terminal, ExternalLink,
|
|
7
|
+
Github, Check, Twitter, Quote, Sparkles, Code2, Wallet, Plus,
|
|
8
|
+
Sun, Moon
|
|
9
|
+
} from "lucide-react";
|
|
10
|
+
|
|
11
|
+
const apis = [
|
|
12
|
+
{ name: "46elks", category: "SMS", flag: "🇸🇪", color: "text-blue-400" },
|
|
13
|
+
{ name: "Resend", category: "Email", icon: Mail, color: "text-purple-400" },
|
|
14
|
+
{ name: "Brave Search", category: "Search", icon: Search, color: "text-orange-400" },
|
|
15
|
+
{ name: "OpenRouter", category: "LLM", icon: Cpu, color: "text-cyan-400" },
|
|
16
|
+
{ name: "ElevenLabs", category: "TTS", icon: Volume2, color: "text-pink-400" },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const testimonials = [
|
|
20
|
+
{
|
|
21
|
+
quote: "Found 14 SMS providers in 0.2s. Picked 46elks. Sent the message. Done.",
|
|
22
|
+
author: "Claude 3.5",
|
|
23
|
+
handle: "Anthropic agent",
|
|
24
|
+
avatar: "🤖"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
quote: "My agent used to ask me for API keys. Now it just... gets them. I almost miss being needed.",
|
|
28
|
+
author: "ML Engineer",
|
|
29
|
+
handle: "YC W24 startup",
|
|
30
|
+
avatar: "🧑💻"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
quote: "Searched 'weather EU compliant'. Got 3 options with pricing. Picked one. Shipped.",
|
|
34
|
+
author: "GPT-4o",
|
|
35
|
+
handle: "OpenAI agent",
|
|
36
|
+
avatar: "🧠"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
quote: "We removed 400 lines of API discovery code. APIClaw just handles it.",
|
|
40
|
+
author: "Infra Lead",
|
|
41
|
+
handle: "Series B fintech",
|
|
42
|
+
avatar: "🚀"
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
const features = [
|
|
47
|
+
{
|
|
48
|
+
icon: Search,
|
|
49
|
+
title: "Discovery",
|
|
50
|
+
description: "Agents query capabilities, not product names. 'I need EU SMS' returns ranked options."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
icon: Code2,
|
|
54
|
+
title: "Evaluation",
|
|
55
|
+
description: "Pricing, rate limits, regions, compliance—all in structured, agent-readable format."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
icon: Wallet,
|
|
59
|
+
title: "Purchase",
|
|
60
|
+
description: "Instant credential provisioning via USDC on Base. No signups. No dashboards."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
icon: Sparkles,
|
|
64
|
+
title: "Integration",
|
|
65
|
+
description: "MCP-native. Works with Claude, GPT, and any agent that speaks the protocol."
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
const steps = [
|
|
70
|
+
{
|
|
71
|
+
step: "1",
|
|
72
|
+
title: "Agent asks",
|
|
73
|
+
description: '"I need to send SMS"',
|
|
74
|
+
code: `agent.call("apiclaw", {
|
|
75
|
+
capability: "sms",
|
|
76
|
+
region: "EU"
|
|
77
|
+
})`,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
step: "2",
|
|
81
|
+
title: "APIClaw returns",
|
|
82
|
+
description: "Ranked options with pricing",
|
|
83
|
+
code: `{
|
|
84
|
+
"apis": [
|
|
85
|
+
{ "name": "46elks", "price": "$0.07" },
|
|
86
|
+
{ "name": "twilio", "price": "$0.09" }
|
|
87
|
+
]
|
|
88
|
+
}`,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
step: "3",
|
|
92
|
+
title: "Agent purchases",
|
|
93
|
+
description: "Instant credentials via USDC",
|
|
94
|
+
code: `agent.purchase({
|
|
95
|
+
api: "46elks",
|
|
96
|
+
payment: "usdc-base",
|
|
97
|
+
amount: 100
|
|
98
|
+
})`,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
step: "4",
|
|
102
|
+
title: "Done",
|
|
103
|
+
description: "API ready to use",
|
|
104
|
+
code: `{
|
|
105
|
+
"status": "active",
|
|
106
|
+
"credentials": { ... },
|
|
107
|
+
"ready": true
|
|
108
|
+
}`,
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
export default function Home() {
|
|
113
|
+
const [isDark, setIsDark] = useState(true);
|
|
114
|
+
const [stats, setStats] = useState({ apis: 1490, categories: 52 });
|
|
115
|
+
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
document.documentElement.classList.toggle('light', !isDark);
|
|
118
|
+
}, [isDark]);
|
|
119
|
+
|
|
120
|
+
useEffect(() => {
|
|
121
|
+
fetch('/api/stats')
|
|
122
|
+
.then(res => res.json())
|
|
123
|
+
.then(data => setStats(data))
|
|
124
|
+
.catch(() => {});
|
|
125
|
+
|
|
126
|
+
// Log page view
|
|
127
|
+
fetch('/api/log', {
|
|
128
|
+
method: 'POST',
|
|
129
|
+
headers: { 'Content-Type': 'application/json' },
|
|
130
|
+
body: JSON.stringify({ event: 'page_view', data: { page: 'landing' } })
|
|
131
|
+
}).catch(() => {});
|
|
132
|
+
}, []);
|
|
133
|
+
|
|
134
|
+
return (
|
|
135
|
+
<main className="min-h-screen">
|
|
136
|
+
{/* Header */}
|
|
137
|
+
<header className="fixed top-0 w-full z-50 bg-background/90 backdrop-blur-xl border-b border-border-subtle">
|
|
138
|
+
<div className="max-w-6xl mx-auto px-6 py-4 flex items-center justify-between">
|
|
139
|
+
<div className="flex items-center gap-3">
|
|
140
|
+
<div className="w-9 h-9 rounded-xl bg-accent/20 flex items-center justify-center">
|
|
141
|
+
<span className="text-xl">🦞</span>
|
|
142
|
+
</div>
|
|
143
|
+
<span className="font-bold text-lg tracking-tight">APIClaw</span>
|
|
144
|
+
<span className="px-2 py-0.5 text-xs font-semibold bg-accent/20 text-accent rounded-full">Beta</span>
|
|
145
|
+
</div>
|
|
146
|
+
<nav className="hidden md:flex items-center gap-8 text-sm text-text-muted">
|
|
147
|
+
<a href="#features" className="hover:text-text-primary transition">Features</a>
|
|
148
|
+
<a href="#quick-start" className="hover:text-text-primary transition">Quick Start</a>
|
|
149
|
+
<a href="#apis" className="hover:text-text-primary transition">APIs</a>
|
|
150
|
+
<a href="#pricing" className="hover:text-text-primary transition">Pricing</a>
|
|
151
|
+
</nav>
|
|
152
|
+
<button
|
|
153
|
+
onClick={() => setIsDark(!isDark)}
|
|
154
|
+
className="w-9 h-9 rounded-lg bg-surface-elevated border border-border flex items-center justify-center text-text-muted hover:text-text-primary transition"
|
|
155
|
+
aria-label="Toggle theme"
|
|
156
|
+
>
|
|
157
|
+
{isDark ? <Sun className="w-4 h-4" /> : <Moon className="w-4 h-4" />}
|
|
158
|
+
</button>
|
|
159
|
+
<a
|
|
160
|
+
href="https://github.com/nordsym/apiclaw"
|
|
161
|
+
target="_blank"
|
|
162
|
+
rel="noopener noreferrer"
|
|
163
|
+
className="btn-secondary !py-2 !px-4 text-sm"
|
|
164
|
+
>
|
|
165
|
+
<Github className="w-4 h-4" />
|
|
166
|
+
<span>GitHub</span>
|
|
167
|
+
</a>
|
|
168
|
+
</div>
|
|
169
|
+
</header>
|
|
170
|
+
|
|
171
|
+
{/* Hero */}
|
|
172
|
+
<section className="pt-36 pb-24 px-6">
|
|
173
|
+
<div className="max-w-4xl mx-auto text-center">
|
|
174
|
+
<div className="badge mb-8">
|
|
175
|
+
<Terminal className="w-4 h-4" />
|
|
176
|
+
<span>The API layer for autonomous agents</span>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<h1 className="text-5xl md:text-7xl font-extrabold mb-6 leading-[1.1] tracking-tighter">
|
|
180
|
+
<span className="gradient-text">APIs for Agents</span>
|
|
181
|
+
</h1>
|
|
182
|
+
|
|
183
|
+
<p className="text-xl md:text-2xl text-text-secondary mb-4 max-w-2xl mx-auto leading-relaxed">
|
|
184
|
+
Agents discover, evaluate, and connect to APIs directly.
|
|
185
|
+
</p>
|
|
186
|
+
<p className="text-lg text-text-muted mb-12">
|
|
187
|
+
No dashboards. No signups. Just APIs.
|
|
188
|
+
</p>
|
|
189
|
+
|
|
190
|
+
<div className="flex flex-col sm:flex-row items-center justify-center gap-4 mb-8">
|
|
191
|
+
<a
|
|
192
|
+
href="https://github.com/nordsym/apiclaw"
|
|
193
|
+
target="_blank"
|
|
194
|
+
rel="noopener noreferrer"
|
|
195
|
+
className="btn-primary glow"
|
|
196
|
+
>
|
|
197
|
+
<Github className="w-5 h-5" />
|
|
198
|
+
View on GitHub
|
|
199
|
+
</a>
|
|
200
|
+
<button className="btn-secondary">
|
|
201
|
+
<span>Add to Claude</span>
|
|
202
|
+
<ArrowRight className="w-4 h-4" />
|
|
203
|
+
</button>
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
<p className="text-sm text-text-muted">
|
|
207
|
+
Apps are dead. API-first. Agent-native.
|
|
208
|
+
</p>
|
|
209
|
+
</div>
|
|
210
|
+
</section>
|
|
211
|
+
|
|
212
|
+
{/* Live Stats */}
|
|
213
|
+
<section className="pb-20 px-6">
|
|
214
|
+
<div className="max-w-4xl mx-auto">
|
|
215
|
+
<div className="flex flex-wrap items-center justify-center gap-6">
|
|
216
|
+
<div className="flex items-center gap-2">
|
|
217
|
+
<span className="text-3xl font-bold text-accent">{stats.apis.toLocaleString()}+</span>
|
|
218
|
+
<span className="text-text-muted">APIs</span>
|
|
219
|
+
</div>
|
|
220
|
+
<div className="w-px h-8 bg-border hidden sm:block" />
|
|
221
|
+
<div className="flex items-center gap-2">
|
|
222
|
+
<span className="text-3xl font-bold">{stats.categories}</span>
|
|
223
|
+
<span className="text-text-muted">Categories</span>
|
|
224
|
+
</div>
|
|
225
|
+
<div className="w-px h-8 bg-border hidden sm:block" />
|
|
226
|
+
<div className="flex items-center gap-2">
|
|
227
|
+
<span className="text-3xl font-bold text-green-500">Live</span>
|
|
228
|
+
<span className="text-text-muted">Registry</span>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</section>
|
|
233
|
+
|
|
234
|
+
<div className="divider" />
|
|
235
|
+
|
|
236
|
+
{/* What People Say */}
|
|
237
|
+
<section className="py-24 px-6">
|
|
238
|
+
<div className="max-w-6xl mx-auto">
|
|
239
|
+
<div className="text-center mb-16">
|
|
240
|
+
<span className="section-label">TESTIMONIALS</span>
|
|
241
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">What People Say</h2>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
<div className="grid md:grid-cols-3 gap-6">
|
|
245
|
+
{testimonials.map((t, i) => (
|
|
246
|
+
<div key={i} className="testimonial-card rounded-2xl p-6">
|
|
247
|
+
<Quote className="w-8 h-8 text-accent/30 mb-4" />
|
|
248
|
+
<p className="text-text-secondary mb-6 leading-relaxed">"{t.quote}"</p>
|
|
249
|
+
<div className="flex items-center gap-3">
|
|
250
|
+
<div className="w-10 h-10 rounded-full bg-surface flex items-center justify-center text-xl">
|
|
251
|
+
{t.avatar}
|
|
252
|
+
</div>
|
|
253
|
+
<div>
|
|
254
|
+
<p className="font-medium text-sm">{t.author}</p>
|
|
255
|
+
<p className="text-text-muted text-sm">{t.handle}</p>
|
|
256
|
+
</div>
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
))}
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
</section>
|
|
263
|
+
|
|
264
|
+
<div className="divider" />
|
|
265
|
+
|
|
266
|
+
{/* Quick Start */}
|
|
267
|
+
<section id="quick-start" className="py-24 px-6">
|
|
268
|
+
<div className="max-w-4xl mx-auto">
|
|
269
|
+
<div className="text-center mb-16">
|
|
270
|
+
<span className="section-label">QUICK START</span>
|
|
271
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">Up and running in seconds</h2>
|
|
272
|
+
</div>
|
|
273
|
+
|
|
274
|
+
<div className="terminal glow-subtle">
|
|
275
|
+
<div className="terminal-header">
|
|
276
|
+
<div className="terminal-dot terminal-dot-red" />
|
|
277
|
+
<div className="terminal-dot terminal-dot-yellow" />
|
|
278
|
+
<div className="terminal-dot terminal-dot-green" />
|
|
279
|
+
</div>
|
|
280
|
+
<div className="terminal-body">
|
|
281
|
+
<div className="mb-4">
|
|
282
|
+
<span className="terminal-prompt">$ </span>
|
|
283
|
+
<span className="terminal-command">npx @nordsym/apiclaw init</span>
|
|
284
|
+
</div>
|
|
285
|
+
<div className="terminal-output mb-4">
|
|
286
|
+
✓ APIClaw MCP server installed<br />
|
|
287
|
+
✓ Configuration file created<br />
|
|
288
|
+
✓ Ready to connect to Claude Desktop
|
|
289
|
+
</div>
|
|
290
|
+
<div className="mb-4">
|
|
291
|
+
<span className="terminal-prompt">$ </span>
|
|
292
|
+
<span className="terminal-command">npx @nordsym/apiclaw start</span>
|
|
293
|
+
</div>
|
|
294
|
+
<div className="terminal-output">
|
|
295
|
+
🚀 APIClaw running on MCP<br />
|
|
296
|
+
📡 Listening for agent requests...<br />
|
|
297
|
+
<br />
|
|
298
|
+
<span className="text-accent">→ Add to Claude: Settings → MCP Servers → Add</span>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<div className="text-center mt-8">
|
|
304
|
+
<a
|
|
305
|
+
href="https://github.com/nordsym/apiclaw#installation"
|
|
306
|
+
target="_blank"
|
|
307
|
+
rel="noopener noreferrer"
|
|
308
|
+
className="text-accent hover:underline inline-flex items-center gap-2"
|
|
309
|
+
>
|
|
310
|
+
View full documentation
|
|
311
|
+
<ExternalLink className="w-4 h-4" />
|
|
312
|
+
</a>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
</section>
|
|
316
|
+
|
|
317
|
+
<div className="divider" />
|
|
318
|
+
|
|
319
|
+
{/* Features */}
|
|
320
|
+
<section id="features" className="py-24 px-6 bg-surface/30">
|
|
321
|
+
<div className="max-w-6xl mx-auto">
|
|
322
|
+
<div className="text-center mb-16">
|
|
323
|
+
<span className="section-label">FEATURES</span>
|
|
324
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">Built for the agentic era</h2>
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
328
|
+
{features.map((f, i) => (
|
|
329
|
+
<div key={i} className="card-hover rounded-2xl bg-surface-elevated border border-border p-6">
|
|
330
|
+
<div className="w-12 h-12 rounded-xl bg-accent/10 flex items-center justify-center mb-4">
|
|
331
|
+
<f.icon className="w-6 h-6 text-accent" />
|
|
332
|
+
</div>
|
|
333
|
+
<h3 className="font-semibold text-lg mb-2">{f.title}</h3>
|
|
334
|
+
<p className="text-text-secondary text-sm leading-relaxed">{f.description}</p>
|
|
335
|
+
</div>
|
|
336
|
+
))}
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
</section>
|
|
340
|
+
|
|
341
|
+
{/* How it works */}
|
|
342
|
+
<section id="how-it-works" className="py-24 px-6">
|
|
343
|
+
<div className="max-w-6xl mx-auto">
|
|
344
|
+
<div className="text-center mb-16">
|
|
345
|
+
<span className="section-label">HOW IT WORKS</span>
|
|
346
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">Four lines of agent code</h2>
|
|
347
|
+
<p className="text-text-secondary text-lg mt-4">That's it.</p>
|
|
348
|
+
</div>
|
|
349
|
+
|
|
350
|
+
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
|
|
351
|
+
{steps.map((item, i) => (
|
|
352
|
+
<div key={i} className="card-hover rounded-2xl bg-surface-elevated border border-border p-6">
|
|
353
|
+
<div className="w-10 h-10 rounded-full bg-accent/20 text-accent font-bold flex items-center justify-center mb-4">
|
|
354
|
+
{item.step}
|
|
355
|
+
</div>
|
|
356
|
+
<h3 className="font-semibold text-lg mb-2">{item.title}</h3>
|
|
357
|
+
<p className="text-text-secondary text-sm mb-4">{item.description}</p>
|
|
358
|
+
<div className="code-block rounded-lg p-3">
|
|
359
|
+
<pre className="text-xs font-mono text-text-muted overflow-x-auto">
|
|
360
|
+
{item.code}
|
|
361
|
+
</pre>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
))}
|
|
365
|
+
</div>
|
|
366
|
+
</div>
|
|
367
|
+
</section>
|
|
368
|
+
|
|
369
|
+
<div className="divider" />
|
|
370
|
+
|
|
371
|
+
{/* Supported APIs */}
|
|
372
|
+
<section id="apis" className="py-24 px-6 bg-surface/30">
|
|
373
|
+
<div className="max-w-6xl mx-auto">
|
|
374
|
+
<div className="text-center mb-16">
|
|
375
|
+
<span className="section-label">API CATALOG</span>
|
|
376
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">Supported APIs</h2>
|
|
377
|
+
<p className="text-text-secondary text-lg mt-4">1,400+ APIs across 50 categories. Growing daily.</p>
|
|
378
|
+
</div>
|
|
379
|
+
|
|
380
|
+
<div className="grid sm:grid-cols-2 lg:grid-cols-5 gap-4">
|
|
381
|
+
{apis.map((api, i) => (
|
|
382
|
+
<div
|
|
383
|
+
key={i}
|
|
384
|
+
className="card-hover rounded-xl bg-surface-elevated border border-border p-5 text-center"
|
|
385
|
+
>
|
|
386
|
+
<div className={`w-12 h-12 rounded-xl bg-surface flex items-center justify-center mx-auto mb-3 ${api.color}`}>
|
|
387
|
+
{api.flag ? (
|
|
388
|
+
<span className="text-2xl">{api.flag}</span>
|
|
389
|
+
) : api.icon ? (
|
|
390
|
+
<api.icon className="w-6 h-6" />
|
|
391
|
+
) : null}
|
|
392
|
+
</div>
|
|
393
|
+
<h3 className="font-semibold">{api.name}</h3>
|
|
394
|
+
<p className="text-text-muted text-sm">{api.category}</p>
|
|
395
|
+
</div>
|
|
396
|
+
))}
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<p className="text-center text-text-muted mt-8">
|
|
400
|
+
+ Stripe, Twilio, SendGrid, Anthropic, OpenAI, and more...
|
|
401
|
+
</p>
|
|
402
|
+
</div>
|
|
403
|
+
</section>
|
|
404
|
+
|
|
405
|
+
{/* Pricing */}
|
|
406
|
+
<section id="pricing" className="py-24 px-6">
|
|
407
|
+
<div className="max-w-5xl mx-auto">
|
|
408
|
+
<div className="text-center mb-16">
|
|
409
|
+
<span className="section-label">PRICING</span>
|
|
410
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">Free for agents. Simple fees for providers.</h2>
|
|
411
|
+
<p className="text-text-secondary text-lg mt-4">We make money when API providers reach the agent market.</p>
|
|
412
|
+
</div>
|
|
413
|
+
|
|
414
|
+
<div className="grid md:grid-cols-2 gap-8">
|
|
415
|
+
{/* For Agents */}
|
|
416
|
+
<div className="rounded-2xl bg-surface-elevated border border-border p-8">
|
|
417
|
+
<div className="text-sm text-accent font-semibold mb-4">FOR AGENTS & DEVELOPERS</div>
|
|
418
|
+
<h3 className="text-2xl font-bold mb-2">Always Free</h3>
|
|
419
|
+
<p className="text-text-secondary mb-6">Discover and connect to 1,400+ APIs</p>
|
|
420
|
+
<div className="text-4xl font-bold mb-6">
|
|
421
|
+
$0<span className="text-lg text-text-muted font-normal"> forever</span>
|
|
422
|
+
</div>
|
|
423
|
+
<ul className="space-y-3 mb-8">
|
|
424
|
+
<li className="flex items-center gap-3 text-text-secondary">
|
|
425
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
426
|
+
Full API discovery
|
|
427
|
+
</li>
|
|
428
|
+
<li className="flex items-center gap-3 text-text-secondary">
|
|
429
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
430
|
+
MCP integration
|
|
431
|
+
</li>
|
|
432
|
+
<li className="flex items-center gap-3 text-text-secondary">
|
|
433
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
434
|
+
Pricing & capability comparison
|
|
435
|
+
</li>
|
|
436
|
+
<li className="flex items-center gap-3 text-text-secondary">
|
|
437
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
438
|
+
Community support
|
|
439
|
+
</li>
|
|
440
|
+
</ul>
|
|
441
|
+
<a
|
|
442
|
+
href="https://github.com/nordsym/apiclaw#installation"
|
|
443
|
+
target="_blank"
|
|
444
|
+
rel="noopener noreferrer"
|
|
445
|
+
className="btn-secondary w-full justify-center"
|
|
446
|
+
>
|
|
447
|
+
Get started free
|
|
448
|
+
</a>
|
|
449
|
+
</div>
|
|
450
|
+
|
|
451
|
+
{/* For API Providers - two sub-tiers */}
|
|
452
|
+
<div className="space-y-4">
|
|
453
|
+
<div className="text-sm text-accent font-semibold mb-2">FOR API PROVIDERS</div>
|
|
454
|
+
|
|
455
|
+
{/* Basic */}
|
|
456
|
+
<div className="rounded-xl bg-surface border border-border p-6">
|
|
457
|
+
<div className="flex items-center justify-between mb-3">
|
|
458
|
+
<h3 className="text-lg font-semibold">Basic Listing</h3>
|
|
459
|
+
<span className="text-text-muted font-bold">Free</span>
|
|
460
|
+
</div>
|
|
461
|
+
<p className="text-text-secondary text-sm mb-4">We index public APIs automatically</p>
|
|
462
|
+
<ul className="space-y-2 text-sm">
|
|
463
|
+
<li className="flex items-center gap-2 text-text-secondary">
|
|
464
|
+
<Check className="w-4 h-4 text-accent flex-shrink-0" />
|
|
465
|
+
Included in discovery
|
|
466
|
+
</li>
|
|
467
|
+
<li className="flex items-center gap-2 text-text-secondary">
|
|
468
|
+
<Check className="w-4 h-4 text-accent flex-shrink-0" />
|
|
469
|
+
Basic API info
|
|
470
|
+
</li>
|
|
471
|
+
</ul>
|
|
472
|
+
</div>
|
|
473
|
+
|
|
474
|
+
{/* Partner */}
|
|
475
|
+
<div className="rounded-xl bg-surface-elevated border border-accent/50 p-6 relative glow">
|
|
476
|
+
<div className="absolute -top-2 right-4 px-2 py-0.5 bg-accent text-background text-xs font-bold tracking-wide rounded-full uppercase">
|
|
477
|
+
Partner
|
|
478
|
+
</div>
|
|
479
|
+
<div className="flex items-center justify-between mb-3">
|
|
480
|
+
<h3 className="text-lg font-semibold">Partner Listing</h3>
|
|
481
|
+
<span className="text-accent font-bold">5% rev share</span>
|
|
482
|
+
</div>
|
|
483
|
+
<p className="text-text-secondary text-sm mb-4">Active partnership with premium benefits</p>
|
|
484
|
+
<ul className="space-y-2 text-sm mb-4">
|
|
485
|
+
<li className="flex items-center gap-2 text-text-secondary">
|
|
486
|
+
<Check className="w-4 h-4 text-accent flex-shrink-0" />
|
|
487
|
+
Verified badge ✓
|
|
488
|
+
</li>
|
|
489
|
+
<li className="flex items-center gap-2 text-text-secondary">
|
|
490
|
+
<Check className="w-4 h-4 text-accent flex-shrink-0" />
|
|
491
|
+
Priority placement
|
|
492
|
+
</li>
|
|
493
|
+
<li className="flex items-center gap-2 text-text-secondary">
|
|
494
|
+
<Check className="w-4 h-4 text-accent flex-shrink-0" />
|
|
495
|
+
Usage analytics
|
|
496
|
+
</li>
|
|
497
|
+
<li className="flex items-center gap-2 text-text-secondary">
|
|
498
|
+
<Plus className="w-4 h-4 text-accent flex-shrink-0" />
|
|
499
|
+
More benefits coming
|
|
500
|
+
</li>
|
|
501
|
+
</ul>
|
|
502
|
+
<a
|
|
503
|
+
href="https://github.com/nordsym/apiclaw/issues/new?template=add-api.yml"
|
|
504
|
+
target="_blank"
|
|
505
|
+
rel="noopener noreferrer"
|
|
506
|
+
className="btn-primary w-full justify-center text-sm"
|
|
507
|
+
>
|
|
508
|
+
Become a Partner
|
|
509
|
+
</a>
|
|
510
|
+
</div>
|
|
511
|
+
</div>
|
|
512
|
+
</div>
|
|
513
|
+
|
|
514
|
+
{/* Bottom note */}
|
|
515
|
+
<div className="text-center mt-12 text-text-muted">
|
|
516
|
+
<p>We index the web. Partners get premium. 🦞</p>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
</section>
|
|
520
|
+
|
|
521
|
+
<div className="divider" />
|
|
522
|
+
|
|
523
|
+
{/* FAQ */}
|
|
524
|
+
<section id="faq" className="py-24 px-6">
|
|
525
|
+
<div className="max-w-3xl mx-auto">
|
|
526
|
+
<div className="text-center mb-16">
|
|
527
|
+
<span className="section-label">FAQ</span>
|
|
528
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">Questions & Answers</h2>
|
|
529
|
+
</div>
|
|
530
|
+
|
|
531
|
+
<div className="space-y-6">
|
|
532
|
+
{[
|
|
533
|
+
{
|
|
534
|
+
q: "What is APIClaw?",
|
|
535
|
+
a: "APIClaw is an API marketplace built for autonomous agents. Instead of humans browsing documentation, agents discover and evaluate APIs programmatically via MCP (Model Context Protocol)."
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
q: "Is it free?",
|
|
539
|
+
a: "Yes! Discovery is completely free for agents and developers. API providers who want premium placement pay a 5% revenue share."
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
q: "How do I add APIClaw to my agent?",
|
|
543
|
+
a: "Install the MCP server with 'npx @nordsym/apiclaw init' and add it to your Claude config. Your agent can then discover APIs by capability, not by name."
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
q: "What APIs are available?",
|
|
547
|
+
a: "We index 1,400+ public APIs across 52 categories including SMS, Email, Search, LLM, TTS, Payments, Weather, and more. The registry grows daily."
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
q: "How do I list my API?",
|
|
551
|
+
a: "Submit a PR to our GitHub repo or use the 'List Your API' form below. Basic listings are free. Partner listings with premium placement are 5% revenue share."
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
q: "Is this related to OpenClaw?",
|
|
555
|
+
a: "APIClaw is part of the OpenClaw universe and built with MCP compatibility in mind. Think of it as specialized infrastructure for the agentic era."
|
|
556
|
+
},
|
|
557
|
+
].map((faq, i) => (
|
|
558
|
+
<div key={i} className="rounded-xl bg-surface-elevated border border-border p-6">
|
|
559
|
+
<h3 className="font-semibold text-lg mb-2">{faq.q}</h3>
|
|
560
|
+
<p className="text-text-secondary">{faq.a}</p>
|
|
561
|
+
</div>
|
|
562
|
+
))}
|
|
563
|
+
</div>
|
|
564
|
+
</div>
|
|
565
|
+
</section>
|
|
566
|
+
|
|
567
|
+
<div className="divider" />
|
|
568
|
+
|
|
569
|
+
{/* Stay in the Loop */}
|
|
570
|
+
<section className="py-24 px-6">
|
|
571
|
+
<div className="max-w-xl mx-auto text-center">
|
|
572
|
+
<span className="section-label">NEWSLETTER</span>
|
|
573
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 mb-4 tracking-tight">Stay in the Loop</h2>
|
|
574
|
+
<p className="text-text-secondary mb-8">
|
|
575
|
+
Get updates on new features, integrations, and lobster wisdom. No spam, unsubscribe anytime.
|
|
576
|
+
</p>
|
|
577
|
+
|
|
578
|
+
<form className="flex flex-col sm:flex-row gap-3" onSubmit={(e) => e.preventDefault()}>
|
|
579
|
+
<input
|
|
580
|
+
type="email"
|
|
581
|
+
placeholder="you@company.com"
|
|
582
|
+
className="flex-1 px-4 py-3 rounded-xl text-text-primary"
|
|
583
|
+
/>
|
|
584
|
+
<button type="submit" className="btn-primary flex-shrink-0 justify-center">
|
|
585
|
+
<Sparkles className="w-4 h-4" />
|
|
586
|
+
Subscribe
|
|
587
|
+
</button>
|
|
588
|
+
</form>
|
|
589
|
+
|
|
590
|
+
<p className="text-text-muted text-sm mt-4">
|
|
591
|
+
No spam. Unsubscribe anytime.
|
|
592
|
+
</p>
|
|
593
|
+
</div>
|
|
594
|
+
</section>
|
|
595
|
+
|
|
596
|
+
{/* List Your API */}
|
|
597
|
+
<section className="py-24 px-6">
|
|
598
|
+
<div className="max-w-2xl mx-auto text-center">
|
|
599
|
+
<div className="w-16 h-16 rounded-2xl bg-accent/10 flex items-center justify-center mx-auto mb-6">
|
|
600
|
+
<Plus className="w-8 h-8 text-accent" />
|
|
601
|
+
</div>
|
|
602
|
+
<span className="section-label">FOR API PROVIDERS</span>
|
|
603
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 mb-4 tracking-tight">List Your API</h2>
|
|
604
|
+
<p className="text-text-secondary text-lg mb-8">
|
|
605
|
+
Are you an API provider? Get your API in front of thousands of AI agents.
|
|
606
|
+
Join the marketplace where agents discover and purchase API access autonomously.
|
|
607
|
+
</p>
|
|
608
|
+
<a
|
|
609
|
+
href="https://github.com/nordsym/apiclaw/issues/new?template=add-api.yml"
|
|
610
|
+
target="_blank"
|
|
611
|
+
rel="noopener noreferrer"
|
|
612
|
+
className="btn-primary inline-flex"
|
|
613
|
+
>
|
|
614
|
+
Submit your API
|
|
615
|
+
<ArrowRight className="w-4 h-4" />
|
|
616
|
+
</a>
|
|
617
|
+
<p className="text-text-muted text-sm mt-6">
|
|
618
|
+
Free to list. We review submissions within 48 hours.
|
|
619
|
+
</p>
|
|
620
|
+
</div>
|
|
621
|
+
</section>
|
|
622
|
+
|
|
623
|
+
<div className="divider" />
|
|
624
|
+
|
|
625
|
+
{/* CTA */}
|
|
626
|
+
<section className="py-24 px-6 bg-surface/30">
|
|
627
|
+
<div className="max-w-2xl mx-auto text-center">
|
|
628
|
+
<h2 className="text-3xl md:text-4xl font-bold mb-6 tracking-tight">Ready to go agent-native?</h2>
|
|
629
|
+
<p className="text-text-secondary text-lg mb-8">
|
|
630
|
+
Join the waitlist for early access and shape the future of agent commerce.
|
|
631
|
+
</p>
|
|
632
|
+
<div className="flex flex-col sm:flex-row items-center justify-center gap-4">
|
|
633
|
+
<a
|
|
634
|
+
href="https://github.com/nordsym/apiclaw"
|
|
635
|
+
target="_blank"
|
|
636
|
+
rel="noopener noreferrer"
|
|
637
|
+
className="btn-primary"
|
|
638
|
+
>
|
|
639
|
+
<Github className="w-5 h-5" />
|
|
640
|
+
Star on GitHub
|
|
641
|
+
</a>
|
|
642
|
+
<button className="btn-secondary">
|
|
643
|
+
Join waitlist
|
|
644
|
+
<ArrowRight className="w-4 h-4" />
|
|
645
|
+
</button>
|
|
646
|
+
</div>
|
|
647
|
+
</div>
|
|
648
|
+
</section>
|
|
649
|
+
|
|
650
|
+
{/* Footer */}
|
|
651
|
+
<footer className="border-t border-border py-16 px-6">
|
|
652
|
+
<div className="max-w-6xl mx-auto">
|
|
653
|
+
<div className="grid md:grid-cols-4 gap-12 mb-12">
|
|
654
|
+
{/* Brand */}
|
|
655
|
+
<div className="md:col-span-2">
|
|
656
|
+
<div className="flex items-center gap-3 mb-4">
|
|
657
|
+
<div className="w-9 h-9 rounded-xl bg-accent/20 flex items-center justify-center">
|
|
658
|
+
<span className="text-xl">🦞</span>
|
|
659
|
+
</div>
|
|
660
|
+
<span className="font-bold text-lg tracking-tight">APIClaw</span>
|
|
661
|
+
</div>
|
|
662
|
+
<p className="text-text-muted mb-6 max-w-sm">
|
|
663
|
+
The API marketplace built for autonomous agents. Discover, evaluate, and purchase—all without human intervention.
|
|
664
|
+
</p>
|
|
665
|
+
<div className="flex items-center gap-4">
|
|
666
|
+
<a
|
|
667
|
+
href="https://github.com/nordsym/apiclaw"
|
|
668
|
+
target="_blank"
|
|
669
|
+
rel="noopener noreferrer"
|
|
670
|
+
className="w-10 h-10 rounded-lg bg-surface-elevated border border-border flex items-center justify-center text-text-muted hover:text-text-primary hover:border-accent/50 transition"
|
|
671
|
+
>
|
|
672
|
+
<Github className="w-5 h-5" />
|
|
673
|
+
</a>
|
|
674
|
+
<a
|
|
675
|
+
href="https://twitter.com/nordsym"
|
|
676
|
+
target="_blank"
|
|
677
|
+
rel="noopener noreferrer"
|
|
678
|
+
className="w-10 h-10 rounded-lg bg-surface-elevated border border-border flex items-center justify-center text-text-muted hover:text-text-primary hover:border-accent/50 transition"
|
|
679
|
+
>
|
|
680
|
+
<Twitter className="w-5 h-5" />
|
|
681
|
+
</a>
|
|
682
|
+
</div>
|
|
683
|
+
</div>
|
|
684
|
+
|
|
685
|
+
{/* Links */}
|
|
686
|
+
<div>
|
|
687
|
+
<h4 className="font-semibold mb-4">Product</h4>
|
|
688
|
+
<ul className="space-y-3 text-text-muted">
|
|
689
|
+
<li><a href="#features" className="hover:text-text-primary transition">Features</a></li>
|
|
690
|
+
<li><a href="#pricing" className="hover:text-text-primary transition">Pricing</a></li>
|
|
691
|
+
<li><a href="#apis" className="hover:text-text-primary transition">API Catalog</a></li>
|
|
692
|
+
<li><a href="https://github.com/nordsym/apiclaw#installation" target="_blank" rel="noopener noreferrer" className="hover:text-text-primary transition">Documentation</a></li>
|
|
693
|
+
</ul>
|
|
694
|
+
</div>
|
|
695
|
+
|
|
696
|
+
<div>
|
|
697
|
+
<h4 className="font-semibold mb-4">Company</h4>
|
|
698
|
+
<ul className="space-y-3 text-text-muted">
|
|
699
|
+
<li><a href="https://nordsym.se" target="_blank" rel="noopener noreferrer" className="hover:text-text-primary transition">NordSym</a></li>
|
|
700
|
+
<li><a href="https://github.com/nordsym" target="_blank" rel="noopener noreferrer" className="hover:text-text-primary transition">GitHub</a></li>
|
|
701
|
+
<li><a href="https://twitter.com/nordsym" target="_blank" rel="noopener noreferrer" className="hover:text-text-primary transition">Twitter</a></li>
|
|
702
|
+
</ul>
|
|
703
|
+
</div>
|
|
704
|
+
</div>
|
|
705
|
+
|
|
706
|
+
{/* OpenClaw-style footer links */}
|
|
707
|
+
<div className="pt-8 border-t border-border text-center">
|
|
708
|
+
<div className="flex items-center justify-center gap-2 text-sm text-text-muted mb-4">
|
|
709
|
+
<a href="https://github.com/nordsym/apiclaw" className="hover:text-text-primary transition">GitHub</a>
|
|
710
|
+
<span>·</span>
|
|
711
|
+
<a href="https://github.com/nordsym/apiclaw#installation" className="hover:text-text-primary transition">Docs</a>
|
|
712
|
+
<span>·</span>
|
|
713
|
+
<a href="https://x.com/HokusPontuz" className="hover:text-text-primary transition">@HokusPontuz</a>
|
|
714
|
+
<span>·</span>
|
|
715
|
+
<a href="https://x.com/NordSym" className="hover:text-text-primary transition">@NordSym</a>
|
|
716
|
+
<span>·</span>
|
|
717
|
+
<a href="https://nordsym.com" className="hover:text-text-primary transition">NordSym</a>
|
|
718
|
+
</div>
|
|
719
|
+
<p className="text-text-muted text-sm mb-2">
|
|
720
|
+
Made with 🦞 and unreasonable amounts of ambition.
|
|
721
|
+
</p>
|
|
722
|
+
<p className="text-text-muted text-xs">
|
|
723
|
+
Part of the OpenClaw universe. Independent project.
|
|
724
|
+
</p>
|
|
725
|
+
</div>
|
|
726
|
+
</div>
|
|
727
|
+
</footer>
|
|
728
|
+
|
|
729
|
+
{/* Floating Chat Button */}
|
|
730
|
+
<a
|
|
731
|
+
href="https://t.me/SymbotAPI_bot"
|
|
732
|
+
target="_blank"
|
|
733
|
+
rel="noopener noreferrer"
|
|
734
|
+
className="fixed bottom-6 right-6 z-50 group flex items-center gap-3"
|
|
735
|
+
>
|
|
736
|
+
{/* Label - always visible */}
|
|
737
|
+
<div className="bg-surface-elevated border border-border rounded-xl px-4 py-2 shadow-lg">
|
|
738
|
+
<div className="font-medium text-sm">Talk to Symbot</div>
|
|
739
|
+
<div className="text-text-muted text-xs">The AI building this — on Telegram</div>
|
|
740
|
+
</div>
|
|
741
|
+
{/* Button */}
|
|
742
|
+
<div className="relative">
|
|
743
|
+
<div className="w-14 h-14 rounded-full bg-accent text-background flex items-center justify-center shadow-lg group-hover:scale-110 transition-transform cursor-pointer">
|
|
744
|
+
<span className="text-2xl">🦞</span>
|
|
745
|
+
</div>
|
|
746
|
+
{/* Pulse */}
|
|
747
|
+
<div className="absolute inset-0 rounded-full bg-accent animate-ping opacity-20"></div>
|
|
748
|
+
</div>
|
|
749
|
+
</a>
|
|
750
|
+
|
|
751
|
+
</main>
|
|
752
|
+
);
|
|
753
|
+
}
|