forgedock 1.0.17 → 1.0.18
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/README.md +34 -1
- package/bin/cross-publish.mjs +344 -0
- package/bin/forgedock.mjs +229 -17
- package/commands/autopilot.md +77 -0
- package/commands/design-bench.md +176 -0
- package/commands/design-render-critique-loop.md +103 -0
- package/commands/design.md +259 -0
- package/commands/issue.md +7 -3
- package/commands/orchestrate.md +121 -0
- package/commands/qa-sweep.md +37 -2
- package/commands/quality-gate.md +30 -0
- package/commands/review-pr-staging.md +158 -2
- package/commands/test-gate.md +929 -0
- package/commands/work-on/build/implement.md +5 -3
- package/commands/work-on.md +53 -3
- package/docs/CI.md +177 -0
- package/docs/FORGE-PROTOCOL.md +324 -0
- package/docs/articles/b-vs-c-baseline.md +210 -0
- package/docs/articles/full-abc-benchmark.md +205 -0
- package/docs/articles/selective-spec-loading-token-savings.md +140 -0
- package/docs/design/abc-benchmark.md +195 -0
- package/docs/design/design-architect-rationale.md +123 -0
- package/docs/design/design-memory.md +61 -0
- package/docs/design/design-spec-schema.md +248 -0
- package/docs/design/design-system-lint.md +150 -0
- package/docs/design/divergent-generation.md +106 -0
- package/docs/design/effects-appropriateness.md +133 -0
- package/docs/design/fixtures/briefs/README.md +47 -0
- package/docs/design/fixtures/briefs/cadence.md +39 -0
- package/docs/design/fixtures/briefs/plume.md +39 -0
- package/docs/design/fixtures/briefs/slipstream.md +39 -0
- package/docs/design/fixtures/briefs/tender.md +39 -0
- package/docs/design/fixtures/briefs/voltage.md +39 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-1.html +364 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-2.html +420 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-3.html +506 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-1.html +611 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-2.html +594 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-3.html +817 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/runs.json +175 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/scorecard.json +138 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-1.html +373 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-2.html +398 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-3.html +595 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-1.html +531 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-2.html +565 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-3.html +674 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-1.html +388 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-2.html +463 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-3.html +568 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-1.html +562 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-2.html +618 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-3.html +618 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-1.html +364 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-2.html +420 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-3.html +506 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-1.html +527 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-2.html +445 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-3.html +483 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-1.html +611 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-2.html +594 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-3.html +817 -0
- package/docs/design/fixtures/runs/full-abc/runs.json +190 -0
- package/docs/design/fixtures/runs/full-abc/scorecard.json +144 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-1.html +496 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-2.html +447 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-3.html +564 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-1.html +373 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-2.html +398 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-3.html +595 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-1.html +622 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-2.html +475 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-3.html +660 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-1.html +531 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-2.html +565 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-3.html +674 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-1.html +525 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-2.html +446 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-3.html +463 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-1.html +388 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-2.html +463 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-3.html +568 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-1.html +1068 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-2.html +1423 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-3.html +1245 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-1.html +305 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-2.html +327 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-3.html +428 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-1.html +1270 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-2.html +1172 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-3.html +1532 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-1.html +315 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-2.html +342 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-3.html +353 -0
- package/docs/design/fixtures/runs/full-abc-opus/runs.json +190 -0
- package/docs/design/fixtures/runs/full-abc-opus/scorecard.json +144 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-1.html +345 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-2.html +396 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-3.html +502 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-1.html +408 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-2.html +446 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-3.html +496 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-1.html +813 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-2.html +711 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-3.html +721 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-1.html +280 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-2.html +291 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-3.html +366 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-1.html +1010 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-2.html +836 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-3.html +930 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-1.html +407 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-2.html +396 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-3.html +529 -0
- package/docs/design/foundations/brutalist.css +294 -0
- package/docs/design/foundations/editorial.css +300 -0
- package/docs/design/foundations/minimal-luxury.css +295 -0
- package/docs/design/foundations/technical.css +293 -0
- package/docs/design/foundations/warm-photo.css +299 -0
- package/docs/design/reference-corpus.md +1726 -0
- package/docs/design/render-critique-loop.md +57 -0
- package/docs/spec-graph-schema.md +397 -0
- package/package.json +1 -1
- package/scripts/bench-scorecard.mjs +239 -0
- package/scripts/build-spec-graph.mjs +509 -0
- package/scripts/classify-lane.sh +0 -7
- package/scripts/design-system-lint.mjs +993 -0
- package/scripts/graph-query.sh +486 -0
- package/scripts/transition-label.sh +10 -2
- package/scripts/validate-spec-graph.sh +423 -0
- package/templates/workflows/forgedock-review.yml +96 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Tender — Payments Infrastructure for Internet Businesses</title>
|
|
7
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
8
|
+
<script>
|
|
9
|
+
tailwind.config = {
|
|
10
|
+
theme: {
|
|
11
|
+
extend: {
|
|
12
|
+
fontFamily: {
|
|
13
|
+
mono: ['JetBrains Mono', 'Fira Code', 'Consolas', 'monospace'],
|
|
14
|
+
},
|
|
15
|
+
colors: {
|
|
16
|
+
brand: {
|
|
17
|
+
50: '#f0fdf4',
|
|
18
|
+
100: '#dcfce7',
|
|
19
|
+
400: '#4ade80',
|
|
20
|
+
500: '#22c55e',
|
|
21
|
+
600: '#16a34a',
|
|
22
|
+
700: '#15803d',
|
|
23
|
+
900: '#14532d',
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
</script>
|
|
30
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
31
|
+
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet" />
|
|
32
|
+
<style>
|
|
33
|
+
body { font-family: 'Inter', sans-serif; }
|
|
34
|
+
.mono { font-family: 'JetBrains Mono', monospace; }
|
|
35
|
+
.terminal-glow { box-shadow: 0 0 0 1px rgba(34,197,94,0.3), 0 20px 60px rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.05); }
|
|
36
|
+
.code-line { animation: fadeInLine 0.3s ease forwards; opacity: 0; }
|
|
37
|
+
@keyframes fadeInLine {
|
|
38
|
+
to { opacity: 1; }
|
|
39
|
+
}
|
|
40
|
+
.code-line:nth-child(1) { animation-delay: 0.1s; }
|
|
41
|
+
.code-line:nth-child(2) { animation-delay: 0.2s; }
|
|
42
|
+
.code-line:nth-child(3) { animation-delay: 0.3s; }
|
|
43
|
+
.code-line:nth-child(4) { animation-delay: 0.4s; }
|
|
44
|
+
.code-line:nth-child(5) { animation-delay: 0.5s; }
|
|
45
|
+
.code-line:nth-child(6) { animation-delay: 0.6s; }
|
|
46
|
+
.code-line:nth-child(7) { animation-delay: 0.7s; }
|
|
47
|
+
.code-line:nth-child(8) { animation-delay: 0.8s; }
|
|
48
|
+
.code-line:nth-child(9) { animation-delay: 0.9s; }
|
|
49
|
+
.code-line:nth-child(10) { animation-delay: 1.0s; }
|
|
50
|
+
.code-line:nth-child(11) { animation-delay: 1.1s; }
|
|
51
|
+
.code-line:nth-child(12) { animation-delay: 1.2s; }
|
|
52
|
+
.code-line:nth-child(13) { animation-delay: 1.3s; }
|
|
53
|
+
.scan-line {
|
|
54
|
+
background: linear-gradient(to bottom, transparent, rgba(34,197,94,0.04), transparent);
|
|
55
|
+
animation: scan 4s linear infinite;
|
|
56
|
+
pointer-events: none;
|
|
57
|
+
}
|
|
58
|
+
@keyframes scan {
|
|
59
|
+
0% { transform: translateY(-100%); }
|
|
60
|
+
100% { transform: translateY(200%); }
|
|
61
|
+
}
|
|
62
|
+
.grid-bg {
|
|
63
|
+
background-image: linear-gradient(rgba(34,197,94,0.05) 1px, transparent 1px),
|
|
64
|
+
linear-gradient(90deg, rgba(34,197,94,0.05) 1px, transparent 1px);
|
|
65
|
+
background-size: 40px 40px;
|
|
66
|
+
}
|
|
67
|
+
</style>
|
|
68
|
+
</head>
|
|
69
|
+
<body class="bg-gray-950 text-gray-100 antialiased">
|
|
70
|
+
|
|
71
|
+
<!-- Nav -->
|
|
72
|
+
<nav class="fixed top-0 inset-x-0 z-50 border-b border-gray-800/60 bg-gray-950/80 backdrop-blur-md">
|
|
73
|
+
<div class="max-w-7xl mx-auto px-6 flex items-center justify-between h-14">
|
|
74
|
+
<div class="flex items-center gap-8">
|
|
75
|
+
<a href="#" class="mono text-green-400 font-bold text-lg tracking-tight">tender</a>
|
|
76
|
+
<div class="hidden md:flex items-center gap-6 text-sm text-gray-400">
|
|
77
|
+
<a href="#" class="hover:text-gray-200 transition-colors">Docs</a>
|
|
78
|
+
<a href="#" class="hover:text-gray-200 transition-colors">API Reference</a>
|
|
79
|
+
<a href="#" class="hover:text-gray-200 transition-colors">Pricing</a>
|
|
80
|
+
<a href="#" class="hover:text-gray-200 transition-colors">Status</a>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
<div class="flex items-center gap-3">
|
|
84
|
+
<a href="#" class="text-sm text-gray-400 hover:text-gray-200 transition-colors px-3 py-1.5">Sign in</a>
|
|
85
|
+
<a href="#" class="mono text-xs bg-green-500 hover:bg-green-400 text-gray-950 font-bold px-4 py-2 rounded transition-colors">Start building →</a>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</nav>
|
|
89
|
+
|
|
90
|
+
<!-- Hero -->
|
|
91
|
+
<section class="relative pt-28 pb-20 overflow-hidden grid-bg">
|
|
92
|
+
<div class="absolute inset-0 scan-line h-32 w-full"></div>
|
|
93
|
+
<!-- Radial glow -->
|
|
94
|
+
<div class="absolute top-0 left-1/2 -translate-x-1/2 w-[800px] h-[500px] bg-green-500/5 rounded-full blur-3xl pointer-events-none"></div>
|
|
95
|
+
|
|
96
|
+
<div class="max-w-7xl mx-auto px-6">
|
|
97
|
+
<div class="grid lg:grid-cols-2 gap-16 items-start">
|
|
98
|
+
<!-- Left: copy -->
|
|
99
|
+
<div class="pt-4">
|
|
100
|
+
<div class="inline-flex items-center gap-2 mono text-xs text-green-400 border border-green-500/30 bg-green-500/5 rounded px-3 py-1.5 mb-6">
|
|
101
|
+
<span class="w-1.5 h-1.5 bg-green-400 rounded-full animate-pulse"></span>
|
|
102
|
+
v3.1 now live — Instant Payouts in 47 countries
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<h1 class="text-5xl font-extrabold leading-none tracking-tight text-white mb-6">
|
|
106
|
+
The payments API<br />
|
|
107
|
+
serious companies<br />
|
|
108
|
+
<span class="text-green-400">ship on.</span>
|
|
109
|
+
</h1>
|
|
110
|
+
|
|
111
|
+
<p class="text-lg text-gray-400 leading-relaxed mb-8 max-w-lg">
|
|
112
|
+
Unified API for accepting payments, running subscriptions, and moving money globally. Fraud screening, currency conversion, and compliance are handled for you — so your team can focus on the product.
|
|
113
|
+
</p>
|
|
114
|
+
|
|
115
|
+
<div class="flex flex-wrap gap-3 mb-12">
|
|
116
|
+
<a href="#" class="mono text-sm font-bold bg-green-500 hover:bg-green-400 text-gray-950 px-6 py-3 rounded transition-all hover:shadow-lg hover:shadow-green-500/20">
|
|
117
|
+
Start integrating
|
|
118
|
+
</a>
|
|
119
|
+
<a href="#" class="mono text-sm font-medium border border-gray-700 hover:border-gray-500 text-gray-300 px-6 py-3 rounded transition-colors">
|
|
120
|
+
Read the docs →
|
|
121
|
+
</a>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div class="grid grid-cols-3 gap-6 pt-6 border-t border-gray-800">
|
|
125
|
+
<div>
|
|
126
|
+
<p class="mono text-2xl font-bold text-white">$94B+</p>
|
|
127
|
+
<p class="text-xs text-gray-500 mt-1">processed annually</p>
|
|
128
|
+
</div>
|
|
129
|
+
<div>
|
|
130
|
+
<p class="mono text-2xl font-bold text-white">135+</p>
|
|
131
|
+
<p class="text-xs text-gray-500 mt-1">currencies supported</p>
|
|
132
|
+
</div>
|
|
133
|
+
<div>
|
|
134
|
+
<p class="mono text-2xl font-bold text-white">99.99%</p>
|
|
135
|
+
<p class="text-xs text-gray-500 mt-1">uptime SLA</p>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
<!-- Right: terminal -->
|
|
141
|
+
<div class="terminal-glow bg-gray-900 rounded-xl overflow-hidden border border-gray-800">
|
|
142
|
+
<!-- Terminal header -->
|
|
143
|
+
<div class="flex items-center gap-2 px-4 py-3 bg-gray-800/60 border-b border-gray-700/60">
|
|
144
|
+
<span class="w-3 h-3 rounded-full bg-red-500/70"></span>
|
|
145
|
+
<span class="w-3 h-3 rounded-full bg-yellow-500/70"></span>
|
|
146
|
+
<span class="w-3 h-3 rounded-full bg-green-500/70"></span>
|
|
147
|
+
<span class="mono text-xs text-gray-500 ml-2">create-payment.js</span>
|
|
148
|
+
</div>
|
|
149
|
+
<!-- Code -->
|
|
150
|
+
<div class="p-6 mono text-sm leading-relaxed overflow-x-auto">
|
|
151
|
+
<div class="code-line"><span class="text-gray-500">// Install: npm install @tender/sdk</span></div>
|
|
152
|
+
<div class="code-line mt-3"><span class="text-blue-400">import</span> <span class="text-white">Tender</span> <span class="text-blue-400">from</span> <span class="text-green-300">'@tender/sdk'</span><span class="text-gray-400">;</span></div>
|
|
153
|
+
<div class="code-line mt-1"></div>
|
|
154
|
+
<div class="code-line"><span class="text-blue-400">const</span> <span class="text-white">tender</span> <span class="text-gray-400">=</span> <span class="text-blue-400">new</span> <span class="text-yellow-300">Tender</span><span class="text-gray-400">(</span><span class="text-white">process</span><span class="text-gray-400">.</span><span class="text-white">env</span><span class="text-gray-400">.</span><span class="text-green-300">TENDER_SECRET_KEY</span><span class="text-gray-400">);</span></div>
|
|
155
|
+
<div class="code-line mt-1"></div>
|
|
156
|
+
<div class="code-line"><span class="text-blue-400">const</span> <span class="text-white">payment</span> <span class="text-gray-400">=</span> <span class="text-blue-400">await</span> <span class="text-white">tender</span><span class="text-gray-400">.</span><span class="text-yellow-300">payments</span><span class="text-gray-400">.</span><span class="text-yellow-300">create</span><span class="text-gray-400">({</span></div>
|
|
157
|
+
<div class="code-line pl-4"><span class="text-green-300">amount</span><span class="text-gray-400">:</span> <span class="text-orange-300">4999</span><span class="text-gray-400">,</span> <span class="text-gray-500">// $49.99</span></div>
|
|
158
|
+
<div class="code-line pl-4"><span class="text-green-300">currency</span><span class="text-gray-400">:</span> <span class="text-green-300">'usd'</span><span class="text-gray-400">,</span></div>
|
|
159
|
+
<div class="code-line pl-4"><span class="text-green-300">payment_method</span><span class="text-gray-400">:</span> <span class="text-green-300">'pm_card_visa'</span><span class="text-gray-400">,</span></div>
|
|
160
|
+
<div class="code-line pl-4"><span class="text-green-300">capture_method</span><span class="text-gray-400">:</span> <span class="text-green-300">'automatic'</span><span class="text-gray-400">,</span></div>
|
|
161
|
+
<div class="code-line pl-4"><span class="text-green-300">metadata</span><span class="text-gray-400">:</span> <span class="text-gray-400">{</span> <span class="text-green-300">order_id</span><span class="text-gray-400">:</span> <span class="text-green-300">'ord_8821'</span> <span class="text-gray-400">}</span></div>
|
|
162
|
+
<div class="code-line"><span class="text-gray-400">});</span></div>
|
|
163
|
+
<div class="code-line mt-3"><span class="text-gray-500">// → { id: 'pay_3Kx92m...', status: 'succeeded' }</span></div>
|
|
164
|
+
</div>
|
|
165
|
+
<!-- Response bar -->
|
|
166
|
+
<div class="px-6 py-3 bg-gray-800/40 border-t border-gray-700/60 flex items-center justify-between">
|
|
167
|
+
<div class="flex items-center gap-2">
|
|
168
|
+
<span class="w-2 h-2 bg-green-400 rounded-full"></span>
|
|
169
|
+
<span class="mono text-xs text-green-400">200 OK · 142ms</span>
|
|
170
|
+
</div>
|
|
171
|
+
<div class="flex gap-4 mono text-xs text-gray-500">
|
|
172
|
+
<span>fraud_score: 2/100</span>
|
|
173
|
+
<span>currency: USD → USD</span>
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
179
|
+
</section>
|
|
180
|
+
|
|
181
|
+
<!-- Trusted by -->
|
|
182
|
+
<section class="py-12 border-y border-gray-800/60">
|
|
183
|
+
<div class="max-w-7xl mx-auto px-6">
|
|
184
|
+
<p class="mono text-xs text-gray-600 text-center mb-8 tracking-widest uppercase">Trusted by engineering teams at</p>
|
|
185
|
+
<div class="flex flex-wrap items-center justify-center gap-12 opacity-40">
|
|
186
|
+
<span class="mono text-xl font-bold text-gray-300">Lineage</span>
|
|
187
|
+
<span class="mono text-xl font-bold text-gray-300">Circlemore</span>
|
|
188
|
+
<span class="mono text-xl font-bold text-gray-300">VaultPay</span>
|
|
189
|
+
<span class="mono text-xl font-bold text-gray-300">Meridian</span>
|
|
190
|
+
<span class="mono text-xl font-bold text-gray-300">Corusant</span>
|
|
191
|
+
<span class="mono text-xl font-bold text-gray-300">Axial</span>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</section>
|
|
195
|
+
|
|
196
|
+
<!-- Features grid -->
|
|
197
|
+
<section class="py-24">
|
|
198
|
+
<div class="max-w-7xl mx-auto px-6">
|
|
199
|
+
<div class="mb-16">
|
|
200
|
+
<p class="mono text-green-400 text-sm mb-3">// core capabilities</p>
|
|
201
|
+
<h2 class="text-4xl font-extrabold text-white">Everything the money stack needs.</h2>
|
|
202
|
+
<p class="text-gray-400 mt-3 max-w-xl">One platform, one contract, one integration. Tender replaces a patchwork of payment processors, fraud tools, billing engines, and payout providers.</p>
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
206
|
+
|
|
207
|
+
<!-- Card 1 -->
|
|
208
|
+
<div class="bg-gray-900 border border-gray-800 rounded-xl p-6 hover:border-gray-700 transition-colors group">
|
|
209
|
+
<div class="w-10 h-10 bg-green-500/10 border border-green-500/20 rounded-lg flex items-center justify-center mb-4">
|
|
210
|
+
<svg class="w-5 h-5 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z"/></svg>
|
|
211
|
+
</div>
|
|
212
|
+
<h3 class="font-bold text-white mb-2">Global Acceptance</h3>
|
|
213
|
+
<p class="text-sm text-gray-400 leading-relaxed">Cards, wallets, SEPA, ACH, PIX, UPI, and 80+ local payment methods. Route intelligently across acquiring banks to maximize approval rates.</p>
|
|
214
|
+
<div class="mt-4 mono text-xs text-green-400 opacity-0 group-hover:opacity-100 transition-opacity">135 currencies · 47 countries</div>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
<!-- Card 2 -->
|
|
218
|
+
<div class="bg-gray-900 border border-gray-800 rounded-xl p-6 hover:border-gray-700 transition-colors group">
|
|
219
|
+
<div class="w-10 h-10 bg-green-500/10 border border-green-500/20 rounded-lg flex items-center justify-center mb-4">
|
|
220
|
+
<svg class="w-5 h-5 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/></svg>
|
|
221
|
+
</div>
|
|
222
|
+
<h3 class="font-bold text-white mb-2">Subscription Billing</h3>
|
|
223
|
+
<p class="text-sm text-gray-400 leading-relaxed">Metered, seat-based, or flat-rate. Proration, trials, upgrades, and dunning — all modeled in the API. Invoices generated and delivered automatically.</p>
|
|
224
|
+
<div class="mt-4 mono text-xs text-green-400 opacity-0 group-hover:opacity-100 transition-opacity">smart retries · webhook events</div>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
<!-- Card 3 -->
|
|
228
|
+
<div class="bg-gray-900 border border-gray-800 rounded-xl p-6 hover:border-gray-700 transition-colors group">
|
|
229
|
+
<div class="w-10 h-10 bg-green-500/10 border border-green-500/20 rounded-lg flex items-center justify-center mb-4">
|
|
230
|
+
<svg class="w-5 h-5 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"/></svg>
|
|
231
|
+
</div>
|
|
232
|
+
<h3 class="font-bold text-white mb-2">Marketplace Payouts</h3>
|
|
233
|
+
<p class="text-sm text-gray-400 leading-relaxed">Split payments, hold funds in escrow, and pay out to sellers and contractors in their local currency. KYC and seller onboarding included.</p>
|
|
234
|
+
<div class="mt-4 mono text-xs text-green-400 opacity-0 group-hover:opacity-100 transition-opacity">instant · scheduled · batch</div>
|
|
235
|
+
</div>
|
|
236
|
+
|
|
237
|
+
<!-- Card 4 -->
|
|
238
|
+
<div class="bg-gray-900 border border-gray-800 rounded-xl p-6 hover:border-gray-700 transition-colors group">
|
|
239
|
+
<div class="w-10 h-10 bg-green-500/10 border border-green-500/20 rounded-lg flex items-center justify-center mb-4">
|
|
240
|
+
<svg class="w-5 h-5 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/></svg>
|
|
241
|
+
</div>
|
|
242
|
+
<h3 class="font-bold text-white mb-2">Fraud & Risk</h3>
|
|
243
|
+
<p class="text-sm text-gray-400 leading-relaxed">ML-based fraud scoring on every transaction, trained on billions of data points. 3DS2, address verification, CVV, and device fingerprinting layered in.</p>
|
|
244
|
+
<div class="mt-4 mono text-xs text-green-400 opacity-0 group-hover:opacity-100 transition-opacity">sub-100ms · custom rules</div>
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
<!-- Card 5 -->
|
|
248
|
+
<div class="bg-gray-900 border border-gray-800 rounded-xl p-6 hover:border-gray-700 transition-colors group">
|
|
249
|
+
<div class="w-10 h-10 bg-green-500/10 border border-green-500/20 rounded-lg flex items-center justify-center mb-4">
|
|
250
|
+
<svg class="w-5 h-5 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/></svg>
|
|
251
|
+
</div>
|
|
252
|
+
<h3 class="font-bold text-white mb-2">Finance Dashboard</h3>
|
|
253
|
+
<p class="text-sm text-gray-400 leading-relaxed">Real-time revenue, MRR, churn, disputes, and payout schedules. Exportable to your ERP. Role-based access so finance and ops teams see what they need.</p>
|
|
254
|
+
<div class="mt-4 mono text-xs text-green-400 opacity-0 group-hover:opacity-100 transition-opacity">CSV · QuickBooks · NetSuite</div>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
<!-- Card 6 -->
|
|
258
|
+
<div class="bg-gray-900 border border-gray-800 rounded-xl p-6 hover:border-gray-700 transition-colors group">
|
|
259
|
+
<div class="w-10 h-10 bg-green-500/10 border border-green-500/20 rounded-lg flex items-center justify-center mb-4">
|
|
260
|
+
<svg class="w-5 h-5 text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/></svg>
|
|
261
|
+
</div>
|
|
262
|
+
<h3 class="font-bold text-white mb-2">Compliance by Default</h3>
|
|
263
|
+
<p class="text-sm text-gray-400 leading-relaxed">PCI DSS Level 1, SOC 2 Type II, GDPR. Tax calculation and remittance for US sales tax and EU VAT. We carry the regulatory burden so you don't have to.</p>
|
|
264
|
+
<div class="mt-4 mono text-xs text-green-400 opacity-0 group-hover:opacity-100 transition-opacity">PCI L1 · SOC 2 · ISO 27001</div>
|
|
265
|
+
</div>
|
|
266
|
+
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</section>
|
|
270
|
+
|
|
271
|
+
<!-- Code deep dive -->
|
|
272
|
+
<section class="py-24 bg-gray-900/40 border-y border-gray-800">
|
|
273
|
+
<div class="max-w-7xl mx-auto px-6">
|
|
274
|
+
<div class="grid lg:grid-cols-2 gap-16 items-center">
|
|
275
|
+
<div>
|
|
276
|
+
<p class="mono text-green-400 text-sm mb-3">// built for engineers</p>
|
|
277
|
+
<h2 class="text-4xl font-extrabold text-white mb-6">An API that doesn't get in your way.</h2>
|
|
278
|
+
<p class="text-gray-400 leading-relaxed mb-6">Every resource is predictable. Webhooks fire on every state change. Idempotency keys mean retries are safe. SDKs ship for Node, Python, Go, Ruby, Java, and .NET — with types included.</p>
|
|
279
|
+
<ul class="space-y-3 text-sm text-gray-400">
|
|
280
|
+
<li class="flex gap-3 items-start"><span class="text-green-400 mt-0.5">✓</span> RESTful design with consistent error shapes</li>
|
|
281
|
+
<li class="flex gap-3 items-start"><span class="text-green-400 mt-0.5">✓</span> Versioned API — never a breaking change without notice</li>
|
|
282
|
+
<li class="flex gap-3 items-start"><span class="text-green-400 mt-0.5">✓</span> Test mode with realistic mock data and card numbers</li>
|
|
283
|
+
<li class="flex gap-3 items-start"><span class="text-green-400 mt-0.5">✓</span> OpenAPI spec for generating your own client</li>
|
|
284
|
+
<li class="flex gap-3 items-start"><span class="text-green-400 mt-0.5">✓</span> Webhook delivery with retries, signatures, and replay</li>
|
|
285
|
+
</ul>
|
|
286
|
+
<div class="flex gap-3 mt-8">
|
|
287
|
+
<a href="#" class="mono text-sm font-bold bg-green-500 hover:bg-green-400 text-gray-950 px-5 py-2.5 rounded transition-colors">View the docs →</a>
|
|
288
|
+
<a href="#" class="mono text-sm text-gray-400 hover:text-white px-5 py-2.5 border border-gray-700 hover:border-gray-500 rounded transition-colors">API Reference</a>
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
|
|
292
|
+
<div class="space-y-3">
|
|
293
|
+
<!-- Subscription snippet -->
|
|
294
|
+
<div class="bg-gray-950 rounded-xl border border-gray-800 overflow-hidden">
|
|
295
|
+
<div class="flex items-center justify-between px-4 py-2.5 bg-gray-800/40 border-b border-gray-800">
|
|
296
|
+
<span class="mono text-xs text-gray-500">create-subscription.py</span>
|
|
297
|
+
<span class="mono text-xs text-gray-600">Python</span>
|
|
298
|
+
</div>
|
|
299
|
+
<pre class="p-4 mono text-xs leading-relaxed text-gray-300 overflow-x-auto"><code><span class="text-blue-400">import</span> tender
|
|
300
|
+
|
|
301
|
+
client = tender.<span class="text-yellow-300">Client</span>(<span class="text-green-300">"sk_live_..."</span>)
|
|
302
|
+
|
|
303
|
+
subscription = client.subscriptions.<span class="text-yellow-300">create</span>(
|
|
304
|
+
customer=<span class="text-green-300">"cus_7Gh3pa"</span>,
|
|
305
|
+
items=[{
|
|
306
|
+
<span class="text-green-300">"price"</span>: <span class="text-green-300">"price_growth_monthly"</span>,
|
|
307
|
+
<span class="text-green-300">"quantity"</span>: <span class="text-orange-300">5</span> <span class="text-gray-500"># seats</span>
|
|
308
|
+
}],
|
|
309
|
+
trial_period_days=<span class="text-orange-300">14</span>,
|
|
310
|
+
proration_behavior=<span class="text-green-300">"create_prorations"</span>
|
|
311
|
+
)
|
|
312
|
+
<span class="text-gray-500"># → { id: 'sub_K2m9...', status: 'trialing' }</span></code></pre>
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
<!-- Payout snippet -->
|
|
316
|
+
<div class="bg-gray-950 rounded-xl border border-gray-800 overflow-hidden">
|
|
317
|
+
<div class="flex items-center justify-between px-4 py-2.5 bg-gray-800/40 border-b border-gray-800">
|
|
318
|
+
<span class="mono text-xs text-gray-500">marketplace-payout.go</span>
|
|
319
|
+
<span class="mono text-xs text-gray-600">Go</span>
|
|
320
|
+
</div>
|
|
321
|
+
<pre class="p-4 mono text-xs leading-relaxed text-gray-300 overflow-x-auto"><code>transfer, err := client.Transfers.<span class="text-yellow-300">Create</span>(<span class="text-gray-400">&</span>tender.TransferParams{
|
|
322
|
+
Amount: tender.<span class="text-yellow-300">Int64</span>(<span class="text-orange-300">8500</span>), <span class="text-gray-500">// $85.00</span>
|
|
323
|
+
Currency: tender.<span class="text-yellow-300">String</span>(<span class="text-green-300">"usd"</span>),
|
|
324
|
+
Destination: tender.<span class="text-yellow-300">String</span>(<span class="text-green-300">"acct_seller_19Jx"</span>),
|
|
325
|
+
Description: tender.<span class="text-yellow-300">String</span>(<span class="text-green-300">"Order #8821 payout"</span>),
|
|
326
|
+
})</code></pre>
|
|
327
|
+
</div>
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
</div>
|
|
331
|
+
</section>
|
|
332
|
+
|
|
333
|
+
<!-- For finance teams -->
|
|
334
|
+
<section class="py-24">
|
|
335
|
+
<div class="max-w-7xl mx-auto px-6">
|
|
336
|
+
<div class="grid lg:grid-cols-5 gap-16 items-center">
|
|
337
|
+
<div class="lg:col-span-2">
|
|
338
|
+
<p class="mono text-green-400 text-sm mb-3">// not just for engineers</p>
|
|
339
|
+
<h2 class="text-3xl font-extrabold text-white mb-4">Finance teams get a real dashboard.</h2>
|
|
340
|
+
<p class="text-gray-400 text-sm leading-relaxed mb-6">Revenue trends, churn metrics, outstanding invoices, dispute management, and payout scheduling — all in one place. No more pulling data from three systems.</p>
|
|
341
|
+
<ul class="space-y-2 text-sm text-gray-400">
|
|
342
|
+
<li class="flex gap-2"><span class="text-green-400">→</span> Live MRR and ARR tracking</li>
|
|
343
|
+
<li class="flex gap-2"><span class="text-green-400">→</span> Automated dispute response workflows</li>
|
|
344
|
+
<li class="flex gap-2"><span class="text-green-400">→</span> Scheduled payout reports by entity</li>
|
|
345
|
+
<li class="flex gap-2"><span class="text-green-400">→</span> Tax liability summaries by jurisdiction</li>
|
|
346
|
+
<li class="flex gap-2"><span class="text-green-400">→</span> Custom roles: finance sees billing, not API keys</li>
|
|
347
|
+
</ul>
|
|
348
|
+
</div>
|
|
349
|
+
<!-- Mock dashboard -->
|
|
350
|
+
<div class="lg:col-span-3 bg-gray-900 rounded-2xl border border-gray-800 p-6">
|
|
351
|
+
<div class="flex items-center justify-between mb-6">
|
|
352
|
+
<h3 class="font-bold text-white">Revenue Overview</h3>
|
|
353
|
+
<div class="flex gap-2">
|
|
354
|
+
<button class="mono text-xs px-3 py-1 bg-green-500/10 text-green-400 border border-green-500/20 rounded">MTD</button>
|
|
355
|
+
<button class="mono text-xs px-3 py-1 text-gray-500 border border-gray-700 rounded">QTD</button>
|
|
356
|
+
<button class="mono text-xs px-3 py-1 text-gray-500 border border-gray-700 rounded">YTD</button>
|
|
357
|
+
</div>
|
|
358
|
+
</div>
|
|
359
|
+
<div class="grid grid-cols-3 gap-4 mb-6">
|
|
360
|
+
<div class="bg-gray-800/60 rounded-lg p-4">
|
|
361
|
+
<p class="text-xs text-gray-500 mb-1">MRR</p>
|
|
362
|
+
<p class="mono text-xl font-bold text-white">$482,190</p>
|
|
363
|
+
<p class="text-xs text-green-400 mt-1">↑ 12.4%</p>
|
|
364
|
+
</div>
|
|
365
|
+
<div class="bg-gray-800/60 rounded-lg p-4">
|
|
366
|
+
<p class="text-xs text-gray-500 mb-1">Disputes</p>
|
|
367
|
+
<p class="mono text-xl font-bold text-white">0.04%</p>
|
|
368
|
+
<p class="text-xs text-green-400 mt-1">↓ 0.01%</p>
|
|
369
|
+
</div>
|
|
370
|
+
<div class="bg-gray-800/60 rounded-lg p-4">
|
|
371
|
+
<p class="text-xs text-gray-500 mb-1">Net Payouts</p>
|
|
372
|
+
<p class="mono text-xl font-bold text-white">$219,880</p>
|
|
373
|
+
<p class="text-xs text-gray-500 mt-1">Fri schedule</p>
|
|
374
|
+
</div>
|
|
375
|
+
</div>
|
|
376
|
+
<!-- Fake bar chart -->
|
|
377
|
+
<div class="h-28 flex items-end gap-1.5">
|
|
378
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:45%"></div>
|
|
379
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:55%"></div>
|
|
380
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:40%"></div>
|
|
381
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:70%"></div>
|
|
382
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:60%"></div>
|
|
383
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:85%"></div>
|
|
384
|
+
<div class="flex-1 bg-green-500/30 rounded-t" style="height:75%"></div>
|
|
385
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:90%"></div>
|
|
386
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:80%"></div>
|
|
387
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:95%"></div>
|
|
388
|
+
<div class="flex-1 bg-green-500/20 rounded-t" style="height:100%"></div>
|
|
389
|
+
<div class="flex-1 bg-green-400/40 rounded-t border border-green-400/40" style="height:108%; position:relative; top:0"></div>
|
|
390
|
+
</div>
|
|
391
|
+
<div class="mt-2 flex justify-between mono text-xs text-gray-600">
|
|
392
|
+
<span>Jan</span><span>Feb</span><span>Mar</span><span>Apr</span><span>May</span><span>Jun</span>
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
</section>
|
|
398
|
+
|
|
399
|
+
<!-- Trust strip -->
|
|
400
|
+
<section class="py-16 bg-gray-900/40 border-y border-gray-800">
|
|
401
|
+
<div class="max-w-5xl mx-auto px-6">
|
|
402
|
+
<div class="grid md:grid-cols-4 gap-8 text-center">
|
|
403
|
+
<div>
|
|
404
|
+
<p class="mono text-3xl font-bold text-green-400 mb-1">PCI L1</p>
|
|
405
|
+
<p class="text-xs text-gray-500">Highest card data security standard</p>
|
|
406
|
+
</div>
|
|
407
|
+
<div>
|
|
408
|
+
<p class="mono text-3xl font-bold text-green-400 mb-1">SOC 2</p>
|
|
409
|
+
<p class="text-xs text-gray-500">Type II audited annually</p>
|
|
410
|
+
</div>
|
|
411
|
+
<div>
|
|
412
|
+
<p class="mono text-3xl font-bold text-green-400 mb-1">ISO</p>
|
|
413
|
+
<p class="text-xs text-gray-500">27001 certified</p>
|
|
414
|
+
</div>
|
|
415
|
+
<div>
|
|
416
|
+
<p class="mono text-3xl font-bold text-green-400 mb-1">GDPR</p>
|
|
417
|
+
<p class="text-xs text-gray-500">Data processor agreements available</p>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
</div>
|
|
421
|
+
</section>
|
|
422
|
+
|
|
423
|
+
<!-- Pricing teaser -->
|
|
424
|
+
<section class="py-24">
|
|
425
|
+
<div class="max-w-4xl mx-auto px-6 text-center">
|
|
426
|
+
<p class="mono text-green-400 text-sm mb-3">// pricing</p>
|
|
427
|
+
<h2 class="text-4xl font-extrabold text-white mb-4">Simple, volume-based pricing.</h2>
|
|
428
|
+
<p class="text-gray-400 mb-12">No setup fees. No monthly minimums. Interchange-plus pricing available at scale.</p>
|
|
429
|
+
<div class="grid md:grid-cols-2 gap-6 text-left">
|
|
430
|
+
<div class="bg-gray-900 border border-gray-800 rounded-xl p-8">
|
|
431
|
+
<p class="mono text-sm text-gray-500 mb-2">Standard</p>
|
|
432
|
+
<p class="mono text-4xl font-bold text-white mb-1">2.5% <span class="text-lg text-gray-400">+ 30¢</span></p>
|
|
433
|
+
<p class="text-sm text-gray-500 mb-6">per successful card charge</p>
|
|
434
|
+
<ul class="space-y-2 text-sm text-gray-400">
|
|
435
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> All payment methods</li>
|
|
436
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> Subscription billing</li>
|
|
437
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> Fraud protection</li>
|
|
438
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> Finance dashboard</li>
|
|
439
|
+
</ul>
|
|
440
|
+
<a href="#" class="mono block text-center text-sm font-bold mt-6 border border-green-500/50 text-green-400 hover:bg-green-500/10 px-6 py-3 rounded transition-colors">Get started free</a>
|
|
441
|
+
</div>
|
|
442
|
+
<div class="bg-gray-900 border border-green-500/30 rounded-xl p-8 relative overflow-hidden">
|
|
443
|
+
<div class="absolute top-0 right-0 mono text-xs bg-green-500 text-gray-950 font-bold px-3 py-1 rounded-bl">Enterprise</div>
|
|
444
|
+
<p class="mono text-sm text-gray-500 mb-2">Custom volume</p>
|
|
445
|
+
<p class="mono text-4xl font-bold text-white mb-1">Talk to us</p>
|
|
446
|
+
<p class="text-sm text-gray-500 mb-6">for >$1M/mo volume</p>
|
|
447
|
+
<ul class="space-y-2 text-sm text-gray-400">
|
|
448
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> Interchange-plus pricing</li>
|
|
449
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> Dedicated support engineer</li>
|
|
450
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> Custom SLAs and MSA</li>
|
|
451
|
+
<li class="flex gap-2"><span class="text-green-400">✓</span> On-premise data residency</li>
|
|
452
|
+
</ul>
|
|
453
|
+
<a href="#" class="mono block text-center text-sm font-bold mt-6 bg-green-500 hover:bg-green-400 text-gray-950 px-6 py-3 rounded transition-colors">Contact sales</a>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
</div>
|
|
457
|
+
</section>
|
|
458
|
+
|
|
459
|
+
<!-- CTA -->
|
|
460
|
+
<section class="py-24 grid-bg border-t border-gray-800">
|
|
461
|
+
<div class="max-w-3xl mx-auto px-6 text-center">
|
|
462
|
+
<div class="absolute inset-x-0 top-0 h-32 bg-gradient-to-b from-gray-950 to-transparent pointer-events-none"></div>
|
|
463
|
+
<p class="mono text-green-400 text-sm mb-4">// ready to ship?</p>
|
|
464
|
+
<h2 class="text-5xl font-extrabold text-white mb-6">Start moving money in minutes.</h2>
|
|
465
|
+
<p class="text-gray-400 text-lg mb-10">API keys in seconds. No onboarding call required. Full test environment from day one.</p>
|
|
466
|
+
<div class="flex flex-wrap gap-4 justify-center">
|
|
467
|
+
<a href="#" class="mono font-bold text-base bg-green-500 hover:bg-green-400 text-gray-950 px-8 py-4 rounded-lg transition-all hover:shadow-xl hover:shadow-green-500/20">
|
|
468
|
+
Start integrating
|
|
469
|
+
</a>
|
|
470
|
+
<a href="#" class="mono font-medium text-base border border-gray-700 hover:border-gray-500 text-gray-300 px-8 py-4 rounded-lg transition-colors">
|
|
471
|
+
View the docs →
|
|
472
|
+
</a>
|
|
473
|
+
</div>
|
|
474
|
+
<p class="mono text-xs text-gray-600 mt-8">npm install @tender/sdk · pip install tender · go get tender.dev/sdk</p>
|
|
475
|
+
</div>
|
|
476
|
+
</section>
|
|
477
|
+
|
|
478
|
+
<!-- Footer -->
|
|
479
|
+
<footer class="py-12 border-t border-gray-800">
|
|
480
|
+
<div class="max-w-7xl mx-auto px-6">
|
|
481
|
+
<div class="grid md:grid-cols-5 gap-8">
|
|
482
|
+
<div class="md:col-span-2">
|
|
483
|
+
<span class="mono text-green-400 font-bold text-lg">tender</span>
|
|
484
|
+
<p class="text-sm text-gray-500 mt-2 max-w-xs">Payments infrastructure for internet businesses. Global scale, developer-first design.</p>
|
|
485
|
+
<div class="flex gap-3 mt-4">
|
|
486
|
+
<a href="#" class="mono text-xs text-gray-600 hover:text-gray-400 border border-gray-800 px-3 py-1.5 rounded transition-colors">Status</a>
|
|
487
|
+
<a href="#" class="mono text-xs text-gray-600 hover:text-gray-400 border border-gray-800 px-3 py-1.5 rounded transition-colors">GitHub</a>
|
|
488
|
+
<a href="#" class="mono text-xs text-gray-600 hover:text-gray-400 border border-gray-800 px-3 py-1.5 rounded transition-colors">Twitter</a>
|
|
489
|
+
</div>
|
|
490
|
+
</div>
|
|
491
|
+
<div>
|
|
492
|
+
<p class="mono text-xs text-gray-600 mb-3 uppercase tracking-widest">Product</p>
|
|
493
|
+
<ul class="space-y-2 text-sm text-gray-400">
|
|
494
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Payments</a></li>
|
|
495
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Subscriptions</a></li>
|
|
496
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Payouts</a></li>
|
|
497
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Fraud</a></li>
|
|
498
|
+
</ul>
|
|
499
|
+
</div>
|
|
500
|
+
<div>
|
|
501
|
+
<p class="mono text-xs text-gray-600 mb-3 uppercase tracking-widest">Developers</p>
|
|
502
|
+
<ul class="space-y-2 text-sm text-gray-400">
|
|
503
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Documentation</a></li>
|
|
504
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">API Reference</a></li>
|
|
505
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">SDKs</a></li>
|
|
506
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Changelog</a></li>
|
|
507
|
+
</ul>
|
|
508
|
+
</div>
|
|
509
|
+
<div>
|
|
510
|
+
<p class="mono text-xs text-gray-600 mb-3 uppercase tracking-widest">Company</p>
|
|
511
|
+
<ul class="space-y-2 text-sm text-gray-400">
|
|
512
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">About</a></li>
|
|
513
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Blog</a></li>
|
|
514
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Careers</a></li>
|
|
515
|
+
<li><a href="#" class="hover:text-gray-200 transition-colors">Security</a></li>
|
|
516
|
+
</ul>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
<div class="border-t border-gray-800 mt-10 pt-6 flex flex-col md:flex-row justify-between gap-3 text-xs text-gray-600 mono">
|
|
520
|
+
<span>© 2025 Tender Payments Inc. All rights reserved.</span>
|
|
521
|
+
<div class="flex gap-6">
|
|
522
|
+
<a href="#" class="hover:text-gray-400">Privacy</a>
|
|
523
|
+
<a href="#" class="hover:text-gray-400">Terms</a>
|
|
524
|
+
<a href="#" class="hover:text-gray-400">PCI Compliance</a>
|
|
525
|
+
</div>
|
|
526
|
+
</div>
|
|
527
|
+
</div>
|
|
528
|
+
</footer>
|
|
529
|
+
|
|
530
|
+
</body>
|
|
531
|
+
</html>
|