@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/package.json
CHANGED
|
@@ -4,16 +4,19 @@
|
|
|
4
4
|
"private": true,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "next dev",
|
|
7
|
+
"prebuild": "node scripts/generate-stats.js",
|
|
7
8
|
"build": "next build",
|
|
8
9
|
"start": "next start",
|
|
9
10
|
"lint": "next lint"
|
|
10
11
|
},
|
|
11
12
|
"dependencies": {
|
|
12
13
|
"@vercel/analytics": "^1.6.1",
|
|
14
|
+
"@vercel/og": "^0.8.6",
|
|
13
15
|
"lucide-react": "^0.350.0",
|
|
14
16
|
"next": "^14.2.0",
|
|
15
17
|
"react": "^18.2.0",
|
|
16
|
-
"react-dom": "^18.2.0"
|
|
18
|
+
"react-dom": "^18.2.0",
|
|
19
|
+
"recharts": "^3.7.0"
|
|
17
20
|
},
|
|
18
21
|
"devDependencies": {
|
|
19
22
|
"@types/node": "^20",
|
|
@@ -21,6 +24,7 @@
|
|
|
21
24
|
"@types/react-dom": "^18",
|
|
22
25
|
"autoprefixer": "^10",
|
|
23
26
|
"postcss": "^8",
|
|
27
|
+
"sharp": "^0.34.5",
|
|
24
28
|
"tailwindcss": "^3.4.1",
|
|
25
29
|
"typescript": "^5"
|
|
26
30
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<!-- APIClaw App Icon - with background -->
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="icon-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
6
|
+
<stop offset="0%" stop-color="#f87171"/>
|
|
7
|
+
<stop offset="100%" stop-color="#dc2626"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="bg-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
10
|
+
<stop offset="0%" stop-color="#171717"/>
|
|
11
|
+
<stop offset="100%" stop-color="#0a0a0a"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
</defs>
|
|
14
|
+
|
|
15
|
+
<!-- Background with subtle gradient -->
|
|
16
|
+
<rect width="512" height="512" rx="96" fill="url(#bg-gradient)"/>
|
|
17
|
+
|
|
18
|
+
<!-- Claw centered and scaled -->
|
|
19
|
+
<g transform="translate(56, 56) scale(0.78)">
|
|
20
|
+
<g fill="url(#icon-gradient)">
|
|
21
|
+
<path d="M144 320
|
|
22
|
+
C104 264 104 192 144 136
|
|
23
|
+
C184 80 256 56 328 80
|
|
24
|
+
C352 88 376 104 392 128
|
|
25
|
+
L344 176
|
|
26
|
+
C332 160 316 148 296 144
|
|
27
|
+
C248 132 200 152 176 192
|
|
28
|
+
C152 232 160 280 192 312
|
|
29
|
+
Z"/>
|
|
30
|
+
<path d="M192 312
|
|
31
|
+
C224 344 272 360 320 352
|
|
32
|
+
C368 344 408 312 424 264
|
|
33
|
+
L368 240
|
|
34
|
+
C360 268 336 292 304 300
|
|
35
|
+
C272 308 240 300 216 280
|
|
36
|
+
L192 312
|
|
37
|
+
Z"/>
|
|
38
|
+
<path d="M392 128
|
|
39
|
+
L424 184
|
|
40
|
+
C440 216 440 256 424 264
|
|
41
|
+
L368 240
|
|
42
|
+
C376 216 368 192 352 176
|
|
43
|
+
L344 176
|
|
44
|
+
Z"/>
|
|
45
|
+
</g>
|
|
46
|
+
</g>
|
|
47
|
+
</svg>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<!-- APIClaw Logo - Monochrome version -->
|
|
4
|
+
<!-- Uses currentColor for maximum flexibility -->
|
|
5
|
+
|
|
6
|
+
<g fill="currentColor">
|
|
7
|
+
<!-- Upper pincer arm -->
|
|
8
|
+
<path d="M144 320
|
|
9
|
+
C104 264 104 192 144 136
|
|
10
|
+
C184 80 256 56 328 80
|
|
11
|
+
C352 88 376 104 392 128
|
|
12
|
+
L344 176
|
|
13
|
+
C332 160 316 148 296 144
|
|
14
|
+
C248 132 200 152 176 192
|
|
15
|
+
C152 232 160 280 192 312
|
|
16
|
+
Z"/>
|
|
17
|
+
|
|
18
|
+
<!-- Lower pincer arm -->
|
|
19
|
+
<path d="M192 312
|
|
20
|
+
C224 344 272 360 320 352
|
|
21
|
+
C368 344 408 312 424 264
|
|
22
|
+
L368 240
|
|
23
|
+
C360 268 336 292 304 300
|
|
24
|
+
C272 308 240 300 216 280
|
|
25
|
+
L192 312
|
|
26
|
+
Z"/>
|
|
27
|
+
|
|
28
|
+
<!-- Sharp tip accent -->
|
|
29
|
+
<path d="M392 128
|
|
30
|
+
L424 184
|
|
31
|
+
C440 216 440 256 424 264
|
|
32
|
+
L368 240
|
|
33
|
+
C376 216 368 192 352 176
|
|
34
|
+
L344 176
|
|
35
|
+
Z"/>
|
|
36
|
+
</g>
|
|
37
|
+
</svg>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<!-- APIClaw Logo - Ultra Minimalist Claw Mark -->
|
|
4
|
+
<!-- Single color, works everywhere -->
|
|
5
|
+
|
|
6
|
+
<defs>
|
|
7
|
+
<linearGradient id="brand-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
8
|
+
<stop offset="0%" stop-color="#f87171"/>
|
|
9
|
+
<stop offset="100%" stop-color="#dc2626"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
|
|
13
|
+
<!-- Abstract claw pincer - clean, geometric, memorable -->
|
|
14
|
+
<g fill="url(#brand-gradient)">
|
|
15
|
+
<!-- Upper pincer arm -->
|
|
16
|
+
<path d="M144 320
|
|
17
|
+
C104 264 104 192 144 136
|
|
18
|
+
C184 80 256 56 328 80
|
|
19
|
+
C352 88 376 104 392 128
|
|
20
|
+
L344 176
|
|
21
|
+
C332 160 316 148 296 144
|
|
22
|
+
C248 132 200 152 176 192
|
|
23
|
+
C152 232 160 280 192 312
|
|
24
|
+
Z"/>
|
|
25
|
+
|
|
26
|
+
<!-- Lower pincer arm -->
|
|
27
|
+
<path d="M192 312
|
|
28
|
+
C224 344 272 360 320 352
|
|
29
|
+
C368 344 408 312 424 264
|
|
30
|
+
L368 240
|
|
31
|
+
C360 268 336 292 304 300
|
|
32
|
+
C272 308 240 300 216 280
|
|
33
|
+
L192 312
|
|
34
|
+
Z"/>
|
|
35
|
+
|
|
36
|
+
<!-- Sharp tip accent -->
|
|
37
|
+
<path d="M392 128
|
|
38
|
+
L424 184
|
|
39
|
+
C440 216 440 256 424 264
|
|
40
|
+
L368 240
|
|
41
|
+
C376 216 368 192 352 176
|
|
42
|
+
L344 176
|
|
43
|
+
Z"/>
|
|
44
|
+
</g>
|
|
45
|
+
</svg>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<!-- APIClaw Lobster Claw Logo - Minimalist -->
|
|
4
|
+
<!-- Works on both light and dark backgrounds via currentColor -->
|
|
5
|
+
|
|
6
|
+
<defs>
|
|
7
|
+
<linearGradient id="claw-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
8
|
+
<stop offset="0%" stop-color="#ef4444"/>
|
|
9
|
+
<stop offset="50%" stop-color="#dc2626"/>
|
|
10
|
+
<stop offset="100%" stop-color="#b91c1c"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
|
|
13
|
+
<linearGradient id="claw-gradient-dark" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
14
|
+
<stop offset="0%" stop-color="#f87171"/>
|
|
15
|
+
<stop offset="50%" stop-color="#ef4444"/>
|
|
16
|
+
<stop offset="100%" stop-color="#dc2626"/>
|
|
17
|
+
</linearGradient>
|
|
18
|
+
</defs>
|
|
19
|
+
|
|
20
|
+
<g id="claw">
|
|
21
|
+
<!-- Main claw body - curved organic shape -->
|
|
22
|
+
<path
|
|
23
|
+
d="M128 384
|
|
24
|
+
C96 352 80 288 96 224
|
|
25
|
+
C112 160 160 112 224 96
|
|
26
|
+
C256 88 288 96 320 112
|
|
27
|
+
L280 168
|
|
28
|
+
C256 156 232 156 208 168
|
|
29
|
+
C168 188 144 232 152 280
|
|
30
|
+
C156 312 176 344 200 360
|
|
31
|
+
Z"
|
|
32
|
+
fill="url(#claw-gradient)"
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
<!-- Upper pincer -->
|
|
36
|
+
<path
|
|
37
|
+
d="M320 112
|
|
38
|
+
C368 136 400 176 416 232
|
|
39
|
+
C432 288 424 352 392 400
|
|
40
|
+
L336 360
|
|
41
|
+
C356 328 364 288 352 248
|
|
42
|
+
C340 208 312 176 280 168
|
|
43
|
+
Z"
|
|
44
|
+
fill="url(#claw-gradient)"
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
<!-- Lower pincer - pointing down and in -->
|
|
48
|
+
<path
|
|
49
|
+
d="M200 360
|
|
50
|
+
C232 384 272 392 312 384
|
|
51
|
+
C352 376 384 352 392 400
|
|
52
|
+
L384 416
|
|
53
|
+
C344 440 296 448 248 432
|
|
54
|
+
C200 416 160 384 128 384
|
|
55
|
+
Z"
|
|
56
|
+
fill="url(#claw-gradient)"
|
|
57
|
+
/>
|
|
58
|
+
|
|
59
|
+
<!-- Inner claw detail - the gap between pincers -->
|
|
60
|
+
<path
|
|
61
|
+
d="M280 200
|
|
62
|
+
C304 216 320 248 316 280
|
|
63
|
+
C312 312 292 340 264 352
|
|
64
|
+
L248 320
|
|
65
|
+
C264 312 276 292 276 272
|
|
66
|
+
C276 252 264 232 248 224
|
|
67
|
+
Z"
|
|
68
|
+
fill="#0a0a0a"
|
|
69
|
+
fill-opacity="0.3"
|
|
70
|
+
/>
|
|
71
|
+
|
|
72
|
+
<!-- Highlight on upper curve -->
|
|
73
|
+
<path
|
|
74
|
+
d="M160 200
|
|
75
|
+
C176 152 216 120 264 112
|
|
76
|
+
C248 128 224 152 208 184
|
|
77
|
+
C192 216 184 248 176 264
|
|
78
|
+
C168 240 160 216 160 200
|
|
79
|
+
Z"
|
|
80
|
+
fill="white"
|
|
81
|
+
fill-opacity="0.2"
|
|
82
|
+
/>
|
|
83
|
+
</g>
|
|
84
|
+
</svg>
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
|
|
2
|
+
<!DOCTYPE html>
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<style>
|
|
7
|
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800&display=swap');
|
|
8
|
+
|
|
9
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
10
|
+
|
|
11
|
+
body {
|
|
12
|
+
width: 1200px;
|
|
13
|
+
height: 630px;
|
|
14
|
+
background: linear-gradient(135deg, #0a0a0a 0%, #171717 100%);
|
|
15
|
+
font-family: 'Inter', system-ui, sans-serif;
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
padding: 80px;
|
|
20
|
+
position: relative;
|
|
21
|
+
overflow: hidden;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Background pattern */
|
|
25
|
+
.pattern {
|
|
26
|
+
position: absolute;
|
|
27
|
+
top: 0;
|
|
28
|
+
left: 0;
|
|
29
|
+
right: 0;
|
|
30
|
+
bottom: 0;
|
|
31
|
+
background-image:
|
|
32
|
+
radial-gradient(circle at 20% 80%, rgba(239, 68, 68, 0.15) 0%, transparent 50%),
|
|
33
|
+
radial-gradient(circle at 80% 20%, rgba(239, 68, 68, 0.1) 0%, transparent 40%);
|
|
34
|
+
pointer-events: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Grid lines */
|
|
38
|
+
.grid {
|
|
39
|
+
position: absolute;
|
|
40
|
+
top: 0;
|
|
41
|
+
left: 0;
|
|
42
|
+
right: 0;
|
|
43
|
+
bottom: 0;
|
|
44
|
+
background-image:
|
|
45
|
+
linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),
|
|
46
|
+
linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px);
|
|
47
|
+
background-size: 60px 60px;
|
|
48
|
+
pointer-events: none;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.content {
|
|
52
|
+
position: relative;
|
|
53
|
+
z-index: 1;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.logo-row {
|
|
57
|
+
display: flex;
|
|
58
|
+
align-items: center;
|
|
59
|
+
gap: 24px;
|
|
60
|
+
margin-bottom: 40px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.logo {
|
|
64
|
+
width: 80px;
|
|
65
|
+
height: 80px;
|
|
66
|
+
background: linear-gradient(135deg, #f87171 0%, #dc2626 100%);
|
|
67
|
+
border-radius: 20px;
|
|
68
|
+
display: flex;
|
|
69
|
+
align-items: center;
|
|
70
|
+
justify-content: center;
|
|
71
|
+
font-size: 48px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.brand {
|
|
75
|
+
font-size: 48px;
|
|
76
|
+
font-weight: 800;
|
|
77
|
+
color: #fafafa;
|
|
78
|
+
letter-spacing: -0.02em;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.tagline {
|
|
82
|
+
font-size: 56px;
|
|
83
|
+
font-weight: 800;
|
|
84
|
+
line-height: 1.2;
|
|
85
|
+
letter-spacing: -0.03em;
|
|
86
|
+
margin-bottom: 32px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.tagline .gradient {
|
|
90
|
+
background: linear-gradient(135deg, #f87171 0%, #ef4444 50%, #fca5a5 100%);
|
|
91
|
+
-webkit-background-clip: text;
|
|
92
|
+
-webkit-text-fill-color: transparent;
|
|
93
|
+
background-clip: text;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.tagline .white {
|
|
97
|
+
color: #fafafa;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.subtitle {
|
|
101
|
+
font-size: 24px;
|
|
102
|
+
color: #a3a3a3;
|
|
103
|
+
max-width: 700px;
|
|
104
|
+
line-height: 1.5;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.footer {
|
|
108
|
+
position: absolute;
|
|
109
|
+
bottom: 60px;
|
|
110
|
+
left: 80px;
|
|
111
|
+
right: 80px;
|
|
112
|
+
display: flex;
|
|
113
|
+
justify-content: space-between;
|
|
114
|
+
align-items: center;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.stats {
|
|
118
|
+
display: flex;
|
|
119
|
+
gap: 48px;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.stat {
|
|
123
|
+
text-align: left;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.stat-value {
|
|
127
|
+
font-size: 32px;
|
|
128
|
+
font-weight: 800;
|
|
129
|
+
color: #ef4444;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.stat-label {
|
|
133
|
+
font-size: 14px;
|
|
134
|
+
color: #737373;
|
|
135
|
+
text-transform: uppercase;
|
|
136
|
+
letter-spacing: 0.1em;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.url {
|
|
140
|
+
font-size: 20px;
|
|
141
|
+
color: #525252;
|
|
142
|
+
font-weight: 500;
|
|
143
|
+
}
|
|
144
|
+
</style>
|
|
145
|
+
</head>
|
|
146
|
+
<body>
|
|
147
|
+
<div class="pattern"></div>
|
|
148
|
+
<div class="grid"></div>
|
|
149
|
+
|
|
150
|
+
<div class="content">
|
|
151
|
+
<div class="logo-row">
|
|
152
|
+
<div class="logo">🦞</div>
|
|
153
|
+
<div class="brand">APIClaw</div>
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
<h1 class="tagline">
|
|
157
|
+
<span class="gradient">The API layer</span><br>
|
|
158
|
+
<span class="white">for AI agents</span>
|
|
159
|
+
</h1>
|
|
160
|
+
|
|
161
|
+
<p class="subtitle">
|
|
162
|
+
Agents discover and evaluate APIs via MCP. Structured data. Ranked results. No more googling.
|
|
163
|
+
</p>
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
<div class="footer">
|
|
167
|
+
<div class="stats">
|
|
168
|
+
<div class="stat">
|
|
169
|
+
<div class="stat-value">1,400+</div>
|
|
170
|
+
<div class="stat-label">APIs</div>
|
|
171
|
+
</div>
|
|
172
|
+
<div class="stat">
|
|
173
|
+
<div class="stat-value">52</div>
|
|
174
|
+
<div class="stat-label">Categories</div>
|
|
175
|
+
</div>
|
|
176
|
+
<div class="stat">
|
|
177
|
+
<div class="stat-value">MCP</div>
|
|
178
|
+
<div class="stat-label">Native</div>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="url">apiclaw.com</div>
|
|
182
|
+
</div>
|
|
183
|
+
</body>
|
|
184
|
+
</html>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "APIClaw",
|
|
3
|
+
"short_name": "APIClaw",
|
|
4
|
+
"description": "The API layer for AI agents",
|
|
5
|
+
"start_url": "/",
|
|
6
|
+
"display": "standalone",
|
|
7
|
+
"background_color": "#0a0a0a",
|
|
8
|
+
"theme_color": "#ef4444",
|
|
9
|
+
"icons": [
|
|
10
|
+
{
|
|
11
|
+
"src": "/favicon-16x16.png",
|
|
12
|
+
"sizes": "16x16",
|
|
13
|
+
"type": "image/png"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"src": "/favicon-32x32.png",
|
|
17
|
+
"sizes": "32x32",
|
|
18
|
+
"type": "image/png"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"src": "/android-chrome-192x192.png",
|
|
22
|
+
"sizes": "192x192",
|
|
23
|
+
"type": "image/png"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"src": "/android-chrome-512x512.png",
|
|
27
|
+
"sizes": "512x512",
|
|
28
|
+
"type": "image/png"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|