@nordsym/apiclaw 1.0.0 → 1.1.1
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/AGENTS.md +74 -0
- package/HEARTBEAT.md +4 -0
- package/IDENTITY.md +22 -0
- package/README.md +193 -202
- package/SOUL.md +36 -0
- package/STATUS.md +237 -0
- package/TOOLS.md +36 -0
- package/USER.md +17 -0
- package/{backend/convex → convex}/_generated/api.d.ts +12 -6
- package/convex/analytics.ts +90 -0
- package/convex/credits.ts +211 -0
- package/convex/http.ts +578 -0
- package/convex/providers.ts +516 -0
- package/convex/purchases.ts +183 -0
- package/convex/ratelimit.ts +104 -0
- package/convex/schema.ts +220 -0
- package/convex/telemetry.ts +81 -0
- package/convex.json +3 -0
- package/dist/credentials.d.ts +19 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +158 -0
- package/dist/credentials.js.map +1 -0
- package/dist/credits.d.ts +14 -11
- package/dist/credits.d.ts.map +1 -1
- package/dist/credits.js +151 -99
- package/dist/credits.js.map +1 -1
- package/dist/discovery.d.ts +7 -16
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +33 -40
- package/dist/discovery.js.map +1 -1
- package/dist/execute.d.ts +19 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +285 -0
- package/dist/execute.js.map +1 -0
- package/dist/index.js +175 -31
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +6 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +19 -0
- package/dist/proxy.js.map +1 -0
- package/dist/registry/apis.json +95362 -202
- package/dist/registry/apis_expanded.json +100853 -0
- package/dist/stripe.d.ts +68 -0
- package/dist/stripe.d.ts.map +1 -0
- package/dist/stripe.js +196 -0
- package/dist/stripe.js.map +1 -0
- package/dist/telemetry.d.ts +28 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +50 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/test.d.ts +3 -2
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +105 -75
- package/dist/test.js.map +1 -1
- package/dist/types.d.ts +0 -28
- package/dist/types.d.ts.map +1 -1
- package/dist/webhook.d.ts +2 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +90 -0
- package/dist/webhook.js.map +1 -0
- package/landing/DESIGN.md +343 -0
- package/landing/package-lock.json +1196 -7
- package/landing/package.json +5 -1
- package/landing/public/android-chrome-192x192.png +0 -0
- package/landing/public/android-chrome-512x512.png +0 -0
- package/landing/public/apple-touch-icon.png +0 -0
- package/landing/public/demo.gif +0 -0
- package/landing/public/demo.mp4 +0 -0
- package/landing/public/favicon-16x16.png +0 -0
- package/landing/public/favicon-32x32.png +0 -0
- package/landing/public/favicon.ico +0 -0
- package/landing/public/favicon.svg +3 -0
- package/landing/public/icon.svg +47 -0
- package/landing/public/logo-mono.svg +37 -0
- package/landing/public/logo-simple.svg +45 -0
- package/landing/public/logo.svg +84 -0
- package/landing/public/og-template.html +184 -0
- package/landing/public/site.webmanifest +31 -0
- package/landing/scripts/generate-assets.js +284 -0
- package/landing/scripts/generate-pngs.js +48 -0
- package/landing/scripts/generate-stats.js +42 -0
- package/landing/src/app/admin/page.tsx +348 -0
- package/landing/src/app/api/auth/magic-link/route.ts +73 -0
- package/landing/src/app/api/auth/session/route.ts +38 -0
- package/landing/src/app/api/auth/verify/route.ts +43 -0
- package/landing/src/app/api/og/route.tsx +84 -0
- package/landing/src/app/globals.css +439 -100
- package/landing/src/app/layout.tsx +37 -7
- package/landing/src/app/page.tsx +627 -552
- package/landing/src/app/providers/dashboard/login/page.tsx +176 -0
- package/landing/src/app/providers/dashboard/page.tsx +589 -0
- package/landing/src/app/providers/dashboard/verify/page.tsx +106 -0
- package/landing/src/app/providers/layout.tsx +14 -0
- package/landing/src/app/providers/page.tsx +402 -0
- package/landing/src/app/providers/register/page.tsx +670 -0
- package/landing/src/components/ProviderDashboard.tsx +794 -0
- package/landing/src/hooks/useDashboardData.ts +99 -0
- package/landing/src/lib/apis.json +116054 -0
- package/landing/src/lib/convex-client.ts +106 -0
- package/landing/src/lib/mock-data.ts +285 -0
- package/landing/src/lib/stats.json +6 -0
- package/landing/tailwind.config.ts +12 -11
- package/landing/tsconfig.tsbuildinfo +1 -0
- package/package.json +21 -20
- package/scripts/SYMBOT-FIX.md +238 -0
- package/scripts/demo-simulation.py +177 -0
- package/scripts/expand-more.py +502 -0
- package/scripts/expand-registry.py +434 -0
- package/scripts/history-sanitizer.ts +272 -0
- package/scripts/mass-scrape.py +1308 -0
- package/scripts/sync-and-deploy.sh +36 -0
- package/src/credentials.ts +177 -0
- package/src/credits.ts +190 -122
- package/src/discovery.ts +45 -58
- package/src/execute.ts +350 -0
- package/src/index.ts +184 -32
- package/src/proxy.ts +24 -0
- package/src/registry/apis.json +95362 -202
- package/src/registry/apis_expanded.json +100853 -0
- package/src/stripe.ts +243 -0
- package/src/telemetry.ts +71 -0
- package/src/test.ts +127 -89
- package/src/types.ts +0 -34
- package/src/webhook.ts +107 -0
- package/.github/ISSUE_TEMPLATE/add-api.yml +0 -123
- package/BRIEFING.md +0 -30
- package/backend/convex/apiKeys.ts +0 -75
- package/backend/convex/purchases.ts +0 -74
- package/backend/convex/schema.ts +0 -45
- package/backend/convex/transactions.ts +0 -57
- package/backend/convex/users.ts +0 -94
- package/backend/package-lock.json +0 -521
- package/backend/package.json +0 -15
- package/dist/registry/parse_apis.py +0 -146
- package/dist/revenuecat.d.ts +0 -61
- package/dist/revenuecat.d.ts.map +0 -1
- package/dist/revenuecat.js +0 -166
- package/dist/revenuecat.js.map +0 -1
- package/dist/webhooks/revenuecat.d.ts +0 -48
- package/dist/webhooks/revenuecat.d.ts.map +0 -1
- package/dist/webhooks/revenuecat.js +0 -119
- package/dist/webhooks/revenuecat.js.map +0 -1
- package/docs/revenuecat-setup.md +0 -89
- package/landing/src/app/api/keys/route.ts +0 -71
- package/landing/src/app/api/log/route.ts +0 -37
- package/landing/src/app/api/stats/route.ts +0 -37
- package/landing/src/app/page.tsx.bak +0 -567
- package/landing/src/components/AddKeyModal.tsx +0 -159
- package/newsletter-template.html +0 -71
- package/outreach/OUTREACH-SYSTEM.md +0 -211
- package/outreach/email-template.html +0 -179
- package/outreach/targets.md +0 -133
- package/src/registry/parse_apis.py +0 -146
- package/src/revenuecat.ts +0 -239
- package/src/webhooks/revenuecat.ts +0 -187
- /package/{backend/convex → convex}/README.md +0 -0
- /package/{backend/convex → convex}/_generated/api.js +0 -0
- /package/{backend/convex → convex}/_generated/dataModel.d.ts +0 -0
- /package/{backend/convex → convex}/_generated/server.d.ts +0 -0
- /package/{backend/convex → convex}/_generated/server.js +0 -0
- /package/{backend/convex → convex}/tsconfig.json +0 -0
package/landing/src/app/page.tsx
CHANGED
|
@@ -1,258 +1,431 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useState, useEffect } from "react";
|
|
4
3
|
import {
|
|
5
|
-
MessageSquare, Mail, Search, Cpu, Volume2,
|
|
6
4
|
ArrowRight, Zap, Shield, Terminal, ExternalLink,
|
|
7
|
-
Github, Check, Twitter,
|
|
8
|
-
|
|
5
|
+
Github, Check, Twitter, Sparkles, Code2, Link, Sun, Moon,
|
|
6
|
+
Bot, Building2, Search, Rocket, Clock, Globe, Database,
|
|
7
|
+
Play, ChevronRight, Star, Users, Cpu, Activity
|
|
9
8
|
} from "lucide-react";
|
|
9
|
+
import statsData from "@/lib/stats.json";
|
|
10
|
+
import { useState, useEffect, useRef } from "react";
|
|
11
|
+
|
|
12
|
+
const stats = [
|
|
13
|
+
{ number: statsData.apiCount.toLocaleString(), label: "APIs Indexed", live: true },
|
|
14
|
+
{ number: statsData.categoryCount.toString(), label: "Categories", live: true },
|
|
15
|
+
{ number: "<200 ms", label: "Response Time", live: false },
|
|
16
|
+
{ number: "24/7", label: "Live Registry", live: false },
|
|
17
|
+
];
|
|
10
18
|
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
const trustedBy = [
|
|
20
|
+
"Claude Agents",
|
|
21
|
+
"GPT Builders",
|
|
22
|
+
"AutoGPT",
|
|
23
|
+
"LangChain",
|
|
24
|
+
"CrewAI",
|
|
25
|
+
"Indie Hackers",
|
|
17
26
|
];
|
|
18
27
|
|
|
19
|
-
const
|
|
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
|
-
},
|
|
28
|
+
const howItWorks = [
|
|
26
29
|
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
step: "1",
|
|
31
|
+
title: "Agent Asks",
|
|
32
|
+
description: "Your agent queries APIClaw for a capability—not a product name.",
|
|
33
|
+
icon: Search,
|
|
34
|
+
codeJsx: (
|
|
35
|
+
<>
|
|
36
|
+
<span className="text-gray-500">{"// Agent needs to send transactional email"}</span>{"\n"}
|
|
37
|
+
<span className="text-blue-400">mcp</span>.<span className="text-yellow-400">call</span>(<span className="text-green-400">"apiclaw"</span>, {"{"}{"\n"}
|
|
38
|
+
{" "}<span className="text-red-400">capability</span>: <span className="text-green-400">"email"</span>,{"\n"}
|
|
39
|
+
{" "}<span className="text-red-400">type</span>: <span className="text-green-400">"transactional"</span>,{"\n"}
|
|
40
|
+
{" "}<span className="text-red-400">maxPrice</span>: <span className="text-green-400">"$0.001/email"</span>{"\n"}
|
|
41
|
+
{"}"})
|
|
42
|
+
</>
|
|
43
|
+
),
|
|
31
44
|
},
|
|
32
45
|
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
46
|
+
step: "2",
|
|
47
|
+
title: "APIClaw Matches",
|
|
48
|
+
description: `We search ${statsData.apiCount.toLocaleString()}+ APIs and return ranked options with full metadata.`,
|
|
49
|
+
icon: Database,
|
|
50
|
+
codeJsx: (
|
|
51
|
+
<>
|
|
52
|
+
<span className="text-gray-500">{"// Structured response"}</span>{"\n"}
|
|
53
|
+
{"{"}{"\n"}
|
|
54
|
+
{" "}<span className="text-red-400">"matches"</span>: [{"\n"}
|
|
55
|
+
{" "}{"{ "}<span className="text-red-400">"name"</span>: <span className="text-green-400">"Resend"</span>, <span className="text-red-400">"price"</span>: <span className="text-yellow-400">"$0.0005"</span>{" },"}{"\n"}
|
|
56
|
+
{" "}{"{ "}<span className="text-red-400">"name"</span>: <span className="text-green-400">"SendGrid"</span>, <span className="text-red-400">"price"</span>: <span className="text-yellow-400">"$0.001"</span>{" }"}{"\n"}
|
|
57
|
+
{" "}],{"\n"}
|
|
58
|
+
{" "}<span className="text-red-400">"bestMatch"</span>: <span className="text-green-400">"Resend"</span>{"\n"}
|
|
59
|
+
{"}"}
|
|
60
|
+
</>
|
|
61
|
+
),
|
|
37
62
|
},
|
|
38
63
|
{
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
64
|
+
step: "3",
|
|
65
|
+
title: "Agent Integrates",
|
|
66
|
+
description: "Full specs, auth details, endpoints—everything to start building.",
|
|
67
|
+
icon: Rocket,
|
|
68
|
+
codeJsx: (
|
|
69
|
+
<>
|
|
70
|
+
<span className="text-gray-500">{"// Get full API spec"}</span>{"\n"}
|
|
71
|
+
<span className="text-purple-400">const</span> <span className="text-blue-400">spec</span> = <span className="text-purple-400">await</span> <span className="text-blue-400">mcp</span>.<span className="text-yellow-400">call</span>(<span className="text-green-400">"apiclaw"</span>, {"{"}{"\n"}
|
|
72
|
+
{" "}<span className="text-red-400">action</span>: <span className="text-green-400">"get_spec"</span>,{"\n"}
|
|
73
|
+
{" "}<span className="text-red-400">api</span>: <span className="text-green-400">"Resend"</span>{"\n"}
|
|
74
|
+
{"}"}){"\n"}
|
|
75
|
+
<span className="text-gray-500">{"// → docs, auth, endpoints, examples"}</span>
|
|
76
|
+
</>
|
|
77
|
+
),
|
|
43
78
|
},
|
|
44
79
|
];
|
|
45
80
|
|
|
46
|
-
const
|
|
81
|
+
const agentBenefits = [
|
|
47
82
|
{
|
|
48
83
|
icon: Search,
|
|
49
|
-
title: "
|
|
50
|
-
description: "
|
|
84
|
+
title: "Semantic Search",
|
|
85
|
+
description: "Query by capability, not keywords. 'I need GDPR-compliant email' returns perfect matches.",
|
|
51
86
|
},
|
|
52
87
|
{
|
|
53
|
-
icon:
|
|
54
|
-
title: "
|
|
55
|
-
description: "
|
|
88
|
+
icon: Zap,
|
|
89
|
+
title: "Instant Results",
|
|
90
|
+
description: "Sub-200ms responses. Your agent doesn't wait, it acts.",
|
|
56
91
|
},
|
|
57
92
|
{
|
|
58
|
-
icon:
|
|
59
|
-
title: "
|
|
60
|
-
description: "
|
|
93
|
+
icon: Database,
|
|
94
|
+
title: "Structured Data",
|
|
95
|
+
description: "JSON responses with pricing, limits, regions, auth—everything an agent needs.",
|
|
61
96
|
},
|
|
62
97
|
{
|
|
63
|
-
icon:
|
|
64
|
-
title: "
|
|
65
|
-
description: "
|
|
98
|
+
icon: Shield,
|
|
99
|
+
title: "MCP Native",
|
|
100
|
+
description: "Built for Model Context Protocol. Works with Claude, GPT, and any compatible agent.",
|
|
66
101
|
},
|
|
67
102
|
];
|
|
68
103
|
|
|
69
|
-
const
|
|
104
|
+
const providerBenefits = [
|
|
70
105
|
{
|
|
71
|
-
|
|
72
|
-
title: "
|
|
73
|
-
description:
|
|
74
|
-
code: `agent.call("apiclaw", {
|
|
75
|
-
capability: "sms",
|
|
76
|
-
region: "EU"
|
|
77
|
-
})`,
|
|
106
|
+
icon: Users,
|
|
107
|
+
title: "Reach AI Agents",
|
|
108
|
+
description: "Get discovered by thousands of autonomous agents looking for APIs like yours.",
|
|
78
109
|
},
|
|
79
110
|
{
|
|
80
|
-
|
|
81
|
-
title: "
|
|
82
|
-
description: "
|
|
83
|
-
code: `{
|
|
84
|
-
"apis": [
|
|
85
|
-
{ "name": "46elks", "price": "$0.07" },
|
|
86
|
-
{ "name": "twilio", "price": "$0.09" }
|
|
87
|
-
]
|
|
88
|
-
}`,
|
|
111
|
+
icon: Globe,
|
|
112
|
+
title: "Global Visibility",
|
|
113
|
+
description: "Your API appears in searches across all MCP-compatible platforms.",
|
|
89
114
|
},
|
|
90
115
|
{
|
|
91
|
-
|
|
92
|
-
title: "Agent
|
|
93
|
-
description: "
|
|
94
|
-
code: `agent.purchase({
|
|
95
|
-
api: "46elks",
|
|
96
|
-
payment: "usdc-base",
|
|
97
|
-
amount: 100
|
|
98
|
-
})`,
|
|
116
|
+
icon: Cpu,
|
|
117
|
+
title: "Agent-Optimized Listing",
|
|
118
|
+
description: "We structure your API data so agents can understand and integrate it instantly.",
|
|
99
119
|
},
|
|
100
120
|
{
|
|
101
|
-
|
|
102
|
-
title: "
|
|
103
|
-
description: "
|
|
104
|
-
code: `{
|
|
105
|
-
"status": "active",
|
|
106
|
-
"credentials": { ... },
|
|
107
|
-
"ready": true
|
|
108
|
-
}`,
|
|
121
|
+
icon: Clock,
|
|
122
|
+
title: "Zero Maintenance",
|
|
123
|
+
description: "List once, we keep it updated. No ongoing work required.",
|
|
109
124
|
},
|
|
110
125
|
];
|
|
111
126
|
|
|
127
|
+
const terminalLines = [
|
|
128
|
+
{ type: "prompt", text: "npx @nordsym/apiclaw" },
|
|
129
|
+
{ type: "output", text: "", delay: 500 },
|
|
130
|
+
{ type: "output", text: "🦞 APIClaw v1.0.0", delay: 100 },
|
|
131
|
+
{ type: "output", text: "", delay: 50 },
|
|
132
|
+
{ type: "success", text: "✓ Connecting to registry...", delay: 300 },
|
|
133
|
+
{ type: "success", text: `✓ ${statsData.apiCount.toLocaleString()} APIs loaded`, delay: 200 },
|
|
134
|
+
{ type: "success", text: "✓ MCP server ready", delay: 200 },
|
|
135
|
+
{ type: "output", text: "", delay: 100 },
|
|
136
|
+
{ type: "accent", text: "→ Listening on stdio for agent requests", delay: 300 },
|
|
137
|
+
{ type: "accent", text: "→ Add to Claude Desktop: Settings → MCP → Add Server", delay: 0 },
|
|
138
|
+
];
|
|
139
|
+
|
|
112
140
|
export default function Home() {
|
|
113
141
|
const [isDark, setIsDark] = useState(true);
|
|
114
|
-
const [
|
|
142
|
+
const [terminalOutput, setTerminalOutput] = useState<typeof terminalLines>([]);
|
|
143
|
+
const [isTyping, setIsTyping] = useState(true);
|
|
144
|
+
const [currentLineIndex, setCurrentLineIndex] = useState(0);
|
|
145
|
+
const [activeSection, setActiveSection] = useState<string>("");
|
|
146
|
+
const terminalRef = useRef<HTMLDivElement>(null);
|
|
115
147
|
|
|
148
|
+
// Scroll-based active section detection using Intersection Observer
|
|
116
149
|
useEffect(() => {
|
|
117
|
-
|
|
118
|
-
|
|
150
|
+
const sections = ["how-it-works", "for-agents", "for-providers", "pricing"];
|
|
151
|
+
|
|
152
|
+
const observerOptions = {
|
|
153
|
+
root: null,
|
|
154
|
+
rootMargin: "-20% 0px -60% 0px", // Trigger when section is in upper portion of viewport
|
|
155
|
+
threshold: 0,
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const observerCallback = (entries: IntersectionObserverEntry[]) => {
|
|
159
|
+
entries.forEach((entry) => {
|
|
160
|
+
if (entry.isIntersecting) {
|
|
161
|
+
setActiveSection(entry.target.id);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const observer = new IntersectionObserver(observerCallback, observerOptions);
|
|
167
|
+
|
|
168
|
+
sections.forEach((sectionId) => {
|
|
169
|
+
const element = document.getElementById(sectionId);
|
|
170
|
+
if (element) {
|
|
171
|
+
observer.observe(element);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
return () => observer.disconnect();
|
|
176
|
+
}, []);
|
|
119
177
|
|
|
120
178
|
useEffect(() => {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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(() => {});
|
|
179
|
+
const saved = localStorage.getItem('theme');
|
|
180
|
+
const prefersDark = saved ? saved === 'dark' : true;
|
|
181
|
+
setIsDark(prefersDark);
|
|
182
|
+
document.documentElement.classList.toggle('dark', prefersDark);
|
|
132
183
|
}, []);
|
|
133
184
|
|
|
185
|
+
// Terminal animation with auto-loop
|
|
186
|
+
useEffect(() => {
|
|
187
|
+
if (currentLineIndex >= terminalLines.length) {
|
|
188
|
+
setIsTyping(false);
|
|
189
|
+
// Auto-restart after 3 seconds
|
|
190
|
+
const restartTimeout = setTimeout(() => {
|
|
191
|
+
setTerminalOutput([]);
|
|
192
|
+
setCurrentLineIndex(0);
|
|
193
|
+
setIsTyping(true);
|
|
194
|
+
}, 3000);
|
|
195
|
+
return () => clearTimeout(restartTimeout);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const line = terminalLines[currentLineIndex];
|
|
199
|
+
const timeout = setTimeout(() => {
|
|
200
|
+
setTerminalOutput(prev => [...prev, line]);
|
|
201
|
+
setCurrentLineIndex(prev => prev + 1);
|
|
202
|
+
}, line.delay);
|
|
203
|
+
|
|
204
|
+
return () => clearTimeout(timeout);
|
|
205
|
+
}, [currentLineIndex]);
|
|
206
|
+
|
|
207
|
+
const toggleTheme = () => {
|
|
208
|
+
const newTheme = !isDark;
|
|
209
|
+
setIsDark(newTheme);
|
|
210
|
+
document.documentElement.classList.toggle('dark', newTheme);
|
|
211
|
+
localStorage.setItem('theme', newTheme ? 'dark' : 'light');
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
const restartTerminal = () => {
|
|
215
|
+
setTerminalOutput([]);
|
|
216
|
+
setCurrentLineIndex(0);
|
|
217
|
+
setIsTyping(true);
|
|
218
|
+
};
|
|
219
|
+
|
|
134
220
|
return (
|
|
135
|
-
<main className="min-h-screen">
|
|
221
|
+
<main className="min-h-screen overflow-x-hidden">
|
|
136
222
|
{/* Header */}
|
|
137
|
-
<header className="fixed top-0 w-full z-50 bg-background/
|
|
223
|
+
<header className="fixed top-0 w-full z-50 bg-background/80 backdrop-blur-xl border-b border-border-subtle">
|
|
138
224
|
<div className="max-w-6xl mx-auto px-6 py-4 flex items-center justify-between">
|
|
139
225
|
<div className="flex items-center gap-3">
|
|
140
|
-
<div className="w-
|
|
141
|
-
|
|
226
|
+
<div className="w-10 h-10 rounded-xl bg-accent/20 flex items-center justify-center text-2xl logo-float">
|
|
227
|
+
🦞
|
|
142
228
|
</div>
|
|
143
|
-
<span className="font-bold text-
|
|
144
|
-
<span className="px-2 py-0.5 text-xs font-semibold bg-accent/20 text-accent rounded-full">Beta</span>
|
|
229
|
+
<span className="font-bold text-xl tracking-tight">APIClaw</span>
|
|
145
230
|
</div>
|
|
146
231
|
<nav className="hidden md:flex items-center gap-8 text-sm text-text-muted">
|
|
147
|
-
<a
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
232
|
+
<a
|
|
233
|
+
href="#how-it-works"
|
|
234
|
+
className={`transition ${activeSection === "how-it-works" ? "text-accent font-medium" : "hover:text-text-primary"}`}
|
|
235
|
+
>
|
|
236
|
+
How It Works
|
|
237
|
+
</a>
|
|
238
|
+
<a
|
|
239
|
+
href="#for-agents"
|
|
240
|
+
className={`transition ${activeSection === "for-agents" ? "text-accent font-medium" : "hover:text-text-primary"}`}
|
|
241
|
+
>
|
|
242
|
+
For Agents
|
|
243
|
+
</a>
|
|
244
|
+
<a
|
|
245
|
+
href="#for-providers"
|
|
246
|
+
className={`transition ${activeSection === "for-providers" ? "text-accent font-medium" : "hover:text-text-primary"}`}
|
|
247
|
+
>
|
|
248
|
+
For Providers
|
|
249
|
+
</a>
|
|
250
|
+
<a
|
|
251
|
+
href="#pricing"
|
|
252
|
+
className={`transition ${activeSection === "pricing" ? "text-accent font-medium" : "hover:text-text-primary"}`}
|
|
253
|
+
>
|
|
254
|
+
Pricing
|
|
255
|
+
</a>
|
|
151
256
|
</nav>
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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">
|
|
257
|
+
<div className="flex items-center gap-3">
|
|
258
|
+
<button
|
|
259
|
+
onClick={toggleTheme}
|
|
260
|
+
className="p-2.5 rounded-lg hover:bg-surface transition"
|
|
261
|
+
aria-label="Toggle theme"
|
|
262
|
+
>
|
|
263
|
+
{isDark ? <Sun className="w-5 h-5" /> : <Moon className="w-5 h-5" />}
|
|
264
|
+
</button>
|
|
191
265
|
<a
|
|
192
266
|
href="https://github.com/nordsym/apiclaw"
|
|
193
267
|
target="_blank"
|
|
194
268
|
rel="noopener noreferrer"
|
|
195
|
-
className="btn-
|
|
269
|
+
className="btn-ghost hidden sm:flex"
|
|
196
270
|
>
|
|
197
|
-
<Github className="w-
|
|
198
|
-
|
|
271
|
+
<Github className="w-4 h-4" />
|
|
272
|
+
<span>GitHub</span>
|
|
273
|
+
</a>
|
|
274
|
+
<a
|
|
275
|
+
href="#how-it-works"
|
|
276
|
+
className="btn-primary !py-2 !px-3 text-xs hidden md:flex"
|
|
277
|
+
>
|
|
278
|
+
Start
|
|
199
279
|
</a>
|
|
200
|
-
<button className="btn-secondary">
|
|
201
|
-
<span>Add to Claude</span>
|
|
202
|
-
<ArrowRight className="w-4 h-4" />
|
|
203
|
-
</button>
|
|
204
280
|
</div>
|
|
281
|
+
</div>
|
|
282
|
+
</header>
|
|
283
|
+
|
|
284
|
+
{/* Hero */}
|
|
285
|
+
<section className="relative pt-32 pb-20 px-6 bg-grid">
|
|
286
|
+
<div className="hero-glow" />
|
|
287
|
+
|
|
288
|
+
<div className="max-w-6xl mx-auto relative z-10">
|
|
289
|
+
<div className="grid lg:grid-cols-2 gap-12 lg:gap-16 items-center">
|
|
290
|
+
{/* Left: Copy */}
|
|
291
|
+
<div className="text-center lg:text-left">
|
|
292
|
+
<div className="badge badge-live mb-6 inline-flex">
|
|
293
|
+
<span className="flex items-center gap-2"><span className="w-2 h-2 bg-green-500 rounded-full animate-pulse" />Live • {statsData.apiCount.toLocaleString()} APIs</span>
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
<h1 className="text-5xl md:text-6xl lg:text-7xl font-black mb-6 leading-[1.05] tracking-tighter">
|
|
297
|
+
<span className="gradient-text">The API Layer</span>
|
|
298
|
+
<br />
|
|
299
|
+
<span className="text-text-primary">for AI Agents</span>
|
|
300
|
+
</h1>
|
|
301
|
+
|
|
302
|
+
<p className="text-xl md:text-2xl text-text-secondary mb-4 leading-relaxed max-w-xl mx-auto lg:mx-0">
|
|
303
|
+
Find, evaluate, and integrate APIs in milliseconds.
|
|
304
|
+
</p>
|
|
305
|
+
|
|
306
|
+
<p className="text-text-muted mb-8 max-w-lg mx-auto lg:mx-0">
|
|
307
|
+
Structured data. Ranked results. Sub-200ms responses.
|
|
308
|
+
Built for the agentic era.
|
|
309
|
+
</p>
|
|
310
|
+
|
|
311
|
+
<div className="flex flex-col sm:flex-row items-center justify-center lg:justify-start gap-4 mb-8">
|
|
312
|
+
<button
|
|
313
|
+
onClick={() => {
|
|
314
|
+
navigator.clipboard.writeText('npx @nordsym/apiclaw');
|
|
315
|
+
alert('Copied: npx @nordsym/apiclaw');
|
|
316
|
+
}}
|
|
317
|
+
className="btn-primary glow-pulse"
|
|
318
|
+
>
|
|
319
|
+
<Terminal className="w-5 h-5" />
|
|
320
|
+
<code className="font-mono">npx @nordsym/apiclaw</code>
|
|
321
|
+
<span className="text-xs opacity-70">copy</span>
|
|
322
|
+
</button>
|
|
323
|
+
<a
|
|
324
|
+
href="https://github.com/nordsym/apiclaw"
|
|
325
|
+
target="_blank"
|
|
326
|
+
rel="noopener noreferrer"
|
|
327
|
+
className="btn-secondary"
|
|
328
|
+
>
|
|
329
|
+
<Github className="w-5 h-5" />
|
|
330
|
+
View on GitHub
|
|
331
|
+
</a>
|
|
332
|
+
</div>
|
|
333
|
+
|
|
334
|
+
</div>
|
|
205
335
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
336
|
+
{/* Right: Terminal */}
|
|
337
|
+
<div className="relative">
|
|
338
|
+
<div className="terminal glow" ref={terminalRef}>
|
|
339
|
+
<div className="terminal-header">
|
|
340
|
+
<div className="terminal-dot terminal-dot-red" />
|
|
341
|
+
<div className="terminal-dot terminal-dot-yellow" />
|
|
342
|
+
<div className="terminal-dot terminal-dot-green" />
|
|
343
|
+
<span className="terminal-title">apiclaw — zsh</span>
|
|
344
|
+
</div>
|
|
345
|
+
<div className="terminal-body">
|
|
346
|
+
{terminalOutput.map((line, i) => (
|
|
347
|
+
<div key={i} className={`${line.text ? 'mb-1' : 'mb-2'}`}>
|
|
348
|
+
{line.type === 'prompt' && (
|
|
349
|
+
<>
|
|
350
|
+
<span className="terminal-prompt">$ </span>
|
|
351
|
+
<span className="terminal-command">{line.text}</span>
|
|
352
|
+
</>
|
|
353
|
+
)}
|
|
354
|
+
{line.type === 'output' && (
|
|
355
|
+
<span className="terminal-output">{line.text}</span>
|
|
356
|
+
)}
|
|
357
|
+
{line.type === 'success' && (
|
|
358
|
+
<span className="terminal-success">{line.text}</span>
|
|
359
|
+
)}
|
|
360
|
+
{line.type === 'accent' && (
|
|
361
|
+
<span className="terminal-accent">{line.text}</span>
|
|
362
|
+
)}
|
|
363
|
+
</div>
|
|
364
|
+
))}
|
|
365
|
+
{isTyping && <span className="typing-cursor" />}
|
|
366
|
+
</div>
|
|
367
|
+
</div>
|
|
368
|
+
|
|
369
|
+
{/* Auto-loops - no replay button needed */}
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
209
372
|
</div>
|
|
210
373
|
</section>
|
|
211
374
|
|
|
212
|
-
{/*
|
|
213
|
-
<section className="
|
|
214
|
-
<div className="max-w-
|
|
215
|
-
<div className="
|
|
216
|
-
|
|
217
|
-
<
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
<span className="text-text-muted">Registry</span>
|
|
229
|
-
</div>
|
|
375
|
+
{/* Stats */}
|
|
376
|
+
<section className="py-16 px-6 bg-surface/50">
|
|
377
|
+
<div className="max-w-5xl mx-auto">
|
|
378
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-6">
|
|
379
|
+
{stats.map((stat, i) => (
|
|
380
|
+
<div key={i} className="stat-card relative">
|
|
381
|
+
{stat.live && (
|
|
382
|
+
<div className="absolute top-2 right-2 flex items-center gap-1">
|
|
383
|
+
<span className="w-2 h-2 bg-green-500 rounded-full animate-pulse" />
|
|
384
|
+
<span className="text-[10px] text-green-500 font-medium">LIVE</span>
|
|
385
|
+
</div>
|
|
386
|
+
)}
|
|
387
|
+
<div className="stat-number">{stat.number}</div>
|
|
388
|
+
<div className="stat-label">{stat.label}</div>
|
|
389
|
+
</div>
|
|
390
|
+
))}
|
|
230
391
|
</div>
|
|
231
392
|
</div>
|
|
232
393
|
</section>
|
|
233
394
|
|
|
234
395
|
<div className="divider" />
|
|
235
396
|
|
|
236
|
-
{/*
|
|
237
|
-
<section className="py-24 px-6">
|
|
397
|
+
{/* How It Works */}
|
|
398
|
+
<section id="how-it-works" className="py-24 px-6">
|
|
238
399
|
<div className="max-w-6xl mx-auto">
|
|
239
400
|
<div className="text-center mb-16">
|
|
240
|
-
<span className="section-label">
|
|
241
|
-
<h2 className="text-3xl md:text-
|
|
401
|
+
<span className="section-label">HOW IT WORKS</span>
|
|
402
|
+
<h2 className="text-3xl md:text-5xl font-bold mt-4 tracking-tight">
|
|
403
|
+
Three steps. That's it.
|
|
404
|
+
</h2>
|
|
405
|
+
<p className="text-text-secondary text-lg mt-4 max-w-2xl mx-auto">
|
|
406
|
+
Your agent asks for a capability, APIClaw finds the best API,
|
|
407
|
+
and returns everything needed to integrate.
|
|
408
|
+
</p>
|
|
242
409
|
</div>
|
|
243
410
|
|
|
244
|
-
<div className="grid md:grid-cols-3 gap-
|
|
245
|
-
{
|
|
246
|
-
<div key={i} className="
|
|
247
|
-
<
|
|
248
|
-
|
|
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>
|
|
411
|
+
<div className="grid md:grid-cols-3 gap-8">
|
|
412
|
+
{howItWorks.map((step, i) => (
|
|
413
|
+
<div key={i} className="feature-card">
|
|
414
|
+
<div className="flex items-center gap-4 mb-6">
|
|
415
|
+
<div className="step-indicator">{step.step}</div>
|
|
253
416
|
<div>
|
|
254
|
-
<
|
|
255
|
-
|
|
417
|
+
<h3 className="font-bold text-xl">{step.title}</h3>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
<p className="text-text-secondary mb-6 leading-relaxed">
|
|
421
|
+
{step.description}
|
|
422
|
+
</p>
|
|
423
|
+
<div className="code-preview">
|
|
424
|
+
<div className="code-preview-header">
|
|
425
|
+
example.ts
|
|
426
|
+
</div>
|
|
427
|
+
<div className="code-preview-body">
|
|
428
|
+
<pre className="text-sm whitespace-pre-wrap">{step.codeJsx}</pre>
|
|
256
429
|
</div>
|
|
257
430
|
</div>
|
|
258
431
|
</div>
|
|
@@ -263,411 +436,324 @@ export default function Home() {
|
|
|
263
436
|
|
|
264
437
|
<div className="divider" />
|
|
265
438
|
|
|
266
|
-
{/*
|
|
267
|
-
<section id="
|
|
268
|
-
<div className="max-w-
|
|
269
|
-
<div className="
|
|
270
|
-
<
|
|
271
|
-
|
|
272
|
-
|
|
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>
|
|
439
|
+
{/* For Agents */}
|
|
440
|
+
<section id="for-agents" className="py-24 px-6 bg-surface/30">
|
|
441
|
+
<div className="max-w-6xl mx-auto">
|
|
442
|
+
<div className="grid lg:grid-cols-2 gap-16 items-center">
|
|
443
|
+
<div>
|
|
444
|
+
<div className="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-accent/10 border border-accent/20 text-accent text-sm font-medium mb-6">
|
|
445
|
+
<Bot className="w-4 h-4" />
|
|
446
|
+
For AI Agents
|
|
284
447
|
</div>
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
448
|
+
|
|
449
|
+
<h2 className="text-3xl md:text-4xl font-bold tracking-tight mb-6">
|
|
450
|
+
Your agent's API encyclopedia
|
|
451
|
+
</h2>
|
|
452
|
+
|
|
453
|
+
<p className="text-text-secondary text-lg mb-8 leading-relaxed">
|
|
454
|
+
Stop hardcoding API choices. Let your agent discover the best API
|
|
455
|
+
for each task dynamically, with full pricing and capability data.
|
|
456
|
+
</p>
|
|
457
|
+
|
|
458
|
+
<div className="space-y-6 mb-8">
|
|
459
|
+
{agentBenefits.map((benefit, i) => (
|
|
460
|
+
<div key={i} className="flex items-start gap-4">
|
|
461
|
+
<div className="w-10 h-10 rounded-xl bg-accent/10 flex items-center justify-center flex-shrink-0">
|
|
462
|
+
<benefit.icon className="w-5 h-5 text-accent" />
|
|
463
|
+
</div>
|
|
464
|
+
<div>
|
|
465
|
+
<h4 className="font-semibold mb-1">{benefit.title}</h4>
|
|
466
|
+
<p className="text-text-secondary text-sm">{benefit.description}</p>
|
|
467
|
+
</div>
|
|
468
|
+
</div>
|
|
469
|
+
))}
|
|
289
470
|
</div>
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
471
|
+
|
|
472
|
+
<a
|
|
473
|
+
href="https://github.com/nordsym/apiclaw#installation"
|
|
474
|
+
target="_blank"
|
|
475
|
+
rel="noopener noreferrer"
|
|
476
|
+
className="btn-primary inline-flex"
|
|
477
|
+
>
|
|
478
|
+
Start Building
|
|
479
|
+
<ArrowRight className="w-4 h-4" />
|
|
480
|
+
</a>
|
|
481
|
+
</div>
|
|
482
|
+
|
|
483
|
+
<div className="code-preview">
|
|
484
|
+
<div className="code-preview-header">
|
|
485
|
+
agent.ts — Claude Agent Example
|
|
293
486
|
</div>
|
|
294
|
-
<div className="
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
487
|
+
<div className="code-preview-body">
|
|
488
|
+
<pre className="text-sm">
|
|
489
|
+
<span className="text-gray-500">{"// Your agent needs to send a notification"}</span>{"\n"}
|
|
490
|
+
<span className="text-purple-400">const</span> <span className="text-blue-400">result</span> = <span className="text-purple-400">await</span> <span className="text-blue-400">mcp</span>.<span className="text-yellow-400">call</span>(<span className="text-green-400">"apiclaw"</span>, {"{"}{"\n"}
|
|
491
|
+
{" "}<span className="text-red-400">capability</span>: <span className="text-green-400">"push_notification"</span>,{"\n"}
|
|
492
|
+
{" "}<span className="text-red-400">platforms</span>: [<span className="text-green-400">"ios"</span>, <span className="text-green-400">"android"</span>],{"\n"}
|
|
493
|
+
{" "}<span className="text-red-400">maxPrice</span>: <span className="text-green-400">"$0.001/msg"</span>{"\n"}
|
|
494
|
+
{"}"});{"\n"}
|
|
495
|
+
{"\n"}
|
|
496
|
+
<span className="text-gray-500">{"// APIClaw returns ranked matches"}</span>{"\n"}
|
|
497
|
+
<span className="text-blue-400">console</span>.<span className="text-yellow-400">log</span>(<span className="text-blue-400">result</span>.<span className="text-red-400">matches</span>);{"\n"}
|
|
498
|
+
<span className="text-gray-500">{"// ["}</span>{"\n"}
|
|
499
|
+
<span className="text-gray-500">{"// { "}<span className="text-red-400">name</span>: <span className="text-green-400">"OneSignal"</span>, <span className="text-red-400">price</span>: <span className="text-yellow-400">"$0.0005"</span>{" }"}</span>{"\n"}
|
|
500
|
+
<span className="text-gray-500">{"// { "}<span className="text-red-400">name</span>: <span className="text-green-400">"Firebase"</span>, <span className="text-red-400">price</span>: <span className="text-yellow-400">"free"</span>{" }"}</span>{"\n"}
|
|
501
|
+
<span className="text-gray-500">{"// { "}<span className="text-red-400">name</span>: <span className="text-green-400">"Pusher"</span>, <span className="text-red-400">price</span>: <span className="text-yellow-400">"$0.001"</span>{" }"}</span>{"\n"}
|
|
502
|
+
<span className="text-gray-500">{"// ]"}</span>{"\n"}
|
|
503
|
+
{"\n"}
|
|
504
|
+
<span className="text-gray-500">{"// Get full spec for the best match"}</span>{"\n"}
|
|
505
|
+
<span className="text-purple-400">const</span> <span className="text-blue-400">spec</span> = <span className="text-purple-400">await</span> <span className="text-blue-400">mcp</span>.<span className="text-yellow-400">call</span>(<span className="text-green-400">"apiclaw"</span>, {"{"}{"\n"}
|
|
506
|
+
{" "}<span className="text-red-400">action</span>: <span className="text-green-400">"get_spec"</span>,{"\n"}
|
|
507
|
+
{" "}<span className="text-red-400">api</span>: <span className="text-blue-400">result</span>.<span className="text-red-400">bestMatch</span>{"\n"}
|
|
508
|
+
{"}"});{"\n"}
|
|
509
|
+
{"\n"}
|
|
510
|
+
<span className="text-gray-500">{"// spec includes: auth, endpoints, examples, rate limits"}</span>{"\n"}
|
|
511
|
+
<span className="text-gray-500">{"// Your agent can now integrate dynamically! 🚀"}</span>
|
|
512
|
+
</pre>
|
|
299
513
|
</div>
|
|
300
514
|
</div>
|
|
301
515
|
</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
516
|
</div>
|
|
315
517
|
</section>
|
|
316
518
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
{/* Features */}
|
|
320
|
-
<section id="features" className="py-24 px-6 bg-surface/30">
|
|
519
|
+
{/* For Providers */}
|
|
520
|
+
<section id="for-providers" className="py-24 px-6">
|
|
321
521
|
<div className="max-w-6xl mx-auto">
|
|
322
|
-
<div className="
|
|
323
|
-
<
|
|
324
|
-
|
|
325
|
-
|
|
522
|
+
<div className="grid lg:grid-cols-2 gap-16 items-center">
|
|
523
|
+
<div className="order-2 lg:order-1">
|
|
524
|
+
<div className="gradient-border p-8">
|
|
525
|
+
<div className="flex items-center gap-4 mb-6">
|
|
526
|
+
<div className="w-16 h-16 rounded-2xl bg-accent/20 flex items-center justify-center text-3xl">
|
|
527
|
+
🚀
|
|
528
|
+
</div>
|
|
529
|
+
<div>
|
|
530
|
+
<h4 className="font-bold text-lg">Your API</h4>
|
|
531
|
+
<p className="text-text-muted text-sm">Ready for the agentic era</p>
|
|
532
|
+
</div>
|
|
533
|
+
</div>
|
|
534
|
+
|
|
535
|
+
<div className="space-y-4 mb-6">
|
|
536
|
+
<div className="flex items-center gap-3 text-text-secondary">
|
|
537
|
+
<Check className="w-5 h-5 text-accent" />
|
|
538
|
+
<span>{statsData.apiCount.toLocaleString()}+ APIs indexed and growing</span>
|
|
539
|
+
</div>
|
|
540
|
+
<div className="flex items-center gap-3 text-text-secondary">
|
|
541
|
+
<Check className="w-5 h-5 text-accent" />
|
|
542
|
+
<span>Structured for instant integration</span>
|
|
543
|
+
</div>
|
|
544
|
+
<div className="flex items-center gap-3 text-text-secondary">
|
|
545
|
+
<Check className="w-5 h-5 text-accent" />
|
|
546
|
+
<span>Ranked by capability match</span>
|
|
547
|
+
</div>
|
|
548
|
+
<div className="flex items-center gap-3 text-text-secondary">
|
|
549
|
+
<Check className="w-5 h-5 text-accent" />
|
|
550
|
+
<span>Zero ongoing maintenance</span>
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
326
553
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
554
|
+
<div className="flex items-center justify-between pt-6 border-t border-border">
|
|
555
|
+
<div>
|
|
556
|
+
<p className="font-semibold">Free Listing</p>
|
|
557
|
+
<p className="text-text-muted text-sm">For all API providers</p>
|
|
558
|
+
</div>
|
|
559
|
+
<div className="flex gap-2">
|
|
560
|
+
<a href="/providers/dashboard" className="btn-ghost !py-2.5 !px-4 text-sm">
|
|
561
|
+
Dashboard
|
|
562
|
+
</a>
|
|
563
|
+
<a href="/providers" className="btn-primary !py-2.5 !px-5 text-sm">
|
|
564
|
+
List Your API
|
|
565
|
+
</a>
|
|
566
|
+
</div>
|
|
332
567
|
</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
568
|
</div>
|
|
336
|
-
|
|
337
|
-
</div>
|
|
338
|
-
</div>
|
|
339
|
-
</section>
|
|
569
|
+
</div>
|
|
340
570
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
571
|
+
<div className="order-1 lg:order-2">
|
|
572
|
+
<div className="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-accent/10 border border-accent/20 text-accent text-sm font-medium mb-6">
|
|
573
|
+
<Building2 className="w-4 h-4" />
|
|
574
|
+
For API Providers
|
|
575
|
+
</div>
|
|
576
|
+
|
|
577
|
+
<h2 className="text-3xl md:text-4xl font-bold tracking-tight mb-6">
|
|
578
|
+
Reach the agent economy
|
|
579
|
+
</h2>
|
|
580
|
+
|
|
581
|
+
<p className="text-text-secondary text-lg mb-8 leading-relaxed">
|
|
582
|
+
AI agents are the new developers. They don't browse landing pages—
|
|
583
|
+
they query capabilities. Get your API in front of them.
|
|
584
|
+
</p>
|
|
349
585
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
</div>
|
|
586
|
+
<div className="space-y-6">
|
|
587
|
+
{providerBenefits.map((benefit, i) => (
|
|
588
|
+
<div key={i} className="flex items-start gap-4">
|
|
589
|
+
<div className="w-10 h-10 rounded-xl bg-accent/10 flex items-center justify-center flex-shrink-0">
|
|
590
|
+
<benefit.icon className="w-5 h-5 text-accent" />
|
|
591
|
+
</div>
|
|
592
|
+
<div>
|
|
593
|
+
<h4 className="font-semibold mb-1">{benefit.title}</h4>
|
|
594
|
+
<p className="text-text-secondary text-sm">{benefit.description}</p>
|
|
595
|
+
</div>
|
|
596
|
+
</div>
|
|
597
|
+
))}
|
|
363
598
|
</div>
|
|
364
|
-
|
|
599
|
+
</div>
|
|
365
600
|
</div>
|
|
366
601
|
</div>
|
|
367
602
|
</section>
|
|
368
603
|
|
|
369
604
|
<div className="divider" />
|
|
370
605
|
|
|
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
606
|
{/* Pricing */}
|
|
406
|
-
<section id="pricing" className="py-24 px-6">
|
|
407
|
-
<div className="max-w-
|
|
607
|
+
<section id="pricing" className="py-24 px-6 bg-surface/30">
|
|
608
|
+
<div className="max-w-4xl mx-auto">
|
|
408
609
|
<div className="text-center mb-16">
|
|
409
610
|
<span className="section-label">PRICING</span>
|
|
410
|
-
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">
|
|
411
|
-
|
|
611
|
+
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">
|
|
612
|
+
Simple. Free. Forever.
|
|
613
|
+
</h2>
|
|
614
|
+
<p className="text-text-secondary text-lg mt-4">
|
|
615
|
+
API discovery should be free. We're building the infrastructure for agent commerce.
|
|
616
|
+
</p>
|
|
412
617
|
</div>
|
|
413
618
|
|
|
414
619
|
<div className="grid md:grid-cols-2 gap-8">
|
|
415
|
-
{/*
|
|
416
|
-
<div className="rounded-2xl bg-surface-elevated border border-
|
|
417
|
-
<div className="text-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
<
|
|
421
|
-
|
|
620
|
+
{/* Free tier */}
|
|
621
|
+
<div className="rounded-2xl bg-surface-elevated border-2 border-accent p-8 relative glow">
|
|
622
|
+
<div className="absolute -top-3 left-1/2 -translate-x-1/2 px-4 py-1 bg-accent text-white text-xs font-bold tracking-wide rounded-full uppercase">
|
|
623
|
+
Available Now
|
|
624
|
+
</div>
|
|
625
|
+
<h3 className="text-2xl font-bold mb-2">Discovery</h3>
|
|
626
|
+
<p className="text-text-secondary mb-6">Full API discovery and evaluation</p>
|
|
627
|
+
<div className="text-5xl font-black mb-6">
|
|
628
|
+
$0<span className="text-lg text-text-muted font-normal">/forever</span>
|
|
422
629
|
</div>
|
|
423
|
-
<ul className="space-y-
|
|
630
|
+
<ul className="space-y-4 mb-8">
|
|
424
631
|
<li className="flex items-center gap-3 text-text-secondary">
|
|
425
632
|
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
426
|
-
|
|
633
|
+
Search {statsData.apiCount.toLocaleString()}+ APIs by capability
|
|
427
634
|
</li>
|
|
428
635
|
<li className="flex items-center gap-3 text-text-secondary">
|
|
429
636
|
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
430
|
-
|
|
637
|
+
Full pricing & feature comparison
|
|
431
638
|
</li>
|
|
432
639
|
<li className="flex items-center gap-3 text-text-secondary">
|
|
433
640
|
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
434
|
-
|
|
641
|
+
Structured JSON responses
|
|
435
642
|
</li>
|
|
436
643
|
<li className="flex items-center gap-3 text-text-secondary">
|
|
437
644
|
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
438
|
-
|
|
645
|
+
MCP integration
|
|
646
|
+
</li>
|
|
647
|
+
<li className="flex items-center gap-3 text-text-secondary">
|
|
648
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0" />
|
|
649
|
+
Unlimited queries
|
|
439
650
|
</li>
|
|
440
651
|
</ul>
|
|
441
|
-
<a
|
|
442
|
-
|
|
443
|
-
target="_blank"
|
|
444
|
-
rel="noopener noreferrer"
|
|
445
|
-
className="btn-secondary w-full justify-center"
|
|
446
|
-
>
|
|
447
|
-
Get started free
|
|
652
|
+
<a href="https://github.com/nordsym/apiclaw" className="btn-primary w-full justify-center">
|
|
653
|
+
Get Started Free
|
|
448
654
|
</a>
|
|
449
655
|
</div>
|
|
450
656
|
|
|
451
|
-
{/*
|
|
452
|
-
<div className="
|
|
453
|
-
<div className="text-
|
|
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>
|
|
657
|
+
{/* Coming soon tier */}
|
|
658
|
+
<div className="rounded-2xl bg-surface-elevated border border-border p-8 relative">
|
|
659
|
+
<div className="absolute -top-3 left-1/2 -translate-x-1/2 px-4 py-1 bg-surface border border-border text-text-muted text-xs font-bold tracking-wide rounded-full uppercase">
|
|
660
|
+
Coming Q2 2026
|
|
472
661
|
</div>
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
<div className="
|
|
476
|
-
|
|
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>
|
|
662
|
+
<h3 className="text-2xl font-bold mb-2">Provisioning</h3>
|
|
663
|
+
<p className="text-text-secondary mb-6">Agent-native credential management</p>
|
|
664
|
+
<div className="text-5xl font-black mb-6 text-text-muted">
|
|
665
|
+
TBD
|
|
510
666
|
</div>
|
|
667
|
+
<ul className="space-y-4 mb-8">
|
|
668
|
+
<li className="flex items-center gap-3 text-text-muted">
|
|
669
|
+
<Check className="w-5 h-5 flex-shrink-0" />
|
|
670
|
+
OAuth broker for major APIs
|
|
671
|
+
</li>
|
|
672
|
+
<li className="flex items-center gap-3 text-text-muted">
|
|
673
|
+
<Check className="w-5 h-5 flex-shrink-0" />
|
|
674
|
+
Instant API key provisioning
|
|
675
|
+
</li>
|
|
676
|
+
<li className="flex items-center gap-3 text-text-muted">
|
|
677
|
+
<Check className="w-5 h-5 flex-shrink-0" />
|
|
678
|
+
Usage tracking & analytics
|
|
679
|
+
</li>
|
|
680
|
+
<li className="flex items-center gap-3 text-text-muted">
|
|
681
|
+
<Check className="w-5 h-5 flex-shrink-0" />
|
|
682
|
+
Agent-native payments
|
|
683
|
+
</li>
|
|
684
|
+
<li className="flex items-center gap-3 text-text-muted">
|
|
685
|
+
<Check className="w-5 h-5 flex-shrink-0" />
|
|
686
|
+
Unified billing
|
|
687
|
+
</li>
|
|
688
|
+
</ul>
|
|
689
|
+
<button className="btn-secondary w-full justify-center opacity-50 cursor-not-allowed" disabled>
|
|
690
|
+
Join Waitlist
|
|
691
|
+
</button>
|
|
511
692
|
</div>
|
|
512
693
|
</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
694
|
</div>
|
|
565
695
|
</section>
|
|
566
696
|
|
|
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
697
|
{/* CTA */}
|
|
626
|
-
<section className="py-24 px-6
|
|
627
|
-
<div className="max-w-
|
|
628
|
-
<
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
>
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
698
|
+
<section id="contact" className="py-24 px-6">
|
|
699
|
+
<div className="max-w-3xl mx-auto">
|
|
700
|
+
<div className="gradient-border p-12 text-center">
|
|
701
|
+
<div className="w-20 h-20 rounded-2xl bg-accent/20 flex items-center justify-center text-4xl mx-auto mb-6 logo-float">
|
|
702
|
+
🦞
|
|
703
|
+
</div>
|
|
704
|
+
<h2 className="text-3xl md:text-4xl font-bold mb-4 tracking-tight">
|
|
705
|
+
Ready to go agent-native?
|
|
706
|
+
</h2>
|
|
707
|
+
<p className="text-text-secondary text-lg mb-8 max-w-lg mx-auto">
|
|
708
|
+
Join thousands of agents already discovering APIs through APIClaw.
|
|
709
|
+
Get started in under a minute.
|
|
710
|
+
</p>
|
|
711
|
+
<div className="flex flex-col sm:flex-row items-center justify-center gap-4">
|
|
712
|
+
<a
|
|
713
|
+
href="https://github.com/nordsym/apiclaw"
|
|
714
|
+
target="_blank"
|
|
715
|
+
rel="noopener noreferrer"
|
|
716
|
+
className="btn-primary"
|
|
717
|
+
>
|
|
718
|
+
<Terminal className="w-5 h-5" />
|
|
719
|
+
npx @nordsym/apiclaw
|
|
720
|
+
</a>
|
|
721
|
+
<a
|
|
722
|
+
href="https://github.com/nordsym/apiclaw"
|
|
723
|
+
target="_blank"
|
|
724
|
+
rel="noopener noreferrer"
|
|
725
|
+
className="btn-secondary"
|
|
726
|
+
>
|
|
727
|
+
<Star className="w-5 h-5" />
|
|
728
|
+
Star on GitHub
|
|
729
|
+
</a>
|
|
730
|
+
</div>
|
|
646
731
|
</div>
|
|
647
732
|
</div>
|
|
648
733
|
</section>
|
|
649
734
|
|
|
650
735
|
{/* Footer */}
|
|
651
|
-
<footer className="border-t border-border py-16 px-6">
|
|
736
|
+
<footer className="border-t border-border py-16 px-6 bg-surface/30">
|
|
652
737
|
<div className="max-w-6xl mx-auto">
|
|
653
738
|
<div className="grid md:grid-cols-4 gap-12 mb-12">
|
|
654
739
|
{/* Brand */}
|
|
655
740
|
<div className="md:col-span-2">
|
|
656
741
|
<div className="flex items-center gap-3 mb-4">
|
|
657
|
-
<div className="w-
|
|
658
|
-
|
|
742
|
+
<div className="w-10 h-10 rounded-xl bg-accent/20 flex items-center justify-center text-2xl">
|
|
743
|
+
🦞
|
|
659
744
|
</div>
|
|
660
|
-
<span className="font-bold text-
|
|
745
|
+
<span className="font-bold text-xl tracking-tight">APIClaw</span>
|
|
661
746
|
</div>
|
|
662
|
-
<p className="text-text-muted mb-6 max-w-sm">
|
|
663
|
-
The API
|
|
747
|
+
<p className="text-text-muted mb-6 max-w-sm leading-relaxed">
|
|
748
|
+
The API discovery layer for autonomous agents.
|
|
749
|
+
Find, evaluate, and integrate APIs in milliseconds.
|
|
664
750
|
</p>
|
|
665
|
-
<div className="flex items-center gap-
|
|
751
|
+
<div className="flex items-center gap-3">
|
|
666
752
|
<a
|
|
667
753
|
href="https://github.com/nordsym/apiclaw"
|
|
668
754
|
target="_blank"
|
|
669
755
|
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
|
|
756
|
+
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 transition"
|
|
671
757
|
>
|
|
672
758
|
<Github className="w-5 h-5" />
|
|
673
759
|
</a>
|
|
@@ -675,7 +761,7 @@ export default function Home() {
|
|
|
675
761
|
href="https://twitter.com/nordsym"
|
|
676
762
|
target="_blank"
|
|
677
763
|
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
|
|
764
|
+
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 transition"
|
|
679
765
|
>
|
|
680
766
|
<Twitter className="w-5 h-5" />
|
|
681
767
|
</a>
|
|
@@ -686,9 +772,11 @@ export default function Home() {
|
|
|
686
772
|
<div>
|
|
687
773
|
<h4 className="font-semibold mb-4">Product</h4>
|
|
688
774
|
<ul className="space-y-3 text-text-muted">
|
|
689
|
-
<li><a href="#
|
|
775
|
+
<li><a href="#how-it-works" className="hover:text-text-primary transition">How It Works</a></li>
|
|
776
|
+
<li><a href="#for-agents" className="hover:text-text-primary transition">For Agents</a></li>
|
|
777
|
+
<li><a href="#for-providers" className="hover:text-text-primary transition">For Providers</a></li>
|
|
778
|
+
<li><a href="/providers/dashboard" className="hover:text-text-primary transition">Provider Dashboard</a></li>
|
|
690
779
|
<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
780
|
<li><a href="https://github.com/nordsym/apiclaw#installation" target="_blank" rel="noopener noreferrer" className="hover:text-text-primary transition">Documentation</a></li>
|
|
693
781
|
</ul>
|
|
694
782
|
</div>
|
|
@@ -696,58 +784,45 @@ export default function Home() {
|
|
|
696
784
|
<div>
|
|
697
785
|
<h4 className="font-semibold mb-4">Company</h4>
|
|
698
786
|
<ul className="space-y-3 text-text-muted">
|
|
699
|
-
<li><a href="https://nordsym.
|
|
787
|
+
<li><a href="https://nordsym.com" target="_blank" rel="noopener noreferrer" className="hover:text-text-primary transition">NordSym</a></li>
|
|
700
788
|
<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>
|
|
789
|
+
<li><a href="https://twitter.com/nordsym" target="_blank" rel="noopener noreferrer" className="hover:text-text-primary transition">Twitter / X</a></li>
|
|
702
790
|
</ul>
|
|
703
791
|
</div>
|
|
704
792
|
</div>
|
|
705
793
|
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
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.
|
|
794
|
+
<div className="pt-8 border-t border-border flex flex-col md:flex-row items-center justify-between gap-4">
|
|
795
|
+
<p className="text-text-muted text-sm">
|
|
796
|
+
© 2026 NordSym. Building infrastructure for agent commerce.
|
|
724
797
|
</p>
|
|
798
|
+
<div className="flex items-center gap-4">
|
|
799
|
+
<div className="badge">
|
|
800
|
+
<Shield className="w-3 h-3" />
|
|
801
|
+
MCP Compatible
|
|
802
|
+
</div>
|
|
803
|
+
<div className="badge badge-live">
|
|
804
|
+
Live
|
|
805
|
+
</div>
|
|
806
|
+
</div>
|
|
725
807
|
</div>
|
|
726
808
|
</div>
|
|
727
809
|
</footer>
|
|
728
810
|
|
|
729
|
-
{/*
|
|
811
|
+
{/* Telegram Chat Bubble */}
|
|
730
812
|
<a
|
|
731
813
|
href="https://t.me/SymbotAPI_bot"
|
|
732
814
|
target="_blank"
|
|
733
815
|
rel="noopener noreferrer"
|
|
734
|
-
className="fixed bottom-6 right-6 z-50 group
|
|
816
|
+
className="fixed bottom-6 right-6 z-50 group"
|
|
735
817
|
>
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
<
|
|
739
|
-
<div className="text-text-muted text-xs">The AI building this — on Telegram</div>
|
|
818
|
+
<div className="flex items-center gap-2 bg-[#0088cc] hover:bg-[#0077b5] text-white px-4 py-3 rounded-full shadow-lg transition-all duration-300 hover:scale-105 hover:shadow-xl">
|
|
819
|
+
<span className="text-xl">🦞</span>
|
|
820
|
+
<span className="font-medium text-sm hidden sm:inline">Chat with the bot</span>
|
|
740
821
|
</div>
|
|
741
|
-
|
|
742
|
-
|
|
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>
|
|
822
|
+
<div className="absolute bottom-full right-0 mb-2 px-3 py-2 bg-surface-elevated border border-border rounded-lg text-xs whitespace-nowrap shadow-lg">
|
|
823
|
+
<span className="text-text-primary font-medium">Talk to the Clawdbot building this</span>
|
|
748
824
|
</div>
|
|
749
825
|
</a>
|
|
750
|
-
|
|
751
826
|
</main>
|
|
752
827
|
);
|
|
753
828
|
}
|