forgedock 1.0.16 → 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 +54 -3
- package/bin/cross-publish.mjs +344 -0
- package/bin/forgedock.mjs +2205 -541
- package/bin/github-app-manifest.json.license +2 -0
- package/bin/hooks/session-start.mjs +4 -5
- package/bin/registry.mjs +20 -0
- package/bin/tui.mjs +172 -96
- package/commands/adopt.md +433 -0
- package/commands/analytics.md +2 -0
- package/commands/audit-agents.md +2 -0
- package/commands/audit.md +2 -0
- package/commands/autopilot.md +77 -0
- package/commands/changelog.md +354 -0
- package/commands/cleanup.md +2 -0
- package/commands/compat-audit.md +330 -0
- package/commands/deploy-info.md +6 -5
- package/commands/design-bench.md +176 -0
- package/commands/design-render-critique-loop.md +103 -0
- package/commands/design.md +259 -0
- package/commands/diagnose.md +483 -0
- package/commands/explain.md +349 -0
- package/commands/forge-stats.md +2 -0
- package/commands/forgedock-init.md +2 -0
- package/commands/geo-audit.md +2 -0
- package/commands/incident-response.md +2 -0
- package/commands/issue.md +9 -3
- package/commands/milestone.md +2 -0
- package/commands/optimize.md +411 -0
- package/commands/orchestrate.md +239 -0
- package/commands/pipeline-health.md +60 -1
- package/commands/qa-sweep.md +39 -2
- package/commands/quality-gate.md +67 -0
- package/commands/replay.md +263 -0
- package/commands/resume.md +264 -0
- package/commands/review-pr-agents.md +5 -1
- package/commands/review-pr-staging.md +160 -2
- package/commands/review-pr.md +85 -3
- package/commands/rollback.md +2 -0
- package/commands/scope.md +280 -0
- package/commands/security-audit.md +2 -0
- package/commands/status.md +262 -0
- package/commands/sync-ecosystem.md +2 -0
- package/commands/test-gate.md +929 -0
- package/commands/validate.md +2 -0
- package/commands/work-on/build/architect.md +128 -18
- package/commands/work-on/build/context.md +130 -17
- package/commands/work-on/build/implement.md +7 -3
- package/commands/work-on/build/validate.md +2 -0
- package/commands/work-on/build.md +32 -7
- package/commands/work-on/close.md +85 -0
- package/commands/work-on/decompose.md +2 -0
- package/commands/work-on/investigate.md +30 -3
- package/commands/work-on/review.md +13 -1
- package/commands/work-on-monolithic.md +2 -0
- package/commands/work-on.md +676 -38
- package/docs/BRAND.md +51 -0
- package/docs/CI.md +177 -0
- package/docs/CONFIG.md +94 -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/per-repo-adaptive-scripts-token-savings.md +174 -0
- package/docs/articles/selective-spec-loading-token-savings.md +140 -0
- package/docs/claude-breakpoints.json +47 -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/site/getting-started.md +21 -0
- package/docs/spec-graph-schema.md +397 -0
- package/package.json +3 -3
- package/scripts/bench-scorecard.mjs +239 -0
- package/scripts/build-spec-graph.mjs +509 -0
- package/scripts/classify-lane.sh +138 -0
- package/scripts/design-system-lint.mjs +993 -0
- package/scripts/graph-query.sh +486 -0
- package/scripts/transition-label.sh +169 -0
- package/scripts/validate-pr-target.sh +30 -0
- package/scripts/validate-spec-graph.sh +423 -0
- package/templates/devdocs/README.md +72 -0
- package/templates/devdocs/agent/using-forgedock.md +3 -0
- package/templates/devdocs/agent/using-github.md +3 -0
- package/templates/devdocs/index.yaml +162 -0
- package/templates/devdocs/project/architecture.md +3 -0
- package/templates/devdocs/project/conventions.md +3 -0
- package/templates/devdocs/project/custom-instructions.md +3 -0
- package/templates/devdocs/project/glossary.md +3 -0
- package/templates/devdocs/project/stack.md +3 -0
- package/templates/devdocs/templates/commit-convention.md +3 -0
- package/templates/devdocs/templates/issue.md +3 -0
- package/templates/devdocs/templates/pull-request.md +3 -0
- package/templates/devdocs/templates/review-finding.md +3 -0
- package/templates/workflows/forgedock-review.yml +96 -0
|
@@ -0,0 +1,674 @@
|
|
|
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 API for Internet Businesses</title>
|
|
7
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
8
|
+
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
9
|
+
<style>
|
|
10
|
+
body { font-family: 'DM Sans', sans-serif; background: #fafaf8; color: #111; }
|
|
11
|
+
.mono { font-family: 'DM Mono', monospace; }
|
|
12
|
+
|
|
13
|
+
.hero-bg {
|
|
14
|
+
background:
|
|
15
|
+
radial-gradient(circle at 15% 50%, rgba(234, 88, 12, 0.06) 0%, transparent 50%),
|
|
16
|
+
radial-gradient(circle at 85% 20%, rgba(234, 88, 12, 0.04) 0%, transparent 45%),
|
|
17
|
+
#fafaf8;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.section-alt { background: #111; color: #f5f5f0; }
|
|
21
|
+
|
|
22
|
+
.orange { color: #ea580c; }
|
|
23
|
+
.orange-bg { background: #ea580c; }
|
|
24
|
+
.orange-light { background: #fff4ee; }
|
|
25
|
+
|
|
26
|
+
.tab-active {
|
|
27
|
+
background: #111;
|
|
28
|
+
color: #fafaf8;
|
|
29
|
+
}
|
|
30
|
+
.tab-inactive {
|
|
31
|
+
background: transparent;
|
|
32
|
+
color: #666;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.stripe-border {
|
|
36
|
+
border: 1.5px solid #e5e5e0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.code-window {
|
|
40
|
+
background: #0d0d0d;
|
|
41
|
+
border: 1.5px solid #2a2a2a;
|
|
42
|
+
border-radius: 12px;
|
|
43
|
+
overflow: hidden;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.metric-card {
|
|
47
|
+
background: white;
|
|
48
|
+
border: 1.5px solid #e5e5e0;
|
|
49
|
+
border-radius: 12px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.feature-row:not(:last-child) {
|
|
53
|
+
border-bottom: 1.5px solid #e5e5e0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.cta-section {
|
|
57
|
+
background: linear-gradient(135deg, #111 0%, #1c1c1c 100%);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.logo-mark {
|
|
61
|
+
width: 32px;
|
|
62
|
+
height: 32px;
|
|
63
|
+
background: #ea580c;
|
|
64
|
+
border-radius: 8px;
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: center;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.tag {
|
|
71
|
+
display: inline-block;
|
|
72
|
+
background: #fff4ee;
|
|
73
|
+
color: #ea580c;
|
|
74
|
+
border: 1px solid rgba(234,88,12,0.2);
|
|
75
|
+
border-radius: 100px;
|
|
76
|
+
font-size: 11px;
|
|
77
|
+
font-weight: 500;
|
|
78
|
+
padding: 3px 10px;
|
|
79
|
+
font-family: 'DM Mono', monospace;
|
|
80
|
+
letter-spacing: 0.02em;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.btn-primary {
|
|
84
|
+
background: #ea580c;
|
|
85
|
+
color: white;
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
border-radius: 8px;
|
|
88
|
+
padding: 12px 24px;
|
|
89
|
+
display: inline-block;
|
|
90
|
+
transition: background 0.15s, transform 0.1s, box-shadow 0.15s;
|
|
91
|
+
font-size: 14px;
|
|
92
|
+
}
|
|
93
|
+
.btn-primary:hover {
|
|
94
|
+
background: #c2410c;
|
|
95
|
+
box-shadow: 0 8px 24px rgba(234,88,12,0.25);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.btn-outline {
|
|
99
|
+
border: 1.5px solid #d1d1cc;
|
|
100
|
+
color: #333;
|
|
101
|
+
font-weight: 500;
|
|
102
|
+
border-radius: 8px;
|
|
103
|
+
padding: 12px 24px;
|
|
104
|
+
display: inline-block;
|
|
105
|
+
transition: border-color 0.15s, color 0.15s;
|
|
106
|
+
font-size: 14px;
|
|
107
|
+
}
|
|
108
|
+
.btn-outline:hover {
|
|
109
|
+
border-color: #999;
|
|
110
|
+
color: #111;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.number-label {
|
|
114
|
+
font-size: 11px;
|
|
115
|
+
font-weight: 600;
|
|
116
|
+
text-transform: uppercase;
|
|
117
|
+
letter-spacing: 0.1em;
|
|
118
|
+
color: #999;
|
|
119
|
+
}
|
|
120
|
+
</style>
|
|
121
|
+
</head>
|
|
122
|
+
<body>
|
|
123
|
+
|
|
124
|
+
<!-- Nav -->
|
|
125
|
+
<nav class="sticky top-0 z-50 bg-white/90 backdrop-blur border-b border-gray-100">
|
|
126
|
+
<div class="max-w-6xl mx-auto px-6 h-16 flex items-center justify-between">
|
|
127
|
+
<div class="flex items-center gap-8">
|
|
128
|
+
<a href="#" class="flex items-center gap-2.5">
|
|
129
|
+
<div class="logo-mark">
|
|
130
|
+
<svg class="w-4 h-4 text-white" fill="currentColor" viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>
|
|
131
|
+
</div>
|
|
132
|
+
<span class="font-semibold text-lg text-gray-900">Tender</span>
|
|
133
|
+
</a>
|
|
134
|
+
<div class="hidden md:flex gap-7 text-sm text-gray-500">
|
|
135
|
+
<a href="#" class="hover:text-gray-900 transition-colors">Products</a>
|
|
136
|
+
<a href="#" class="hover:text-gray-900 transition-colors">Developers</a>
|
|
137
|
+
<a href="#" class="hover:text-gray-900 transition-colors">Pricing</a>
|
|
138
|
+
<a href="#" class="hover:text-gray-900 transition-colors">Enterprise</a>
|
|
139
|
+
<a href="#" class="hover:text-gray-900 transition-colors">Blog</a>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
<div class="flex items-center gap-3">
|
|
143
|
+
<a href="#" class="text-sm text-gray-500 hover:text-gray-900 font-medium">Sign in</a>
|
|
144
|
+
<a href="#" class="btn-primary text-sm">Start integrating</a>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
</nav>
|
|
148
|
+
|
|
149
|
+
<!-- Hero -->
|
|
150
|
+
<section class="hero-bg pt-24 pb-20">
|
|
151
|
+
<div class="max-w-6xl mx-auto px-6">
|
|
152
|
+
<div class="max-w-3xl">
|
|
153
|
+
<div class="flex items-center gap-3 mb-7">
|
|
154
|
+
<span class="tag">New: Instant Payouts in 47 countries</span>
|
|
155
|
+
<span class="text-xs text-gray-400">→ Read the announcement</span>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<h1 class="text-6xl font-bold leading-tight tracking-tight text-gray-900 mb-6">
|
|
159
|
+
The payments API for<br />
|
|
160
|
+
companies that move<br />
|
|
161
|
+
<span class="orange">serious money.</span>
|
|
162
|
+
</h1>
|
|
163
|
+
|
|
164
|
+
<p class="text-xl text-gray-500 leading-relaxed mb-10 max-w-2xl font-normal">
|
|
165
|
+
Accept cards and local payment methods globally. Run subscription billing with proration and invoicing. Pay out to sellers in any currency. Fraud screening and compliance come standard.
|
|
166
|
+
</p>
|
|
167
|
+
|
|
168
|
+
<div class="flex flex-wrap items-center gap-4 mb-16">
|
|
169
|
+
<a href="#" class="btn-primary">Start integrating</a>
|
|
170
|
+
<a href="#" class="btn-outline">View the docs →</a>
|
|
171
|
+
<span class="text-sm text-gray-400 mono">npm install @tender/sdk</span>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
<!-- Inline stats -->
|
|
175
|
+
<div class="flex flex-wrap gap-10">
|
|
176
|
+
<div>
|
|
177
|
+
<p class="text-3xl font-bold text-gray-900">$94B+</p>
|
|
178
|
+
<p class="number-label mt-1">Processed annually</p>
|
|
179
|
+
</div>
|
|
180
|
+
<div class="w-px bg-gray-200 self-stretch"></div>
|
|
181
|
+
<div>
|
|
182
|
+
<p class="text-3xl font-bold text-gray-900">135+</p>
|
|
183
|
+
<p class="number-label mt-1">Currencies</p>
|
|
184
|
+
</div>
|
|
185
|
+
<div class="w-px bg-gray-200 self-stretch"></div>
|
|
186
|
+
<div>
|
|
187
|
+
<p class="text-3xl font-bold text-gray-900">80+</p>
|
|
188
|
+
<p class="number-label mt-1">Payment methods</p>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="w-px bg-gray-200 self-stretch"></div>
|
|
191
|
+
<div>
|
|
192
|
+
<p class="text-3xl font-bold text-gray-900">99.99%</p>
|
|
193
|
+
<p class="number-label mt-1">Uptime SLA</p>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
</section>
|
|
199
|
+
|
|
200
|
+
<!-- Trusted by -->
|
|
201
|
+
<section class="border-t border-b border-gray-100 py-10 bg-white">
|
|
202
|
+
<div class="max-w-6xl mx-auto px-6 flex flex-col md:flex-row items-center gap-8">
|
|
203
|
+
<p class="number-label shrink-0">Trusted by</p>
|
|
204
|
+
<div class="flex flex-wrap items-center gap-10">
|
|
205
|
+
<span class="font-semibold text-gray-300 text-lg">Lineage</span>
|
|
206
|
+
<span class="font-semibold text-gray-300 text-lg">Circlemore</span>
|
|
207
|
+
<span class="font-semibold text-gray-300 text-lg">VaultPay</span>
|
|
208
|
+
<span class="font-semibold text-gray-300 text-lg">Meridian</span>
|
|
209
|
+
<span class="font-semibold text-gray-300 text-lg">Corusant</span>
|
|
210
|
+
<span class="font-semibold text-gray-300 text-lg">Axial</span>
|
|
211
|
+
<span class="font-semibold text-gray-300 text-lg">Fundflow</span>
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
</section>
|
|
215
|
+
|
|
216
|
+
<!-- Code section -->
|
|
217
|
+
<section class="py-24 bg-white">
|
|
218
|
+
<div class="max-w-6xl mx-auto px-6">
|
|
219
|
+
<div class="grid lg:grid-cols-2 gap-16 items-start">
|
|
220
|
+
<div class="pt-4">
|
|
221
|
+
<span class="tag">Developer-first</span>
|
|
222
|
+
<h2 class="text-4xl font-bold text-gray-900 mt-4 mb-5">Built for the engineer who's done it wrong before.</h2>
|
|
223
|
+
<p class="text-gray-500 text-lg leading-relaxed mb-8">Predictable REST. Consistent error shapes. Typed SDKs. Webhook signatures. Idempotency keys. A test mode that actually simulates real failures. We sweat the API design so your integration stays clean as you scale.</p>
|
|
224
|
+
|
|
225
|
+
<ul class="space-y-3">
|
|
226
|
+
<li class="flex gap-3 text-sm text-gray-600">
|
|
227
|
+
<span class="orange font-bold mt-0.5">→</span>
|
|
228
|
+
<div><strong class="text-gray-900">Versioned API</strong> — breaking changes announced 6+ months early, migration guides included</div>
|
|
229
|
+
</li>
|
|
230
|
+
<li class="flex gap-3 text-sm text-gray-600">
|
|
231
|
+
<span class="orange font-bold mt-0.5">→</span>
|
|
232
|
+
<div><strong class="text-gray-900">SDKs in 8 languages</strong> — Node, Python, Go, Ruby, Java, .NET, PHP, with TypeScript types</div>
|
|
233
|
+
</li>
|
|
234
|
+
<li class="flex gap-3 text-sm text-gray-600">
|
|
235
|
+
<span class="orange font-bold mt-0.5">→</span>
|
|
236
|
+
<div><strong class="text-gray-900">OpenAPI spec</strong> — generate your own client, import into Postman or Insomnia</div>
|
|
237
|
+
</li>
|
|
238
|
+
<li class="flex gap-3 text-sm text-gray-600">
|
|
239
|
+
<span class="orange font-bold mt-0.5">→</span>
|
|
240
|
+
<div><strong class="text-gray-900">Webhook replay</strong> — replay any event from the dashboard or CLI for debugging</div>
|
|
241
|
+
</li>
|
|
242
|
+
<li class="flex gap-3 text-sm text-gray-600">
|
|
243
|
+
<span class="orange font-bold mt-0.5">→</span>
|
|
244
|
+
<div><strong class="text-gray-900">Test mode parity</strong> — every production feature works in test, with realistic latency simulation</div>
|
|
245
|
+
</li>
|
|
246
|
+
</ul>
|
|
247
|
+
|
|
248
|
+
<div class="flex gap-3 mt-8">
|
|
249
|
+
<a href="#" class="btn-primary">View the docs</a>
|
|
250
|
+
<a href="#" class="btn-outline">API Reference</a>
|
|
251
|
+
</div>
|
|
252
|
+
</div>
|
|
253
|
+
|
|
254
|
+
<!-- Code window -->
|
|
255
|
+
<div>
|
|
256
|
+
<!-- Tab bar -->
|
|
257
|
+
<div class="flex gap-1 mb-3">
|
|
258
|
+
<button class="mono text-xs px-4 py-2 rounded-md tab-active">Accept payment</button>
|
|
259
|
+
<button class="mono text-xs px-4 py-2 rounded-md tab-inactive">Create subscription</button>
|
|
260
|
+
<button class="mono text-xs px-4 py-2 rounded-md tab-inactive">Pay out</button>
|
|
261
|
+
</div>
|
|
262
|
+
|
|
263
|
+
<div class="code-window">
|
|
264
|
+
<!-- Window chrome -->
|
|
265
|
+
<div class="flex items-center gap-2 px-4 py-3 border-b border-gray-800">
|
|
266
|
+
<div class="w-3 h-3 rounded-full bg-red-500/60"></div>
|
|
267
|
+
<div class="w-3 h-3 rounded-full bg-yellow-500/60"></div>
|
|
268
|
+
<div class="w-3 h-3 rounded-full bg-green-500/60"></div>
|
|
269
|
+
<span class="mono text-xs text-gray-600 ml-2">checkout.js</span>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="p-6 mono text-sm leading-7 overflow-x-auto">
|
|
272
|
+
<div class="text-gray-500">// 1. Initialize client</div>
|
|
273
|
+
<div class="text-blue-400">import <span class="text-white">Tender</span> from <span class="text-orange-300">'@tender/sdk'</span>;</div>
|
|
274
|
+
<div class="mt-1 text-purple-400">const <span class="text-white">t</span> = <span class="text-blue-300">new</span> <span class="text-yellow-300">Tender</span>(<span class="text-white">process</span>.env.<span class="text-orange-300">TENDER_KEY</span>);</div>
|
|
275
|
+
<div class="mt-4 text-gray-500">// 2. Create payment intent in your backend</div>
|
|
276
|
+
<div class="text-purple-400">const <span class="text-white">intent</span> = <span class="text-blue-400">await</span> t.payments.<span class="text-yellow-300">create</span>({</div>
|
|
277
|
+
<div class="pl-5 text-orange-300">amount: <span class="text-white">9900</span>,</div>
|
|
278
|
+
<div class="pl-5 text-orange-300">currency: <span class="text-green-300">'gbp'</span>,</div>
|
|
279
|
+
<div class="pl-5 text-orange-300">payment_method_types: <span class="text-white">[</span></div>
|
|
280
|
+
<div class="pl-10 text-green-300">'card'<span class="text-white">,</span> <span class="text-green-300">'bacs_debit'</span></div>
|
|
281
|
+
<div class="pl-5 text-white">],</div>
|
|
282
|
+
<div class="pl-5 text-orange-300">idempotency_key: <span class="text-green-300">'ord_7Mx93a'</span></div>
|
|
283
|
+
<div class="text-white">});</div>
|
|
284
|
+
<div class="mt-4 text-gray-500">// 3. Pass client_secret to frontend</div>
|
|
285
|
+
<div class="text-blue-400">return <span class="text-white">res</span>.<span class="text-yellow-300">json</span>({ client_secret: intent.client_secret });</div>
|
|
286
|
+
<div class="mt-4 text-gray-600">// → Tender handles 3DS2, fraud, and settlement</div>
|
|
287
|
+
</div>
|
|
288
|
+
<!-- Response -->
|
|
289
|
+
<div class="border-t border-gray-800 px-5 py-3 flex items-center justify-between">
|
|
290
|
+
<div class="flex items-center gap-2">
|
|
291
|
+
<div class="w-2 h-2 bg-green-400 rounded-full"></div>
|
|
292
|
+
<span class="mono text-xs text-green-400">200 OK · 89ms</span>
|
|
293
|
+
</div>
|
|
294
|
+
<div class="flex gap-4 mono text-xs text-gray-600">
|
|
295
|
+
<span>fraud: 3/100</span>
|
|
296
|
+
<span>GBP</span>
|
|
297
|
+
<span>3DS2: exempted</span>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
|
|
302
|
+
<!-- Additional snippet: subscription -->
|
|
303
|
+
<div class="code-window mt-4">
|
|
304
|
+
<div class="flex items-center gap-2 px-4 py-3 border-b border-gray-800">
|
|
305
|
+
<div class="w-3 h-3 rounded-full bg-red-500/60"></div>
|
|
306
|
+
<div class="w-3 h-3 rounded-full bg-yellow-500/60"></div>
|
|
307
|
+
<div class="w-3 h-3 rounded-full bg-green-500/60"></div>
|
|
308
|
+
<span class="mono text-xs text-gray-600 ml-2">billing.py</span>
|
|
309
|
+
</div>
|
|
310
|
+
<div class="p-6 mono text-sm leading-7 overflow-x-auto">
|
|
311
|
+
<div class="text-blue-400">sub = client.subscriptions.<span class="text-yellow-300">create</span>(</div>
|
|
312
|
+
<div class="pl-5 text-orange-300">customer=<span class="text-green-300">"cus_Kp3ma2"</span><span class="text-white">,</span></div>
|
|
313
|
+
<div class="pl-5 text-orange-300">items=[{<span class="text-green-300">"price"</span>: <span class="text-green-300">"price_pro_monthly"</span><span class="text-white">,</span> <span class="text-green-300">"quantity"</span>: <span class="text-white">12</span>}]<span class="text-white">,</span></div>
|
|
314
|
+
<div class="pl-5 text-orange-300">proration_behavior=<span class="text-green-300">"create_prorations"</span><span class="text-white">,</span></div>
|
|
315
|
+
<div class="pl-5 text-orange-300">trial_period_days=<span class="text-white">14</span></div>
|
|
316
|
+
<div class="text-white">)</div>
|
|
317
|
+
<div class="mt-2 text-gray-600"># Invoices auto-generated · smart retries · webhooks fired</div>
|
|
318
|
+
</div>
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
</section>
|
|
324
|
+
|
|
325
|
+
<!-- Features table-style section -->
|
|
326
|
+
<section class="py-24 bg-gray-50 border-t border-gray-100">
|
|
327
|
+
<div class="max-w-6xl mx-auto px-6">
|
|
328
|
+
<div class="mb-14">
|
|
329
|
+
<span class="tag">Capabilities</span>
|
|
330
|
+
<h2 class="text-4xl font-bold text-gray-900 mt-4 mb-3">Everything the money stack needs.</h2>
|
|
331
|
+
<p class="text-gray-500 max-w-xl">One platform, one contract, one invoice. Tender replaces a patchwork of acquirers, fraud tools, billing engines, and payout networks.</p>
|
|
332
|
+
</div>
|
|
333
|
+
|
|
334
|
+
<div class="stripe-border rounded-2xl bg-white overflow-hidden">
|
|
335
|
+
<!-- Row 1 -->
|
|
336
|
+
<div class="feature-row p-8 grid md:grid-cols-3 gap-8">
|
|
337
|
+
<div class="md:col-span-1">
|
|
338
|
+
<div class="flex items-center gap-3 mb-2">
|
|
339
|
+
<div class="w-8 h-8 rounded-lg orange-light flex items-center justify-center">
|
|
340
|
+
<svg class="w-4 h-4 orange" 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>
|
|
341
|
+
</div>
|
|
342
|
+
<h3 class="font-semibold text-gray-900">Global Acceptance</h3>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
<div class="md:col-span-2 text-sm text-gray-500 leading-relaxed">
|
|
346
|
+
Accept cards (Visa, Mastercard, Amex, UnionPay), digital wallets (Apple Pay, Google Pay), and 80+ local methods including SEPA Direct Debit, ACH, PIX, UPI, Boleto, and iDEAL. Intelligent routing across multiple acquirers maximizes authorization rates by market. Dynamic currency conversion lets customers pay in their local currency while you settle in yours.
|
|
347
|
+
<div class="flex flex-wrap gap-2 mt-3">
|
|
348
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">135 currencies</span>
|
|
349
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">47 countries</span>
|
|
350
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">smart routing</span>
|
|
351
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">DCC</span>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
<!-- Row 2 -->
|
|
357
|
+
<div class="feature-row p-8 grid md:grid-cols-3 gap-8">
|
|
358
|
+
<div class="md:col-span-1">
|
|
359
|
+
<div class="flex items-center gap-3 mb-2">
|
|
360
|
+
<div class="w-8 h-8 rounded-lg orange-light flex items-center justify-center">
|
|
361
|
+
<svg class="w-4 h-4 orange" 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>
|
|
362
|
+
</div>
|
|
363
|
+
<h3 class="font-semibold text-gray-900">Subscription Billing</h3>
|
|
364
|
+
</div>
|
|
365
|
+
</div>
|
|
366
|
+
<div class="md:col-span-2 text-sm text-gray-500 leading-relaxed">
|
|
367
|
+
Model any pricing structure: flat-rate, per-seat, usage-based, or tiered. Proration is automatic on upgrades and downgrades. Trial periods, coupons, and discounts work out of the box. Dunning retries follow customizable schedules. PDF invoices are generated, hosted, and emailed on your behalf. Integrates with revenue recognition workflows for ASC 606 compliance.
|
|
368
|
+
<div class="flex flex-wrap gap-2 mt-3">
|
|
369
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">metered</span>
|
|
370
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">seat-based</span>
|
|
371
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">proration</span>
|
|
372
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">smart retries</span>
|
|
373
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">invoices</span>
|
|
374
|
+
</div>
|
|
375
|
+
</div>
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<!-- Row 3 -->
|
|
379
|
+
<div class="feature-row p-8 grid md:grid-cols-3 gap-8">
|
|
380
|
+
<div class="md:col-span-1">
|
|
381
|
+
<div class="flex items-center gap-3 mb-2">
|
|
382
|
+
<div class="w-8 h-8 rounded-lg orange-light flex items-center justify-center">
|
|
383
|
+
<svg class="w-4 h-4 orange" 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>
|
|
384
|
+
</div>
|
|
385
|
+
<h3 class="font-semibold text-gray-900">Marketplace Payouts</h3>
|
|
386
|
+
</div>
|
|
387
|
+
</div>
|
|
388
|
+
<div class="md:col-span-2 text-sm text-gray-500 leading-relaxed">
|
|
389
|
+
Split payments between your platform and connected accounts at charge time. Hold funds in escrow with configurable release conditions. Onboard sellers and contractors through a KYC API — no manual process required. Pay out in 47 countries in local currency on instant, daily, weekly, or custom schedules. Batch payouts for platforms handling thousands of recipients.
|
|
390
|
+
<div class="flex flex-wrap gap-2 mt-3">
|
|
391
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">split payments</span>
|
|
392
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">KYC API</span>
|
|
393
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">escrow</span>
|
|
394
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">instant payouts</span>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<!-- Row 4 -->
|
|
400
|
+
<div class="feature-row p-8 grid md:grid-cols-3 gap-8">
|
|
401
|
+
<div class="md:col-span-1">
|
|
402
|
+
<div class="flex items-center gap-3 mb-2">
|
|
403
|
+
<div class="w-8 h-8 rounded-lg orange-light flex items-center justify-center">
|
|
404
|
+
<svg class="w-4 h-4 orange" 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>
|
|
405
|
+
</div>
|
|
406
|
+
<h3 class="font-semibold text-gray-900">Fraud & Risk</h3>
|
|
407
|
+
</div>
|
|
408
|
+
</div>
|
|
409
|
+
<div class="md:col-span-2 text-sm text-gray-500 leading-relaxed">
|
|
410
|
+
Every transaction is scored by an ML model trained on billions of data points across the Tender network. Risk signals include device fingerprint, velocity, behavioral patterns, IP geolocation, and historical merchant data. 3DS2 is applied adaptively — triggered only when risk warrants it, so you don't friction away legitimate customers. Custom rules and block lists can be configured via dashboard or API.
|
|
411
|
+
<div class="flex flex-wrap gap-2 mt-3">
|
|
412
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">ML scoring</span>
|
|
413
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">3DS2 adaptive</span>
|
|
414
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">sub-100ms</span>
|
|
415
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">custom rules</span>
|
|
416
|
+
</div>
|
|
417
|
+
</div>
|
|
418
|
+
</div>
|
|
419
|
+
|
|
420
|
+
<!-- Row 5 -->
|
|
421
|
+
<div class="p-8 grid md:grid-cols-3 gap-8">
|
|
422
|
+
<div class="md:col-span-1">
|
|
423
|
+
<div class="flex items-center gap-3 mb-2">
|
|
424
|
+
<div class="w-8 h-8 rounded-lg orange-light flex items-center justify-center">
|
|
425
|
+
<svg class="w-4 h-4 orange" 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>
|
|
426
|
+
</div>
|
|
427
|
+
<h3 class="font-semibold text-gray-900">Finance Dashboard</h3>
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
<div class="md:col-span-2 text-sm text-gray-500 leading-relaxed">
|
|
431
|
+
A dashboard built for finance and operations teams, not just engineers. Track MRR, ARR, churn, outstanding invoices, dispute status, and payout schedules in real time. Segment revenue by plan, cohort, or geography. Automated dispute response workflows and evidence submission. Tax liability breakdowns by jurisdiction. Export to CSV, QuickBooks, NetSuite, or Xero. Role-based access keeps API keys away from non-technical team members.
|
|
432
|
+
<div class="flex flex-wrap gap-2 mt-3">
|
|
433
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">MRR / ARR</span>
|
|
434
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">disputes</span>
|
|
435
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">tax reports</span>
|
|
436
|
+
<span class="mono text-xs px-2 py-1 bg-orange-50 text-orange-600 rounded">QuickBooks sync</span>
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
</div>
|
|
440
|
+
</div>
|
|
441
|
+
</div>
|
|
442
|
+
</section>
|
|
443
|
+
|
|
444
|
+
<!-- Dark compliance section -->
|
|
445
|
+
<section class="section-alt py-24">
|
|
446
|
+
<div class="max-w-6xl mx-auto px-6">
|
|
447
|
+
<div class="grid lg:grid-cols-2 gap-20 items-center">
|
|
448
|
+
<div>
|
|
449
|
+
<span class="inline-block text-xs font-semibold text-orange-400 mono uppercase tracking-widest mb-5">Security & compliance</span>
|
|
450
|
+
<h2 class="text-4xl font-bold text-white mb-6">We carry the regulatory weight.</h2>
|
|
451
|
+
<p class="text-gray-400 text-lg leading-relaxed mb-10">PCI, GDPR, SOC 2, AML, KYC. These aren't boxes Tender checks — they're core architecture. When you build on Tender, cardholder data never touches your servers, and you inherit our compliance posture automatically.</p>
|
|
452
|
+
|
|
453
|
+
<div class="grid grid-cols-2 gap-4">
|
|
454
|
+
<div class="bg-white/5 border border-white/10 rounded-xl p-5">
|
|
455
|
+
<div class="text-orange-400 mono text-2xl font-bold mb-1">PCI L1</div>
|
|
456
|
+
<div class="text-white text-sm font-medium mb-1">Level 1 Certified</div>
|
|
457
|
+
<div class="text-gray-500 text-xs">Highest tier. Data never stored on your infrastructure.</div>
|
|
458
|
+
</div>
|
|
459
|
+
<div class="bg-white/5 border border-white/10 rounded-xl p-5">
|
|
460
|
+
<div class="text-orange-400 mono text-2xl font-bold mb-1">SOC 2</div>
|
|
461
|
+
<div class="text-white text-sm font-medium mb-1">Type II Audited</div>
|
|
462
|
+
<div class="text-gray-500 text-xs">Annual audit. Report available under NDA.</div>
|
|
463
|
+
</div>
|
|
464
|
+
<div class="bg-white/5 border border-white/10 rounded-xl p-5">
|
|
465
|
+
<div class="text-orange-400 mono text-2xl font-bold mb-1">ISO</div>
|
|
466
|
+
<div class="text-white text-sm font-medium mb-1">27001 Certified</div>
|
|
467
|
+
<div class="text-gray-500 text-xs">Data processor agreements for GDPR compliance.</div>
|
|
468
|
+
</div>
|
|
469
|
+
<div class="bg-white/5 border border-white/10 rounded-xl p-5">
|
|
470
|
+
<div class="text-orange-400 mono text-2xl font-bold mb-1">AML</div>
|
|
471
|
+
<div class="text-white text-sm font-medium mb-1">Compliant</div>
|
|
472
|
+
<div class="text-gray-500 text-xs">Licensed money transmitter in all operating jurisdictions.</div>
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
</div>
|
|
476
|
+
|
|
477
|
+
<div class="space-y-4">
|
|
478
|
+
<!-- Trust points -->
|
|
479
|
+
<div class="bg-white/5 border border-white/8 rounded-2xl p-6">
|
|
480
|
+
<h3 class="font-semibold text-white mb-2">Cardholder data isolation</h3>
|
|
481
|
+
<p class="text-gray-400 text-sm leading-relaxed">Tender.js captures card details directly in our hosted fields. PAN, CVV, and expiry never traverse your servers. Your PCI scope stays minimal.</p>
|
|
482
|
+
</div>
|
|
483
|
+
<div class="bg-white/5 border border-white/8 rounded-2xl p-6">
|
|
484
|
+
<h3 class="font-semibold text-white mb-2">Global licensing</h3>
|
|
485
|
+
<p class="text-gray-400 text-sm leading-relaxed">Tender holds money transmitter licenses, payment institution licenses in the EU, and acquiring licenses across our operating footprint. You don't need your own.</p>
|
|
486
|
+
</div>
|
|
487
|
+
<div class="bg-white/5 border border-white/8 rounded-2xl p-6">
|
|
488
|
+
<h3 class="font-semibold text-white mb-2">Tax handling</h3>
|
|
489
|
+
<p class="text-gray-400 text-sm leading-relaxed">US sales tax calculation and remittance, EU VAT management, and localized invoices. Tax liability reports available by jurisdiction, synced to your ERP.</p>
|
|
490
|
+
</div>
|
|
491
|
+
<div class="bg-white/5 border border-white/8 rounded-2xl p-6">
|
|
492
|
+
<h3 class="font-semibold text-white mb-2">99.99% SLA, globally</h3>
|
|
493
|
+
<p class="text-gray-400 text-sm leading-relaxed">Multi-region redundancy with automatic failover. Degraded-mode operation if a downstream acquirer fails. Status page updated in real time, with historical incident log.</p>
|
|
494
|
+
</div>
|
|
495
|
+
</div>
|
|
496
|
+
</div>
|
|
497
|
+
</div>
|
|
498
|
+
</section>
|
|
499
|
+
|
|
500
|
+
<!-- Testimonials - light -->
|
|
501
|
+
<section class="py-24 bg-white border-t border-gray-100">
|
|
502
|
+
<div class="max-w-6xl mx-auto px-6">
|
|
503
|
+
<div class="mb-14 text-center">
|
|
504
|
+
<h2 class="text-4xl font-bold text-gray-900 mb-3">What engineering and finance teams say.</h2>
|
|
505
|
+
<p class="text-gray-500 max-w-lg mx-auto">From first integration to $100M+ in volume — Tender scales with you.</p>
|
|
506
|
+
</div>
|
|
507
|
+
|
|
508
|
+
<div class="grid md:grid-cols-3 gap-6">
|
|
509
|
+
<div class="stripe-border rounded-2xl p-6">
|
|
510
|
+
<p class="text-gray-700 text-sm leading-relaxed mb-5">"We consolidated four payment vendors into Tender in a single sprint. The API is the most consistent I've used — everything just works the way you'd expect it to."</p>
|
|
511
|
+
<div class="border-t border-gray-100 pt-4 flex items-center gap-3">
|
|
512
|
+
<div class="w-9 h-9 rounded-full orange-bg flex items-center justify-center text-white text-xs font-bold">AK</div>
|
|
513
|
+
<div>
|
|
514
|
+
<p class="text-sm font-semibold text-gray-900">Arjun Kapoor</p>
|
|
515
|
+
<p class="text-xs text-gray-400">CTO · Lineage Finance</p>
|
|
516
|
+
</div>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
|
|
520
|
+
<div class="stripe-border rounded-2xl p-6">
|
|
521
|
+
<p class="text-gray-700 text-sm leading-relaxed mb-5">"Our finance team used to spend half a day pulling numbers from different systems. Now everything — revenue, disputes, payouts — is one dashboard. It's been quietly transformative."</p>
|
|
522
|
+
<div class="border-t border-gray-100 pt-4 flex items-center gap-3">
|
|
523
|
+
<div class="w-9 h-9 rounded-full bg-gray-900 flex items-center justify-center text-white text-xs font-bold">SM</div>
|
|
524
|
+
<div>
|
|
525
|
+
<p class="text-sm font-semibold text-gray-900">Sarah Mitchell</p>
|
|
526
|
+
<p class="text-xs text-gray-400">VP Finance · Circlemore</p>
|
|
527
|
+
</div>
|
|
528
|
+
</div>
|
|
529
|
+
</div>
|
|
530
|
+
|
|
531
|
+
<div class="stripe-border rounded-2xl p-6">
|
|
532
|
+
<p class="text-gray-700 text-sm leading-relaxed mb-5">"Tender's marketplace payout API is the only reason we could launch contractor payments in 14 countries inside 8 weeks. KYC, FX, everything — handled out of the box."</p>
|
|
533
|
+
<div class="border-t border-gray-100 pt-4 flex items-center gap-3">
|
|
534
|
+
<div class="w-9 h-9 rounded-full bg-indigo-600 flex items-center justify-center text-white text-xs font-bold">LR</div>
|
|
535
|
+
<div>
|
|
536
|
+
<p class="text-sm font-semibold text-gray-900">Luis Reyes</p>
|
|
537
|
+
<p class="text-xs text-gray-400">Engineering Lead · Meridian</p>
|
|
538
|
+
</div>
|
|
539
|
+
</div>
|
|
540
|
+
</div>
|
|
541
|
+
</div>
|
|
542
|
+
</div>
|
|
543
|
+
</section>
|
|
544
|
+
|
|
545
|
+
<!-- Pricing -->
|
|
546
|
+
<section class="py-24 bg-gray-50 border-t border-gray-100">
|
|
547
|
+
<div class="max-w-5xl mx-auto px-6">
|
|
548
|
+
<div class="text-center mb-14">
|
|
549
|
+
<span class="tag">Pricing</span>
|
|
550
|
+
<h2 class="text-4xl font-bold text-gray-900 mt-4 mb-3">No surprises. No minimums.</h2>
|
|
551
|
+
<p class="text-gray-500">Usage-based pricing from day one. Volume discounts and interchange-plus available as you scale.</p>
|
|
552
|
+
</div>
|
|
553
|
+
|
|
554
|
+
<div class="grid md:grid-cols-2 gap-6">
|
|
555
|
+
<div class="bg-white stripe-border rounded-2xl p-8">
|
|
556
|
+
<p class="number-label mb-3">Standard</p>
|
|
557
|
+
<div class="flex items-end gap-2 mb-2">
|
|
558
|
+
<span class="text-5xl font-bold text-gray-900">2.5%</span>
|
|
559
|
+
<span class="text-xl text-gray-400 mb-1">+ 30¢</span>
|
|
560
|
+
</div>
|
|
561
|
+
<p class="text-sm text-gray-400 mb-6">per successful card transaction</p>
|
|
562
|
+
<ul class="space-y-2.5 text-sm text-gray-600 mb-8">
|
|
563
|
+
<li class="flex gap-2.5"><span class="orange font-bold">✓</span> All payment methods included</li>
|
|
564
|
+
<li class="flex gap-2.5"><span class="orange font-bold">✓</span> Subscription billing and invoicing</li>
|
|
565
|
+
<li class="flex gap-2.5"><span class="orange font-bold">✓</span> Fraud detection and 3DS2</li>
|
|
566
|
+
<li class="flex gap-2.5"><span class="orange font-bold">✓</span> Finance dashboard for your whole team</li>
|
|
567
|
+
<li class="flex gap-2.5"><span class="orange font-bold">✓</span> Email and developer forum support</li>
|
|
568
|
+
</ul>
|
|
569
|
+
<a href="#" class="btn-outline block text-center">Get started free</a>
|
|
570
|
+
</div>
|
|
571
|
+
|
|
572
|
+
<div class="bg-gray-900 rounded-2xl p-8 relative overflow-hidden">
|
|
573
|
+
<div class="absolute top-0 right-0 text-xs font-semibold orange-bg text-white px-4 py-2 rounded-bl-xl">Enterprise</div>
|
|
574
|
+
<p class="number-label text-gray-500 mb-3">Volume pricing</p>
|
|
575
|
+
<div class="mb-2">
|
|
576
|
+
<span class="text-4xl font-bold text-white">Custom rates</span>
|
|
577
|
+
</div>
|
|
578
|
+
<p class="text-sm text-gray-500 mb-6">For $1M+ monthly volume</p>
|
|
579
|
+
<ul class="space-y-2.5 text-sm text-gray-400 mb-8">
|
|
580
|
+
<li class="flex gap-2.5"><span class="text-orange-400 font-bold">✓</span> Interchange-plus pricing</li>
|
|
581
|
+
<li class="flex gap-2.5"><span class="text-orange-400 font-bold">✓</span> Dedicated support engineer</li>
|
|
582
|
+
<li class="flex gap-2.5"><span class="text-orange-400 font-bold">✓</span> Custom SLAs and uptime guarantees</li>
|
|
583
|
+
<li class="flex gap-2.5"><span class="text-orange-400 font-bold">✓</span> On-premise data residency options</li>
|
|
584
|
+
<li class="flex gap-2.5"><span class="text-orange-400 font-bold">✓</span> Custom MSA and DPA</li>
|
|
585
|
+
</ul>
|
|
586
|
+
<a href="#" class="btn-primary block text-center">Talk to sales</a>
|
|
587
|
+
</div>
|
|
588
|
+
</div>
|
|
589
|
+
</div>
|
|
590
|
+
</section>
|
|
591
|
+
|
|
592
|
+
<!-- CTA -->
|
|
593
|
+
<section class="cta-section py-32">
|
|
594
|
+
<div class="max-w-4xl mx-auto px-6 text-center">
|
|
595
|
+
<h2 class="text-5xl font-bold text-white mb-6 tracking-tight">Start moving money today.</h2>
|
|
596
|
+
<p class="text-gray-400 text-xl mb-10 font-light">API keys in 30 seconds. Full test environment. Production in days, not months.</p>
|
|
597
|
+
<div class="flex flex-wrap justify-center gap-4">
|
|
598
|
+
<a href="#" class="btn-primary text-base px-10 py-5">Start integrating</a>
|
|
599
|
+
<a href="#" class="inline-block border border-gray-700 hover:border-gray-500 text-gray-300 hover:text-white font-medium px-10 py-5 rounded-xl text-base transition-all">View the docs →</a>
|
|
600
|
+
</div>
|
|
601
|
+
<div class="mt-10 flex flex-wrap justify-center gap-6 mono text-xs text-gray-600">
|
|
602
|
+
<span>npm install @tender/sdk</span>
|
|
603
|
+
<span>·</span>
|
|
604
|
+
<span>pip install tender</span>
|
|
605
|
+
<span>·</span>
|
|
606
|
+
<span>go get tender.dev/sdk</span>
|
|
607
|
+
<span>·</span>
|
|
608
|
+
<span>gem install tender</span>
|
|
609
|
+
</div>
|
|
610
|
+
</div>
|
|
611
|
+
</section>
|
|
612
|
+
|
|
613
|
+
<!-- Footer -->
|
|
614
|
+
<footer class="bg-gray-900 border-t border-white/5 py-14">
|
|
615
|
+
<div class="max-w-6xl mx-auto px-6">
|
|
616
|
+
<div class="grid md:grid-cols-5 gap-10 mb-10">
|
|
617
|
+
<div class="md:col-span-2">
|
|
618
|
+
<div class="flex items-center gap-2.5 mb-4">
|
|
619
|
+
<div class="logo-mark">
|
|
620
|
+
<svg class="w-4 h-4 text-white" fill="currentColor" viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5z"/></svg>
|
|
621
|
+
</div>
|
|
622
|
+
<span class="font-semibold text-white text-lg">Tender</span>
|
|
623
|
+
</div>
|
|
624
|
+
<p class="text-sm text-gray-500 max-w-xs leading-relaxed">Payments infrastructure for internet businesses. Global, reliable, developer-first.</p>
|
|
625
|
+
<div class="flex gap-2 mt-4">
|
|
626
|
+
<a href="#" class="mono text-xs px-3 py-1.5 border border-gray-800 text-gray-500 hover:text-gray-300 rounded transition-colors">Status</a>
|
|
627
|
+
<a href="#" class="mono text-xs px-3 py-1.5 border border-gray-800 text-gray-500 hover:text-gray-300 rounded transition-colors">GitHub</a>
|
|
628
|
+
</div>
|
|
629
|
+
</div>
|
|
630
|
+
<div>
|
|
631
|
+
<p class="number-label mb-4">Product</p>
|
|
632
|
+
<ul class="space-y-2.5 text-sm text-gray-400">
|
|
633
|
+
<li><a href="#" class="hover:text-white transition-colors">Payments</a></li>
|
|
634
|
+
<li><a href="#" class="hover:text-white transition-colors">Billing</a></li>
|
|
635
|
+
<li><a href="#" class="hover:text-white transition-colors">Payouts</a></li>
|
|
636
|
+
<li><a href="#" class="hover:text-white transition-colors">Fraud</a></li>
|
|
637
|
+
<li><a href="#" class="hover:text-white transition-colors">Dashboard</a></li>
|
|
638
|
+
</ul>
|
|
639
|
+
</div>
|
|
640
|
+
<div>
|
|
641
|
+
<p class="number-label mb-4">Developers</p>
|
|
642
|
+
<ul class="space-y-2.5 text-sm text-gray-400">
|
|
643
|
+
<li><a href="#" class="hover:text-white transition-colors">Documentation</a></li>
|
|
644
|
+
<li><a href="#" class="hover:text-white transition-colors">API Reference</a></li>
|
|
645
|
+
<li><a href="#" class="hover:text-white transition-colors">SDKs</a></li>
|
|
646
|
+
<li><a href="#" class="hover:text-white transition-colors">Changelog</a></li>
|
|
647
|
+
<li><a href="#" class="hover:text-white transition-colors">Support</a></li>
|
|
648
|
+
</ul>
|
|
649
|
+
</div>
|
|
650
|
+
<div>
|
|
651
|
+
<p class="number-label mb-4">Company</p>
|
|
652
|
+
<ul class="space-y-2.5 text-sm text-gray-400">
|
|
653
|
+
<li><a href="#" class="hover:text-white transition-colors">About</a></li>
|
|
654
|
+
<li><a href="#" class="hover:text-white transition-colors">Blog</a></li>
|
|
655
|
+
<li><a href="#" class="hover:text-white transition-colors">Careers</a></li>
|
|
656
|
+
<li><a href="#" class="hover:text-white transition-colors">Security</a></li>
|
|
657
|
+
<li><a href="#" class="hover:text-white transition-colors">Contact</a></li>
|
|
658
|
+
</ul>
|
|
659
|
+
</div>
|
|
660
|
+
</div>
|
|
661
|
+
<div class="border-t border-white/5 pt-6 flex flex-col md:flex-row justify-between gap-3 text-xs text-gray-600 mono">
|
|
662
|
+
<span>© 2025 Tender Payments Inc. All rights reserved.</span>
|
|
663
|
+
<div class="flex gap-6">
|
|
664
|
+
<a href="#" class="hover:text-gray-400">Privacy</a>
|
|
665
|
+
<a href="#" class="hover:text-gray-400">Terms</a>
|
|
666
|
+
<a href="#" class="hover:text-gray-400">PCI</a>
|
|
667
|
+
<a href="#" class="hover:text-gray-400">Cookies</a>
|
|
668
|
+
</div>
|
|
669
|
+
</div>
|
|
670
|
+
</div>
|
|
671
|
+
</footer>
|
|
672
|
+
|
|
673
|
+
</body>
|
|
674
|
+
</html>
|