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.
Files changed (190) hide show
  1. package/README.md +54 -3
  2. package/bin/cross-publish.mjs +344 -0
  3. package/bin/forgedock.mjs +2205 -541
  4. package/bin/github-app-manifest.json.license +2 -0
  5. package/bin/hooks/session-start.mjs +4 -5
  6. package/bin/registry.mjs +20 -0
  7. package/bin/tui.mjs +172 -96
  8. package/commands/adopt.md +433 -0
  9. package/commands/analytics.md +2 -0
  10. package/commands/audit-agents.md +2 -0
  11. package/commands/audit.md +2 -0
  12. package/commands/autopilot.md +77 -0
  13. package/commands/changelog.md +354 -0
  14. package/commands/cleanup.md +2 -0
  15. package/commands/compat-audit.md +330 -0
  16. package/commands/deploy-info.md +6 -5
  17. package/commands/design-bench.md +176 -0
  18. package/commands/design-render-critique-loop.md +103 -0
  19. package/commands/design.md +259 -0
  20. package/commands/diagnose.md +483 -0
  21. package/commands/explain.md +349 -0
  22. package/commands/forge-stats.md +2 -0
  23. package/commands/forgedock-init.md +2 -0
  24. package/commands/geo-audit.md +2 -0
  25. package/commands/incident-response.md +2 -0
  26. package/commands/issue.md +9 -3
  27. package/commands/milestone.md +2 -0
  28. package/commands/optimize.md +411 -0
  29. package/commands/orchestrate.md +239 -0
  30. package/commands/pipeline-health.md +60 -1
  31. package/commands/qa-sweep.md +39 -2
  32. package/commands/quality-gate.md +67 -0
  33. package/commands/replay.md +263 -0
  34. package/commands/resume.md +264 -0
  35. package/commands/review-pr-agents.md +5 -1
  36. package/commands/review-pr-staging.md +160 -2
  37. package/commands/review-pr.md +85 -3
  38. package/commands/rollback.md +2 -0
  39. package/commands/scope.md +280 -0
  40. package/commands/security-audit.md +2 -0
  41. package/commands/status.md +262 -0
  42. package/commands/sync-ecosystem.md +2 -0
  43. package/commands/test-gate.md +929 -0
  44. package/commands/validate.md +2 -0
  45. package/commands/work-on/build/architect.md +128 -18
  46. package/commands/work-on/build/context.md +130 -17
  47. package/commands/work-on/build/implement.md +7 -3
  48. package/commands/work-on/build/validate.md +2 -0
  49. package/commands/work-on/build.md +32 -7
  50. package/commands/work-on/close.md +85 -0
  51. package/commands/work-on/decompose.md +2 -0
  52. package/commands/work-on/investigate.md +30 -3
  53. package/commands/work-on/review.md +13 -1
  54. package/commands/work-on-monolithic.md +2 -0
  55. package/commands/work-on.md +676 -38
  56. package/docs/BRAND.md +51 -0
  57. package/docs/CI.md +177 -0
  58. package/docs/CONFIG.md +94 -0
  59. package/docs/FORGE-PROTOCOL.md +324 -0
  60. package/docs/articles/b-vs-c-baseline.md +210 -0
  61. package/docs/articles/full-abc-benchmark.md +205 -0
  62. package/docs/articles/per-repo-adaptive-scripts-token-savings.md +174 -0
  63. package/docs/articles/selective-spec-loading-token-savings.md +140 -0
  64. package/docs/claude-breakpoints.json +47 -0
  65. package/docs/design/abc-benchmark.md +195 -0
  66. package/docs/design/design-architect-rationale.md +123 -0
  67. package/docs/design/design-memory.md +61 -0
  68. package/docs/design/design-spec-schema.md +248 -0
  69. package/docs/design/design-system-lint.md +150 -0
  70. package/docs/design/divergent-generation.md +106 -0
  71. package/docs/design/effects-appropriateness.md +133 -0
  72. package/docs/design/fixtures/briefs/README.md +47 -0
  73. package/docs/design/fixtures/briefs/cadence.md +39 -0
  74. package/docs/design/fixtures/briefs/plume.md +39 -0
  75. package/docs/design/fixtures/briefs/slipstream.md +39 -0
  76. package/docs/design/fixtures/briefs/tender.md +39 -0
  77. package/docs/design/fixtures/briefs/voltage.md +39 -0
  78. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-1.html +364 -0
  79. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-2.html +420 -0
  80. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-3.html +506 -0
  81. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-1.html +611 -0
  82. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-2.html +594 -0
  83. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-3.html +817 -0
  84. package/docs/design/fixtures/runs/b-vs-c-baseline/runs.json +175 -0
  85. package/docs/design/fixtures/runs/b-vs-c-baseline/scorecard.json +138 -0
  86. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-1.html +373 -0
  87. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-2.html +398 -0
  88. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-3.html +595 -0
  89. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-1.html +531 -0
  90. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-2.html +565 -0
  91. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-3.html +674 -0
  92. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-1.html +388 -0
  93. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-2.html +463 -0
  94. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-3.html +568 -0
  95. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-1.html +562 -0
  96. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-2.html +618 -0
  97. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-3.html +618 -0
  98. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-1.html +364 -0
  99. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-2.html +420 -0
  100. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-3.html +506 -0
  101. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-1.html +527 -0
  102. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-2.html +445 -0
  103. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-3.html +483 -0
  104. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-1.html +611 -0
  105. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-2.html +594 -0
  106. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-3.html +817 -0
  107. package/docs/design/fixtures/runs/full-abc/runs.json +190 -0
  108. package/docs/design/fixtures/runs/full-abc/scorecard.json +144 -0
  109. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-1.html +496 -0
  110. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-2.html +447 -0
  111. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-3.html +564 -0
  112. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-1.html +373 -0
  113. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-2.html +398 -0
  114. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-3.html +595 -0
  115. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-1.html +622 -0
  116. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-2.html +475 -0
  117. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-3.html +660 -0
  118. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-1.html +531 -0
  119. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-2.html +565 -0
  120. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-3.html +674 -0
  121. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-1.html +525 -0
  122. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-2.html +446 -0
  123. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-3.html +463 -0
  124. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-1.html +388 -0
  125. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-2.html +463 -0
  126. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-3.html +568 -0
  127. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-1.html +1068 -0
  128. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-2.html +1423 -0
  129. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-3.html +1245 -0
  130. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-1.html +305 -0
  131. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-2.html +327 -0
  132. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-3.html +428 -0
  133. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-1.html +1270 -0
  134. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-2.html +1172 -0
  135. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-3.html +1532 -0
  136. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-1.html +315 -0
  137. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-2.html +342 -0
  138. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-3.html +353 -0
  139. package/docs/design/fixtures/runs/full-abc-opus/runs.json +190 -0
  140. package/docs/design/fixtures/runs/full-abc-opus/scorecard.json +144 -0
  141. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-1.html +345 -0
  142. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-2.html +396 -0
  143. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-3.html +502 -0
  144. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-1.html +408 -0
  145. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-2.html +446 -0
  146. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-3.html +496 -0
  147. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-1.html +813 -0
  148. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-2.html +711 -0
  149. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-3.html +721 -0
  150. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-1.html +280 -0
  151. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-2.html +291 -0
  152. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-3.html +366 -0
  153. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-1.html +1010 -0
  154. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-2.html +836 -0
  155. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-3.html +930 -0
  156. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-1.html +407 -0
  157. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-2.html +396 -0
  158. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-3.html +529 -0
  159. package/docs/design/foundations/brutalist.css +294 -0
  160. package/docs/design/foundations/editorial.css +300 -0
  161. package/docs/design/foundations/minimal-luxury.css +295 -0
  162. package/docs/design/foundations/technical.css +293 -0
  163. package/docs/design/foundations/warm-photo.css +299 -0
  164. package/docs/design/reference-corpus.md +1726 -0
  165. package/docs/design/render-critique-loop.md +57 -0
  166. package/docs/site/getting-started.md +21 -0
  167. package/docs/spec-graph-schema.md +397 -0
  168. package/package.json +3 -3
  169. package/scripts/bench-scorecard.mjs +239 -0
  170. package/scripts/build-spec-graph.mjs +509 -0
  171. package/scripts/classify-lane.sh +138 -0
  172. package/scripts/design-system-lint.mjs +993 -0
  173. package/scripts/graph-query.sh +486 -0
  174. package/scripts/transition-label.sh +169 -0
  175. package/scripts/validate-pr-target.sh +30 -0
  176. package/scripts/validate-spec-graph.sh +423 -0
  177. package/templates/devdocs/README.md +72 -0
  178. package/templates/devdocs/agent/using-forgedock.md +3 -0
  179. package/templates/devdocs/agent/using-github.md +3 -0
  180. package/templates/devdocs/index.yaml +162 -0
  181. package/templates/devdocs/project/architecture.md +3 -0
  182. package/templates/devdocs/project/conventions.md +3 -0
  183. package/templates/devdocs/project/custom-instructions.md +3 -0
  184. package/templates/devdocs/project/glossary.md +3 -0
  185. package/templates/devdocs/project/stack.md +3 -0
  186. package/templates/devdocs/templates/commit-convention.md +3 -0
  187. package/templates/devdocs/templates/issue.md +3 -0
  188. package/templates/devdocs/templates/pull-request.md +3 -0
  189. package/templates/devdocs/templates/review-finding.md +3 -0
  190. package/templates/workflows/forgedock-review.yml +96 -0
@@ -0,0 +1,280 @@
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 the internet</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
8
+ <style>
9
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
10
+ body { font-family: 'Inter', sans-serif; color: #0f172a; background: #fff; -webkit-font-smoothing: antialiased; }
11
+ .container { max-width: 1200px; margin: 0 auto; padding: 0 32px; }
12
+
13
+ /* NAV */
14
+ nav { padding: 20px 0; border-bottom: 1px solid #e2e8f0; }
15
+ nav .container { display: flex; align-items: center; justify-content: space-between; }
16
+ .logo { font-size: 22px; font-weight: 800; letter-spacing: -0.5px; color: #4f46e5; }
17
+ .nav-links { display: flex; gap: 32px; align-items: center; }
18
+ .nav-links a { text-decoration: none; color: #475569; font-size: 14px; font-weight: 500; }
19
+ .nav-links a:hover { color: #4f46e5; }
20
+ .btn-primary { display: inline-block; background: #4f46e5; color: #fff !important; padding: 10px 22px; border-radius: 8px; font-size: 14px; font-weight: 600; text-decoration: none; transition: background 0.2s; }
21
+ .btn-primary:hover { background: #4338ca; }
22
+ .btn-outline { display: inline-block; border: 1.5px solid #cbd5e1; color: #0f172a; padding: 10px 22px; border-radius: 8px; font-size: 14px; font-weight: 600; text-decoration: none; transition: all 0.2s; }
23
+ .btn-outline:hover { border-color: #4f46e5; color: #4f46e5; }
24
+
25
+ /* HERO */
26
+ .hero { padding: 100px 0 80px; text-align: center; }
27
+ .hero-badge { display: inline-block; background: #eef2ff; color: #4f46e5; font-size: 13px; font-weight: 600; padding: 6px 16px; border-radius: 20px; margin-bottom: 24px; }
28
+ .hero h1 { font-size: 64px; font-weight: 800; letter-spacing: -2px; line-height: 1.05; max-width: 800px; margin: 0 auto 24px; }
29
+ .hero h1 span { color: #4f46e5; }
30
+ .hero p { font-size: 20px; color: #64748b; max-width: 580px; margin: 0 auto 40px; line-height: 1.6; }
31
+ .hero-ctas { display: flex; gap: 16px; justify-content: center; }
32
+
33
+ /* CODE BLOCK */
34
+ .code-section { padding: 0 0 100px; }
35
+ .code-window { max-width: 720px; margin: 0 auto; background: #1e293b; border-radius: 12px; overflow: hidden; box-shadow: 0 25px 60px rgba(0,0,0,0.15); }
36
+ .code-titlebar { display: flex; align-items: center; gap: 8px; padding: 14px 20px; background: #0f172a; }
37
+ .code-dot { width: 12px; height: 12px; border-radius: 50%; }
38
+ .code-dot.r { background: #f87171; }
39
+ .code-dot.y { background: #fbbf24; }
40
+ .code-dot.g { background: #34d399; }
41
+ .code-titlebar span { margin-left: auto; font-size: 12px; color: #64748b; font-family: 'JetBrains Mono', monospace; }
42
+ .code-body { padding: 24px; font-family: 'JetBrains Mono', monospace; font-size: 13.5px; line-height: 1.7; color: #e2e8f0; overflow-x: auto; }
43
+ .code-body .comment { color: #64748b; }
44
+ .code-body .keyword { color: #c084fc; }
45
+ .code-body .string { color: #34d399; }
46
+ .code-body .func { color: #60a5fa; }
47
+ .code-body .number { color: #fbbf24; }
48
+ .code-body .prop { color: #93c5fd; }
49
+
50
+ /* STATS */
51
+ .stats { padding: 60px 0; background: #f8fafc; border-top: 1px solid #e2e8f0; border-bottom: 1px solid #e2e8f0; }
52
+ .stats .container { display: grid; grid-template-columns: repeat(4, 1fr); gap: 32px; text-align: center; }
53
+ .stat-number { font-size: 48px; font-weight: 800; color: #4f46e5; letter-spacing: -1px; }
54
+ .stat-label { font-size: 14px; color: #64748b; margin-top: 4px; font-weight: 500; }
55
+
56
+ /* FEATURES */
57
+ .features { padding: 100px 0; }
58
+ .section-label { font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 1.5px; color: #4f46e5; margin-bottom: 12px; }
59
+ .section-title { font-size: 40px; font-weight: 800; letter-spacing: -1px; margin-bottom: 16px; }
60
+ .section-subtitle { font-size: 18px; color: #64748b; max-width: 560px; line-height: 1.6; margin-bottom: 60px; }
61
+ .features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; }
62
+ .feature-card { padding: 32px; border: 1px solid #e2e8f0; border-radius: 12px; transition: box-shadow 0.2s, border-color 0.2s; }
63
+ .feature-card:hover { box-shadow: 0 8px 30px rgba(0,0,0,0.06); border-color: #c7d2fe; }
64
+ .feature-icon { width: 44px; height: 44px; background: #eef2ff; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 20px; margin-bottom: 20px; }
65
+ .feature-card h3 { font-size: 18px; font-weight: 700; margin-bottom: 10px; }
66
+ .feature-card p { font-size: 15px; color: #64748b; line-height: 1.6; }
67
+
68
+ /* SPLIT SECTION */
69
+ .split { padding: 100px 0; background: #f8fafc; }
70
+ .split .container { display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: center; }
71
+ .split h2 { font-size: 36px; font-weight: 800; letter-spacing: -0.5px; margin-bottom: 20px; }
72
+ .split p { font-size: 16px; color: #64748b; line-height: 1.7; margin-bottom: 24px; }
73
+ .check-list { list-style: none; }
74
+ .check-list li { font-size: 15px; color: #334155; padding: 8px 0; padding-left: 28px; position: relative; }
75
+ .check-list li::before { content: ""; position: absolute; left: 0; top: 12px; width: 16px; height: 16px; background: #4f46e5; border-radius: 50%; }
76
+ .check-list li::after { content: ""; position: absolute; left: 5px; top: 17px; width: 6px; height: 3px; border-left: 2px solid #fff; border-bottom: 2px solid #fff; transform: rotate(-45deg); }
77
+ .dashboard-mock { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 32px; box-shadow: 0 8px 30px rgba(0,0,0,0.06); }
78
+ .dash-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; }
79
+ .dash-header h4 { font-size: 16px; font-weight: 700; }
80
+ .dash-header span { font-size: 13px; color: #64748b; background: #f1f5f9; padding: 4px 12px; border-radius: 6px; }
81
+ .dash-bar-group { display: flex; flex-direction: column; gap: 12px; }
82
+ .dash-bar-row { display: flex; align-items: center; gap: 12px; }
83
+ .dash-bar-label { font-size: 13px; color: #64748b; width: 40px; }
84
+ .dash-bar { height: 28px; border-radius: 6px; background: #4f46e5; }
85
+ .dash-bar.b { background: #818cf8; }
86
+ .dash-bar.c { background: #c7d2fe; }
87
+ .dash-revenue { font-size: 32px; font-weight: 800; color: #4f46e5; margin-bottom: 4px; }
88
+ .dash-sub { font-size: 13px; color: #64748b; margin-bottom: 20px; }
89
+
90
+ /* CTA */
91
+ .cta { padding: 100px 0; text-align: center; background: #4f46e5; color: #fff; }
92
+ .cta h2 { font-size: 44px; font-weight: 800; letter-spacing: -1px; margin-bottom: 16px; }
93
+ .cta p { font-size: 18px; opacity: 0.85; max-width: 500px; margin: 0 auto 40px; line-height: 1.6; }
94
+ .cta .btn-primary { background: #fff; color: #4f46e5 !important; }
95
+ .cta .btn-primary:hover { background: #eef2ff; }
96
+ .cta .btn-outline { border-color: rgba(255,255,255,0.4); color: #fff; }
97
+ .cta .btn-outline:hover { border-color: #fff; }
98
+ .cta-buttons { display: flex; gap: 16px; justify-content: center; }
99
+
100
+ /* FOOTER */
101
+ footer { padding: 48px 0; border-top: 1px solid #e2e8f0; }
102
+ footer .container { display: flex; justify-content: space-between; align-items: center; }
103
+ footer p { font-size: 13px; color: #94a3b8; }
104
+ .footer-links { display: flex; gap: 24px; }
105
+ .footer-links a { font-size: 13px; color: #94a3b8; text-decoration: none; }
106
+ .footer-links a:hover { color: #4f46e5; }
107
+ </style>
108
+ </head>
109
+ <body>
110
+
111
+ <nav>
112
+ <div class="container">
113
+ <div class="logo">tender</div>
114
+ <div class="nav-links">
115
+ <a href="#">Products</a>
116
+ <a href="#">Developers</a>
117
+ <a href="#">Pricing</a>
118
+ <a href="#">Company</a>
119
+ <a href="#" class="btn-outline">Sign in</a>
120
+ <a href="#" class="btn-primary">Start integrating</a>
121
+ </div>
122
+ </div>
123
+ </nav>
124
+
125
+ <section class="hero">
126
+ <div class="container">
127
+ <div class="hero-badge">Now processing in 47 countries</div>
128
+ <h1>Payments infrastructure for <span>the internet</span></h1>
129
+ <p>Accept payments, send payouts, and automate billing globally. One API, every payment method, zero compliance headaches.</p>
130
+ <div class="hero-ctas">
131
+ <a href="#" class="btn-primary">Start integrating</a>
132
+ <a href="#" class="btn-outline">Read the docs</a>
133
+ </div>
134
+ </div>
135
+ </section>
136
+
137
+ <section class="code-section">
138
+ <div class="container">
139
+ <div class="code-window">
140
+ <div class="code-titlebar">
141
+ <div class="code-dot r"></div>
142
+ <div class="code-dot y"></div>
143
+ <div class="code-dot g"></div>
144
+ <span>charge.js</span>
145
+ </div>
146
+ <div class="code-body">
147
+ <span class="comment">// Create a payment in three lines</span>
148
+ <span class="keyword">const</span> payment = <span class="keyword">await</span> tender.<span class="func">payments</span>.<span class="func">create</span>({
149
+ <span class="prop">amount</span>: <span class="number">4999</span>,
150
+ <span class="prop">currency</span>: <span class="string">'usd'</span>,
151
+ <span class="prop">payment_method</span>: <span class="string">'pm_1PfKx2Lkd8...'</span>,
152
+ <span class="prop">metadata</span>: { <span class="prop">order_id</span>: <span class="string">'ord_8291'</span> }
153
+ });
154
+
155
+ <span class="comment">// payment.id &rarr; "pay_3Mx2r9Vk..."</span>
156
+ <span class="comment">// payment.status &rarr; "succeeded"</span>
157
+ <span class="comment">// payment.fraud_score &rarr; 0.02</span>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </section>
162
+
163
+ <section class="stats">
164
+ <div class="container">
165
+ <div>
166
+ <div class="stat-number">$84B+</div>
167
+ <div class="stat-label">Processed annually</div>
168
+ </div>
169
+ <div>
170
+ <div class="stat-number">99.999%</div>
171
+ <div class="stat-label">Uptime SLA</div>
172
+ </div>
173
+ <div>
174
+ <div class="stat-number">135+</div>
175
+ <div class="stat-label">Currencies supported</div>
176
+ </div>
177
+ <div>
178
+ <div class="stat-number">47</div>
179
+ <div class="stat-label">Countries live</div>
180
+ </div>
181
+ </div>
182
+ </section>
183
+
184
+ <section class="features">
185
+ <div class="container">
186
+ <div class="section-label">Capabilities</div>
187
+ <div class="section-title">Everything money needs to move</div>
188
+ <div class="section-subtitle">Tender handles the full payments lifecycle so your team ships products, not payment plumbing.</div>
189
+ <div class="features-grid">
190
+ <div class="feature-card">
191
+ <div class="feature-icon">&#9889;</div>
192
+ <h3>Global payments</h3>
193
+ <p>Accept cards, wallets, bank transfers, and 60+ local payment methods through a single, unified API.</p>
194
+ </div>
195
+ <div class="feature-card">
196
+ <div class="feature-icon">&#128260;</div>
197
+ <h3>Subscriptions &amp; billing</h3>
198
+ <p>Recurring, usage-based, and hybrid billing with proration, invoicing, and dunning built in.</p>
199
+ </div>
200
+ <div class="feature-card">
201
+ <div class="feature-icon">&#127760;</div>
202
+ <h3>Payouts &amp; transfers</h3>
203
+ <p>Move money to sellers, contractors, or partners in 47 countries. Same-day settlement available.</p>
204
+ </div>
205
+ <div class="feature-card">
206
+ <div class="feature-icon">&#128737;</div>
207
+ <h3>Fraud &amp; risk</h3>
208
+ <p>ML-based fraud scoring on every transaction. Customize rules, block bad actors, reduce chargebacks by 40%.</p>
209
+ </div>
210
+ <div class="feature-card">
211
+ <div class="feature-icon">&#128176;</div>
212
+ <h3>Currency conversion</h3>
213
+ <p>Present prices in local currency, settle in yours. Real-time FX rates with no hidden markups.</p>
214
+ </div>
215
+ <div class="feature-card">
216
+ <div class="feature-icon">&#128203;</div>
217
+ <h3>Compliance &amp; regulation</h3>
218
+ <p>PCI DSS Level 1. PSD2/SCA. SOC 2 Type II. We hold the licenses so you don't have to.</p>
219
+ </div>
220
+ </div>
221
+ </div>
222
+ </section>
223
+
224
+ <section class="split">
225
+ <div class="container">
226
+ <div>
227
+ <div class="section-label">For finance teams</div>
228
+ <h2>Revenue clarity without the spreadsheets</h2>
229
+ <p>Your finance team gets a real-time dashboard with revenue analytics, dispute management, and payout tracking. No more reconciling CSVs at month-end.</p>
230
+ <ul class="check-list">
231
+ <li>Real-time revenue and MRR dashboards</li>
232
+ <li>One-click dispute response with evidence builder</li>
233
+ <li>Automated payout reconciliation</li>
234
+ <li>Configurable alerts for anomalies and thresholds</li>
235
+ </ul>
236
+ </div>
237
+ <div class="dashboard-mock">
238
+ <div class="dash-revenue">$2,847,391</div>
239
+ <div class="dash-sub">Monthly recurring revenue (+12.3% MoM)</div>
240
+ <div class="dash-header">
241
+ <h4>Weekly volume</h4>
242
+ <span>Last 6 weeks</span>
243
+ </div>
244
+ <div class="dash-bar-group">
245
+ <div class="dash-bar-row"><span class="dash-bar-label">W6</span><div class="dash-bar" style="width:92%"></div></div>
246
+ <div class="dash-bar-row"><span class="dash-bar-label">W5</span><div class="dash-bar b" style="width:85%"></div></div>
247
+ <div class="dash-bar-row"><span class="dash-bar-label">W4</span><div class="dash-bar" style="width:78%"></div></div>
248
+ <div class="dash-bar-row"><span class="dash-bar-label">W3</span><div class="dash-bar b" style="width:70%"></div></div>
249
+ <div class="dash-bar-row"><span class="dash-bar-label">W2</span><div class="dash-bar c" style="width:65%"></div></div>
250
+ <div class="dash-bar-row"><span class="dash-bar-label">W1</span><div class="dash-bar c" style="width:58%"></div></div>
251
+ </div>
252
+ </div>
253
+ </div>
254
+ </section>
255
+
256
+ <section class="cta">
257
+ <div class="container">
258
+ <h2>Start building with Tender</h2>
259
+ <p>Get your API keys in 60 seconds. No sales calls, no contracts, no commitment.</p>
260
+ <div class="cta-buttons">
261
+ <a href="#" class="btn-primary">Start integrating</a>
262
+ <a href="#" class="btn-outline">View documentation</a>
263
+ </div>
264
+ </div>
265
+ </section>
266
+
267
+ <footer>
268
+ <div class="container">
269
+ <p>&copy; 2026 Tender, Inc. All rights reserved.</p>
270
+ <div class="footer-links">
271
+ <a href="#">Privacy</a>
272
+ <a href="#">Terms</a>
273
+ <a href="#">Security</a>
274
+ <a href="#">Status</a>
275
+ </div>
276
+ </div>
277
+ </footer>
278
+
279
+ </body>
280
+ </html>
@@ -0,0 +1,291 @@
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 - The payments API for modern businesses</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Fira+Code:wght@400;500&display=swap" rel="stylesheet">
8
+ <style>
9
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
10
+ body { font-family: 'DM Sans', sans-serif; background: #09090b; color: #fafafa; -webkit-font-smoothing: antialiased; }
11
+
12
+ /* NAV */
13
+ header { position: sticky; top: 0; z-index: 100; background: rgba(9,9,11,0.85); backdrop-filter: blur(16px); border-bottom: 1px solid #27272a; }
14
+ header .inner { max-width: 1240px; margin: 0 auto; padding: 0 40px; display: flex; align-items: center; justify-content: space-between; height: 64px; }
15
+ .logo { font-weight: 700; font-size: 21px; color: #fafafa; letter-spacing: -0.5px; }
16
+ .logo em { font-style: normal; color: #22c55e; }
17
+ .nav-links { display: flex; gap: 28px; align-items: center; }
18
+ .nav-links a { color: #a1a1aa; font-size: 14px; text-decoration: none; font-weight: 500; transition: color 0.15s; }
19
+ .nav-links a:hover { color: #fafafa; }
20
+ .btn-green { background: #22c55e; color: #09090b; font-weight: 600; font-size: 14px; padding: 9px 20px; border-radius: 6px; text-decoration: none; display: inline-block; transition: background 0.15s; }
21
+ .btn-green:hover { background: #16a34a; }
22
+ .btn-ghost { color: #fafafa; border: 1px solid #3f3f46; padding: 9px 20px; border-radius: 6px; font-size: 14px; font-weight: 600; text-decoration: none; display: inline-block; transition: border-color 0.15s; }
23
+ .btn-ghost:hover { border-color: #22c55e; }
24
+
25
+ /* HERO - two column */
26
+ .hero { max-width: 1240px; margin: 0 auto; padding: 100px 40px 80px; display: grid; grid-template-columns: 1fr 1fr; gap: 60px; align-items: center; }
27
+ .hero-text h1 { font-size: 52px; font-weight: 700; line-height: 1.1; letter-spacing: -1.5px; margin-bottom: 20px; }
28
+ .hero-text h1 .accent { color: #22c55e; }
29
+ .hero-text p { font-size: 18px; color: #a1a1aa; line-height: 1.65; margin-bottom: 32px; max-width: 480px; }
30
+ .hero-cta { display: flex; gap: 14px; }
31
+ .hero-code { background: #18181b; border: 1px solid #27272a; border-radius: 12px; overflow: hidden; }
32
+ .hero-code-tabs { display: flex; background: #0f0f12; border-bottom: 1px solid #27272a; }
33
+ .hero-code-tabs button { background: none; border: none; color: #71717a; padding: 10px 20px; font-family: 'Fira Code', monospace; font-size: 12px; cursor: pointer; border-bottom: 2px solid transparent; }
34
+ .hero-code-tabs button.active { color: #22c55e; border-bottom-color: #22c55e; }
35
+ .hero-code pre { padding: 24px; font-family: 'Fira Code', monospace; font-size: 13px; line-height: 1.75; color: #d4d4d8; overflow-x: auto; }
36
+ .hero-code .kw { color: #c084fc; }
37
+ .hero-code .fn { color: #60a5fa; }
38
+ .hero-code .st { color: #4ade80; }
39
+ .hero-code .cm { color: #52525b; }
40
+ .hero-code .nb { color: #fbbf24; }
41
+
42
+ /* LOGOS */
43
+ .logos { border-top: 1px solid #27272a; border-bottom: 1px solid #27272a; padding: 40px 0; }
44
+ .logos .inner { max-width: 1240px; margin: 0 auto; padding: 0 40px; text-align: center; }
45
+ .logos p { font-size: 13px; color: #52525b; text-transform: uppercase; letter-spacing: 2px; font-weight: 600; margin-bottom: 28px; }
46
+ .logo-row { display: flex; justify-content: center; gap: 56px; align-items: center; flex-wrap: wrap; }
47
+ .logo-row span { font-size: 18px; font-weight: 700; color: #3f3f46; letter-spacing: -0.3px; }
48
+
49
+ /* FEATURES - horizontal cards */
50
+ .features { max-width: 1240px; margin: 0 auto; padding: 100px 40px; }
51
+ .features .section-header { text-align: center; margin-bottom: 64px; }
52
+ .features .section-header h2 { font-size: 40px; font-weight: 700; letter-spacing: -1px; margin-bottom: 12px; }
53
+ .features .section-header p { color: #a1a1aa; font-size: 17px; max-width: 520px; margin: 0 auto; }
54
+ .feature-rows { display: flex; flex-direction: column; gap: 24px; }
55
+ .feature-row { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid #27272a; border-radius: 14px; overflow: hidden; background: #18181b; transition: border-color 0.2s; }
56
+ .feature-row:hover { border-color: #3f3f46; }
57
+ .feature-row-text { padding: 48px; display: flex; flex-direction: column; justify-content: center; }
58
+ .feature-row-text .tag { display: inline-block; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 1.5px; color: #22c55e; margin-bottom: 14px; }
59
+ .feature-row-text h3 { font-size: 28px; font-weight: 700; letter-spacing: -0.5px; margin-bottom: 12px; }
60
+ .feature-row-text p { color: #a1a1aa; font-size: 15px; line-height: 1.65; }
61
+ .feature-row-visual { background: #0f0f12; padding: 48px; display: flex; align-items: center; justify-content: center; }
62
+ .feature-row:nth-child(even) .feature-row-text { order: 2; }
63
+ .feature-row:nth-child(even) .feature-row-visual { order: 1; }
64
+
65
+ /* mini metric cards inside visuals */
66
+ .metric-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; width: 100%; }
67
+ .metric-card { background: #18181b; border: 1px solid #27272a; border-radius: 10px; padding: 20px; }
68
+ .metric-card .value { font-size: 28px; font-weight: 700; color: #22c55e; margin-bottom: 4px; }
69
+ .metric-card .label { font-size: 12px; color: #71717a; }
70
+
71
+ /* method pills */
72
+ .method-pills { display: flex; flex-wrap: wrap; gap: 10px; }
73
+ .method-pill { background: #27272a; color: #d4d4d8; font-size: 13px; font-weight: 500; padding: 8px 16px; border-radius: 8px; }
74
+
75
+ /* terminal block */
76
+ .terminal { width: 100%; background: #09090b; border: 1px solid #27272a; border-radius: 10px; padding: 20px; font-family: 'Fira Code', monospace; font-size: 12px; color: #a1a1aa; line-height: 1.8; }
77
+ .terminal .prompt { color: #22c55e; }
78
+ .terminal .output { color: #71717a; }
79
+
80
+ /* THREE COL BOTTOM */
81
+ .three-col { max-width: 1240px; margin: 0 auto; padding: 0 40px 100px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
82
+ .col-card { background: #18181b; border: 1px solid #27272a; border-radius: 14px; padding: 36px; transition: border-color 0.2s; }
83
+ .col-card:hover { border-color: #3f3f46; }
84
+ .col-card .icon-circle { width: 48px; height: 48px; border-radius: 50%; background: rgba(34,197,94,0.1); display: flex; align-items: center; justify-content: center; font-size: 20px; margin-bottom: 20px; }
85
+ .col-card h3 { font-size: 18px; font-weight: 700; margin-bottom: 10px; }
86
+ .col-card p { font-size: 14px; color: #a1a1aa; line-height: 1.6; }
87
+
88
+ /* CTA */
89
+ .final-cta { padding: 100px 40px; text-align: center; position: relative; overflow: hidden; }
90
+ .final-cta::before { content: ''; position: absolute; top: 50%; left: 50%; width: 600px; height: 600px; background: radial-gradient(circle, rgba(34,197,94,0.08), transparent 70%); transform: translate(-50%, -50%); pointer-events: none; }
91
+ .final-cta h2 { font-size: 44px; font-weight: 700; letter-spacing: -1px; margin-bottom: 16px; position: relative; }
92
+ .final-cta p { font-size: 17px; color: #a1a1aa; margin-bottom: 36px; max-width: 460px; margin-left: auto; margin-right: auto; position: relative; }
93
+ .final-cta .cta-btns { display: flex; gap: 14px; justify-content: center; position: relative; }
94
+
95
+ /* FOOTER */
96
+ footer { border-top: 1px solid #27272a; padding: 40px 0; }
97
+ footer .inner { max-width: 1240px; margin: 0 auto; padding: 0 40px; display: flex; justify-content: space-between; align-items: center; }
98
+ footer p { font-size: 13px; color: #52525b; }
99
+ footer .flinks { display: flex; gap: 24px; }
100
+ footer .flinks a { color: #52525b; font-size: 13px; text-decoration: none; }
101
+ footer .flinks a:hover { color: #a1a1aa; }
102
+ </style>
103
+ </head>
104
+ <body>
105
+
106
+ <header>
107
+ <div class="inner">
108
+ <div class="logo"><em>t</em>ender</div>
109
+ <div class="nav-links">
110
+ <a href="#">Products</a>
111
+ <a href="#">Documentation</a>
112
+ <a href="#">Pricing</a>
113
+ <a href="#">Changelog</a>
114
+ <a href="#" class="btn-ghost">Log in</a>
115
+ <a href="#" class="btn-green">Get API keys</a>
116
+ </div>
117
+ </div>
118
+ </header>
119
+
120
+ <section class="hero">
121
+ <div class="hero-text">
122
+ <h1>The payments API built for <span class="accent">serious scale</span></h1>
123
+ <p>Tender unifies payments, billing, and payouts into a single integration. Accept 60+ payment methods across 135 currencies while we handle fraud, compliance, and settlement.</p>
124
+ <div class="hero-cta">
125
+ <a href="#" class="btn-green">Start integrating</a>
126
+ <a href="#" class="btn-ghost">Read the docs</a>
127
+ </div>
128
+ </div>
129
+ <div class="hero-code">
130
+ <div class="hero-code-tabs">
131
+ <button class="active">Node.js</button>
132
+ <button>Python</button>
133
+ <button>cURL</button>
134
+ </div>
135
+ <pre><span class="cm">// Create a subscription in seconds</span>
136
+ <span class="kw">import</span> Tender <span class="kw">from</span> <span class="st">'@tender/node'</span>;
137
+
138
+ <span class="kw">const</span> tender = <span class="kw">new</span> <span class="fn">Tender</span>(<span class="st">'sk_live_...'</span>);
139
+
140
+ <span class="kw">const</span> sub = <span class="kw">await</span> tender.<span class="fn">subscriptions</span>.<span class="fn">create</span>({
141
+ <span class="fn">customer</span>: <span class="st">'cus_9Xr3kL'</span>,
142
+ <span class="fn">items</span>: [{
143
+ <span class="fn">price</span>: <span class="st">'price_pro_monthly'</span>,
144
+ <span class="fn">quantity</span>: <span class="nb">1</span>
145
+ }],
146
+ <span class="fn">trial_days</span>: <span class="nb">14</span>,
147
+ });
148
+ <span class="cm">// sub.status === 'trialing'</span></pre>
149
+ </div>
150
+ </section>
151
+
152
+ <section class="logos">
153
+ <div class="inner">
154
+ <p>Trusted by teams building the future</p>
155
+ <div class="logo-row">
156
+ <span>Vercel</span>
157
+ <span>Linear</span>
158
+ <span>Figma</span>
159
+ <span>Notion</span>
160
+ <span>Retool</span>
161
+ <span>Supabase</span>
162
+ </div>
163
+ </div>
164
+ </section>
165
+
166
+ <section class="features">
167
+ <div class="section-header">
168
+ <h2>Built for every side of payments</h2>
169
+ <p>From first charge to global expansion, Tender grows with your business.</p>
170
+ </div>
171
+
172
+ <div class="feature-rows">
173
+ <div class="feature-row">
174
+ <div class="feature-row-text">
175
+ <span class="tag">Payments</span>
176
+ <h3>Accept any payment, anywhere</h3>
177
+ <p>Cards, digital wallets, bank debits, BNPL, and dozens of region-specific methods. One API call, automatic routing, optimized acceptance rates across all of them.</p>
178
+ </div>
179
+ <div class="feature-row-visual">
180
+ <div class="method-pills">
181
+ <span class="method-pill">Visa</span>
182
+ <span class="method-pill">Mastercard</span>
183
+ <span class="method-pill">Apple Pay</span>
184
+ <span class="method-pill">Google Pay</span>
185
+ <span class="method-pill">iDEAL</span>
186
+ <span class="method-pill">SEPA</span>
187
+ <span class="method-pill">Boleto</span>
188
+ <span class="method-pill">PIX</span>
189
+ <span class="method-pill">Alipay</span>
190
+ <span class="method-pill">UPI</span>
191
+ <span class="method-pill">Klarna</span>
192
+ <span class="method-pill">ACH</span>
193
+ <span class="method-pill">BECS</span>
194
+ <span class="method-pill">Bancontact</span>
195
+ </div>
196
+ </div>
197
+ </div>
198
+
199
+ <div class="feature-row">
200
+ <div class="feature-row-text">
201
+ <span class="tag">Billing</span>
202
+ <h3>Subscription and usage billing that just works</h3>
203
+ <p>Flat-rate, per-seat, usage-based, or hybrid. Tender calculates proration, generates invoices, handles dunning, and manages upgrades and downgrades automatically.</p>
204
+ </div>
205
+ <div class="feature-row-visual">
206
+ <div class="terminal">
207
+ <div><span class="prompt">$</span> tender billing invoices list --customer cus_9Xr3kL</div>
208
+ <div class="output">
209
+ INV_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS&nbsp;&nbsp;&nbsp;AMOUNT&nbsp;&nbsp;&nbsp;DUE
210
+ inv_8Kx2m1&nbsp;&nbsp;&nbsp;paid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$299.00&nbsp;&nbsp;2026-06-01
211
+ inv_7Rp4n3&nbsp;&nbsp;&nbsp;paid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$299.00&nbsp;&nbsp;2026-05-01
212
+ inv_6Wt9q7&nbsp;&nbsp;&nbsp;paid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$149.50&nbsp;&nbsp;2026-04-01
213
+ </div>
214
+ <div style="margin-top:8px"><span class="prompt">$</span> tender billing subscription update sub_3Mx --prorate</div>
215
+ <div class="output">Subscription updated. Credit of $12.41 applied.</div>
216
+ </div>
217
+ </div>
218
+ </div>
219
+
220
+ <div class="feature-row">
221
+ <div class="feature-row-text">
222
+ <span class="tag">Payouts</span>
223
+ <h3>Move money to anyone, globally</h3>
224
+ <p>Route payouts to marketplace sellers, gig workers, or SaaS partners in 47 countries. Automate splits, manage tax reporting, and settle in local currency.</p>
225
+ </div>
226
+ <div class="feature-row-visual">
227
+ <div class="metric-grid">
228
+ <div class="metric-card">
229
+ <div class="value">$12.4M</div>
230
+ <div class="label">Paid out this month</div>
231
+ </div>
232
+ <div class="metric-card">
233
+ <div class="value">2,847</div>
234
+ <div class="label">Active recipients</div>
235
+ </div>
236
+ <div class="metric-card">
237
+ <div class="value">47</div>
238
+ <div class="label">Countries</div>
239
+ </div>
240
+ <div class="metric-card">
241
+ <div class="value">T+1</div>
242
+ <div class="label">Avg settlement</div>
243
+ </div>
244
+ </div>
245
+ </div>
246
+ </div>
247
+ </div>
248
+ </section>
249
+
250
+ <div class="three-col">
251
+ <div class="col-card">
252
+ <div class="icon-circle">&#128274;</div>
253
+ <h3>Compliance handled</h3>
254
+ <p>PCI DSS Level 1, SOC 2 Type II, PSD2/SCA. We hold money transmission licenses in every jurisdiction we operate. You stay focused on your product.</p>
255
+ </div>
256
+ <div class="col-card">
257
+ <div class="icon-circle">&#129302;</div>
258
+ <h3>Fraud &amp; risk engine</h3>
259
+ <p>Every transaction is scored in real time. Custom rules, block lists, velocity checks, and 3DS challenges give you control without friction for good customers.</p>
260
+ </div>
261
+ <div class="col-card">
262
+ <div class="icon-circle">&#128200;</div>
263
+ <h3>Revenue dashboard</h3>
264
+ <p>Finance teams get real-time views of revenue, MRR, churn, disputes, and payouts. Export anything, set alerts, and close the books faster.</p>
265
+ </div>
266
+ </div>
267
+
268
+ <section class="final-cta">
269
+ <h2>Ship payments, not paperwork</h2>
270
+ <p>Get your test API keys instantly. Go live when you're ready, with no contracts required up to $1M in volume.</p>
271
+ <div class="cta-btns">
272
+ <a href="#" class="btn-green">Get API keys</a>
273
+ <a href="#" class="btn-ghost">Explore documentation</a>
274
+ </div>
275
+ </section>
276
+
277
+ <footer>
278
+ <div class="inner">
279
+ <p>&copy; 2026 Tender Technologies, Inc.</p>
280
+ <div class="flinks">
281
+ <a href="#">Privacy</a>
282
+ <a href="#">Terms</a>
283
+ <a href="#">Security</a>
284
+ <a href="#">Status</a>
285
+ <a href="#">Blog</a>
286
+ </div>
287
+ </div>
288
+ </footer>
289
+
290
+ </body>
291
+ </html>