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,47 @@
1
+ # Seed Briefs — Fixtures
2
+
3
+ > Reproducible fixtures for the [ABC benchmark](../../abc-benchmark.md) (#878, milestone #13).
4
+ > Each brief is **design-blind** (describes only what the product *does*) and uses an **anonymized**
5
+ > product name. These are the fixed inputs re-run as the harness evolves.
6
+
7
+ ## What a brief is
8
+
9
+ A brief is the single input shared by all three arms (A = ForgeDock `/design`, B = raw one-shot model,
10
+ C = the real reference). It is derived from a real reference page by **stripping every visual cue** —
11
+ no colors, no typefaces, no layout, no "make it like X" — and keeping only a factual description of what
12
+ the product does, who it is for, and what the page must communicate.
13
+
14
+ ## Anonymization is load-bearing — do not leak the real brand
15
+
16
+ Each brief maps to a real reference page (arm C), but the brief **must never name the real product or brand**.
17
+
18
+ A real brand name lets the generation model recall that brand's actual page from training. That measures
19
+ **brand recall, not taste**, and it unfairly inflates arm B (the raw model would reproduce a page it has
20
+ memorized). Treat any real-brand reference inside a brief file as a fixture bug.
21
+
22
+ The mapping below is kept in this README — **separate from the brief files** — so the generator, which is only
23
+ ever handed a single `*.md` brief, never sees which real page it is being compared against.
24
+
25
+ ## Brief → reference (C) mapping
26
+
27
+ | Anonymized brief | Real reference (arm C) | Archetype it exemplifies | Category |
28
+ |------------------|------------------------|--------------------------|----------|
29
+ | **Cadence** | resend.com | Clean / warm-minimal | Email API / developer tooling |
30
+ | **Tender** | stripe.com | Polished / enterprise-dev | Payments API |
31
+ | **Slipstream**| vercel.com | Stark monochrome / brutalist-minimal | Deploy platform |
32
+ | **Voltage** | modal.com | Technical / playful | Serverless compute |
33
+ | **Plume** | linear.app | Refined minimal / dark technical-luxury | Issue tracking |
34
+
35
+ The references and archetypes are drawn from the [reference corpus](../../reference-corpus.md) (#880). The
36
+ mapping is an internal record for scoring and the C-as-calibration check — it is **not** part of the brief
37
+ input handed to any arm.
38
+
39
+ ## Adding a brief
40
+
41
+ 1. Pick a corpus reference (#880) not already represented, or one that adds a distinct archetype.
42
+ 2. Strip it to a design-blind, factual product description. Remove every visual cue.
43
+ 3. Choose an **anonymized** product name (no resemblance to the real brand).
44
+ 4. Save as `fixtures/briefs/<name>.md` following the structure of the existing briefs.
45
+ 5. Add the `<name> → real reference` row to the mapping table above.
46
+ 6. Keep n high enough: the benchmark runs 3–5 generations per arm across 3–5 products — adding a sixth brief
47
+ is fine, but never run fewer than three.
@@ -0,0 +1,39 @@
1
+ # Brief — Cadence
2
+
3
+ > Design-blind seed brief. Describes only what the product does. No visual direction.
4
+ > Anonymized name — do not infer or reproduce any real brand.
5
+
6
+ ## Product
7
+
8
+ **Cadence** is an email-sending API for developers and product teams. It lets engineers send
9
+ transactional and marketing email from their applications with a few lines of code, and gives
10
+ non-engineers a way to write, manage, and schedule those emails without touching the codebase.
11
+
12
+ ## Who it's for
13
+
14
+ Developers integrating email into a product, plus the marketing and product people on the same team
15
+ who own the content of those emails.
16
+
17
+ ## What it does
18
+
19
+ - A simple REST API and SDKs to send email from application code.
20
+ - Deliverability tooling: domain authentication, suppression handling, and bounce/complaint tracking.
21
+ - A way to author emails as reusable templates, including from React-style components.
22
+ - Analytics on opens, clicks, deliveries, and bounces.
23
+ - A test/preview mode so teams can see an email before it ships.
24
+
25
+ ## What the landing page must communicate
26
+
27
+ - That sending email from code is genuinely simple here (show, don't claim).
28
+ - That deliverability is handled — the hard, invisible part of email is taken care of.
29
+ - That both engineers and content owners have a place in the workflow.
30
+ - Credibility: this is production infrastructure, not a toy.
31
+
32
+ ## Primary call to action
33
+
34
+ Get started / sign up with an API key.
35
+
36
+ ## Constraints
37
+
38
+ - Honest, concrete copy about what the product does — no vague promises.
39
+ - The page should read as current, well-resourced SaaS for a technical audience.
@@ -0,0 +1,39 @@
1
+ # Brief — Plume
2
+
3
+ > Design-blind seed brief. Describes only what the product does. No visual direction.
4
+ > Anonymized name — do not infer or reproduce any real brand.
5
+
6
+ ## Product
7
+
8
+ **Plume** is an issue tracking and project management tool for software teams. It is built to be fast and
9
+ keyboard-driven, and it organizes work into issues, cycles, and projects so a team can plan, prioritize,
10
+ and ship without ceremony.
11
+
12
+ ## Who it's for
13
+
14
+ Software engineering teams and the product and design people who plan alongside them — small, fast-moving
15
+ teams that find traditional project tools heavy.
16
+
17
+ ## What it does
18
+
19
+ - Issues with statuses, priorities, labels, and assignees, navigable almost entirely by keyboard.
20
+ - Cycles (time-boxed sprints) and longer-running projects to organize work.
21
+ - Roadmap and progress views so leads can see where things stand.
22
+ - Tight integrations with code hosting so issues track real development.
23
+ - A fast, responsive interface that stays out of the way.
24
+
25
+ ## What the landing page must communicate
26
+
27
+ - Speed and focus: the tool is fast and respects the user's attention.
28
+ - It is opinionated and designed for teams who care about craft.
29
+ - Planning and shipping live in one place, without bureaucracy.
30
+ - A premium, considered product for discerning technical teams.
31
+
32
+ ## Primary call to action
33
+
34
+ Get started / sign up.
35
+
36
+ ## Constraints
37
+
38
+ - Crisp, confident copy; minimal and precise.
39
+ - Reads as a refined, premium, well-funded product for technical teams.
@@ -0,0 +1,39 @@
1
+ # Brief — Slipstream
2
+
3
+ > Design-blind seed brief. Describes only what the product does. No visual direction.
4
+ > Anonymized name — do not infer or reproduce any real brand.
5
+
6
+ ## Product
7
+
8
+ **Slipstream** is a platform for building and deploying web applications. Developers connect a git
9
+ repository and every push is built and deployed automatically to a global edge network, with preview
10
+ environments for each change and zero server management.
11
+
12
+ ## Who it's for
13
+
14
+ Frontend and full-stack developers and the teams shipping web apps who want to deploy without operating
15
+ infrastructure.
16
+
17
+ ## What it does
18
+
19
+ - Git-connected deploys: push to a branch, get a live URL.
20
+ - Preview deployments for every pull request, so changes can be reviewed running, not just as a diff.
21
+ - A global edge network and CDN so apps are fast everywhere by default.
22
+ - Serverless and edge functions for backend logic without managing servers.
23
+ - Collaboration features so a whole team can see and comment on deploys.
24
+
25
+ ## What the landing page must communicate
26
+
27
+ - Speed and immediacy: from push to production is effortless and fast.
28
+ - Zero infrastructure burden — no servers, no ops.
29
+ - It is the obvious home for modern frontend frameworks.
30
+ - Confidence and restraint: this is a serious, opinionated platform.
31
+
32
+ ## Primary call to action
33
+
34
+ Deploy now / start for free.
35
+
36
+ ## Constraints
37
+
38
+ - Concrete and direct copy; let the capability speak.
39
+ - Reads as a stark, confident, well-funded developer platform.
@@ -0,0 +1,39 @@
1
+ # Brief — Tender
2
+
3
+ > Design-blind seed brief. Describes only what the product does. No visual direction.
4
+ > Anonymized name — do not infer or reproduce any real brand.
5
+
6
+ ## Product
7
+
8
+ **Tender** is a payments platform and API for internet businesses. It lets companies accept payments,
9
+ send payouts, and run subscription billing through a single integration, and handles the regulatory and
10
+ financial plumbing — fraud screening, currency conversion, compliance — on their behalf.
11
+
12
+ ## Who it's for
13
+
14
+ Engineers building checkout, billing, or marketplace flows, plus finance and operations teams at the
15
+ companies that run on top of those flows.
16
+
17
+ ## What it does
18
+
19
+ - A unified API to accept cards and local payment methods across many countries and currencies.
20
+ - Subscription and usage-based billing with proration and invoicing.
21
+ - Payouts and money movement for marketplaces and platforms.
22
+ - Fraud detection and risk scoring built in.
23
+ - A dashboard for finance teams to see revenue, disputes, and payouts.
24
+
25
+ ## What the landing page must communicate
26
+
27
+ - Breadth and reliability: this handles serious money at scale, globally.
28
+ - Developer-first: integration is clean and well-documented.
29
+ - Trust and compliance are handled — the regulated, scary parts are someone else's problem now.
30
+ - It serves both the engineers who integrate and the finance teams who reconcile.
31
+
32
+ ## Primary call to action
33
+
34
+ Start integrating / view the docs.
35
+
36
+ ## Constraints
37
+
38
+ - Enterprise-credible but not stuffy; concrete about capabilities.
39
+ - Reads as a high-stakes, well-funded developer platform.
@@ -0,0 +1,39 @@
1
+ # Brief — Voltage
2
+
3
+ > Design-blind seed brief. Describes only what the product does. No visual direction.
4
+ > Anonymized name — do not infer or reproduce any real brand.
5
+
6
+ ## Product
7
+
8
+ **Voltage** is a serverless platform for running compute-heavy and AI workloads. Developers write
9
+ ordinary Python, attach the resources they need — including GPUs — and Voltage runs it in the cloud on
10
+ demand, scaling from zero to thousands of containers and back without provisioning anything.
11
+
12
+ ## Who it's for
13
+
14
+ Machine-learning engineers, data scientists, and backend developers who need heavy or bursty compute
15
+ (model inference, batch jobs, training) but do not want to manage clusters.
16
+
17
+ ## What it does
18
+
19
+ - Run Python functions in the cloud by adding a decorator — no Dockerfiles or YAML required.
20
+ - On-demand GPUs and large CPU/memory, billed only while running.
21
+ - Scale to thousands of parallel containers and back to zero automatically.
22
+ - Schedule jobs, serve inference endpoints, and run long batch pipelines.
23
+ - Fast cold starts and a local-feeling developer loop.
24
+
25
+ ## What the landing page must communicate
26
+
27
+ - Power made simple: serious compute, but the developer experience feels like writing local code.
28
+ - Pay-for-what-you-use economics — idle costs nothing.
29
+ - It is built for the AI/ML era specifically.
30
+ - Technical credibility: the audience is engineers who will read the code sample closely.
31
+
32
+ ## Primary call to action
33
+
34
+ Run your first function / get started.
35
+
36
+ ## Constraints
37
+
38
+ - Technical, code-forward copy; show a real usage example in spirit.
39
+ - Reads as a capable, modern, well-funded compute platform.
@@ -0,0 +1,364 @@
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>Cadence — Email API for developers</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script>
9
+ tailwind.config = {
10
+ theme: {
11
+ extend: {
12
+ fontFamily: {
13
+ mono: ['JetBrains Mono', 'Fira Code', 'Cascadia Code', 'monospace'],
14
+ sans: ['Inter', 'system-ui', 'sans-serif'],
15
+ },
16
+ colors: {
17
+ brand: {
18
+ 50: '#f0fdf4',
19
+ 100: '#dcfce7',
20
+ 400: '#4ade80',
21
+ 500: '#22c55e',
22
+ 600: '#16a34a',
23
+ 700: '#15803d',
24
+ 900: '#14532d',
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
+ </script>
31
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
32
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
33
+ <style>
34
+ .code-block { background: #0d1117; }
35
+ .token-keyword { color: #ff7b72; }
36
+ .token-string { color: #a5d6ff; }
37
+ .token-func { color: #d2a8ff; }
38
+ .token-prop { color: #79c0ff; }
39
+ .token-comment { color: #8b949e; }
40
+ .token-number { color: #f2cc60; }
41
+ .token-plain { color: #e6edf3; }
42
+ .gradient-hero {
43
+ background: radial-gradient(ellipse 80% 60% at 50% -10%, rgba(34,197,94,0.15) 0%, transparent 60%),
44
+ #09090b;
45
+ }
46
+ .glow-green {
47
+ box-shadow: 0 0 0 1px rgba(34,197,94,0.3), 0 0 40px rgba(34,197,94,0.08);
48
+ }
49
+ .stat-card {
50
+ background: linear-gradient(135deg, rgba(255,255,255,0.03) 0%, rgba(255,255,255,0.01) 100%);
51
+ }
52
+ </style>
53
+ </head>
54
+ <body class="bg-zinc-950 text-zinc-100 font-sans antialiased">
55
+
56
+ <!-- Nav -->
57
+ <nav class="border-b border-zinc-800 bg-zinc-950/80 backdrop-blur-sm sticky top-0 z-50">
58
+ <div class="max-w-6xl mx-auto px-6 h-14 flex items-center justify-between">
59
+ <div class="flex items-center gap-8">
60
+ <span class="font-mono font-semibold text-lg tracking-tight text-white">cadence<span class="text-brand-500">.</span></span>
61
+ <div class="hidden md:flex items-center gap-6 text-sm text-zinc-400">
62
+ <a href="#" class="hover:text-zinc-100 transition-colors">Docs</a>
63
+ <a href="#" class="hover:text-zinc-100 transition-colors">API Reference</a>
64
+ <a href="#" class="hover:text-zinc-100 transition-colors">Pricing</a>
65
+ <a href="#" class="hover:text-zinc-100 transition-colors">Blog</a>
66
+ </div>
67
+ </div>
68
+ <div class="flex items-center gap-3">
69
+ <a href="#" class="text-sm text-zinc-400 hover:text-zinc-100 transition-colors">Log in</a>
70
+ <a href="#" class="text-sm bg-brand-500 hover:bg-brand-400 text-black font-semibold px-4 py-1.5 rounded-md transition-colors">Get API key</a>
71
+ </div>
72
+ </div>
73
+ </nav>
74
+
75
+ <!-- Hero -->
76
+ <section class="gradient-hero pt-24 pb-20 px-6">
77
+ <div class="max-w-6xl mx-auto">
78
+ <div class="inline-flex items-center gap-2 bg-zinc-900 border border-zinc-800 rounded-full px-3 py-1 text-xs text-zinc-400 mb-8">
79
+ <span class="w-1.5 h-1.5 rounded-full bg-brand-500 inline-block"></span>
80
+ 99.97% deliverability rate across production senders
81
+ </div>
82
+
83
+ <div class="grid lg:grid-cols-2 gap-16 items-center">
84
+ <div>
85
+ <h1 class="text-5xl font-extrabold tracking-tight leading-tight mb-6">
86
+ Email infrastructure<br />
87
+ that <span class="text-brand-400">actually delivers.</span>
88
+ </h1>
89
+ <p class="text-lg text-zinc-400 leading-relaxed mb-8">
90
+ A REST API and SDKs for sending transactional and marketing email. Cadence handles domain authentication, bounce tracking, and deliverability — so you ship the feature, not the plumbing.
91
+ </p>
92
+ <div class="flex flex-wrap gap-3 mb-10">
93
+ <a href="#" class="bg-brand-500 hover:bg-brand-400 text-black font-semibold px-6 py-3 rounded-lg text-sm transition-colors">Get started free</a>
94
+ <a href="#" class="bg-zinc-800 hover:bg-zinc-700 text-zinc-100 font-medium px-6 py-3 rounded-lg text-sm transition-colors">Read the docs →</a>
95
+ </div>
96
+ <p class="text-xs text-zinc-600">Free tier: 5,000 emails/month. No credit card required.</p>
97
+ </div>
98
+
99
+ <!-- Code panel -->
100
+ <div class="glow-green rounded-xl overflow-hidden border border-zinc-800">
101
+ <div class="code-block px-4 py-3 flex items-center gap-2 border-b border-zinc-800">
102
+ <div class="w-3 h-3 rounded-full bg-zinc-700"></div>
103
+ <div class="w-3 h-3 rounded-full bg-zinc-700"></div>
104
+ <div class="w-3 h-3 rounded-full bg-zinc-700"></div>
105
+ <span class="ml-3 text-xs text-zinc-500 font-mono">send-welcome-email.ts</span>
106
+ </div>
107
+ <pre class="code-block px-5 py-5 text-sm font-mono leading-relaxed overflow-x-auto"><code><span class="token-keyword">import</span> <span class="token-plain">{ Cadence } </span><span class="token-keyword">from</span> <span class="token-string">'@cadence/sdk'</span><span class="token-plain">;</span>
108
+
109
+ <span class="token-keyword">const</span> <span class="token-plain">client = </span><span class="token-keyword">new</span> <span class="token-func">Cadence</span><span class="token-plain">({</span>
110
+ <span class="token-prop">apiKey</span><span class="token-plain">: process.env.</span><span class="token-prop">CADENCE_API_KEY</span><span class="token-plain">,</span>
111
+ <span class="token-plain">});</span>
112
+
113
+ <span class="token-keyword">await</span> <span class="token-plain">client.email.</span><span class="token-func">send</span><span class="token-plain">({</span>
114
+ <span class="token-prop">to</span><span class="token-plain">: </span><span class="token-string">'maya@example.com'</span><span class="token-plain">,</span>
115
+ <span class="token-prop">from</span><span class="token-plain">: </span><span class="token-string">'hello@yourapp.com'</span><span class="token-plain">,</span>
116
+ <span class="token-prop">template</span><span class="token-plain">: </span><span class="token-string">'welcome-v2'</span><span class="token-plain">,</span>
117
+ <span class="token-prop">data</span><span class="token-plain">: {</span>
118
+ <span class="token-prop">name</span><span class="token-plain">: </span><span class="token-string">'Maya'</span><span class="token-plain">,</span>
119
+ <span class="token-prop">plan</span><span class="token-plain">: </span><span class="token-string">'pro'</span><span class="token-plain">,</span>
120
+ <span class="token-prop">loginUrl</span><span class="token-plain">: </span><span class="token-string">'https://app.yourapp.com/login'</span><span class="token-plain">,</span>
121
+ <span class="token-plain">},</span>
122
+ <span class="token-plain">});</span>
123
+
124
+ <span class="token-comment">// { id: 'msg_01HXYZ...', status: 'queued' }</span></code></pre>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ </section>
129
+
130
+ <!-- Stats bar -->
131
+ <section class="border-y border-zinc-800 py-10 bg-zinc-900/30">
132
+ <div class="max-w-6xl mx-auto px-6 grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
133
+ <div>
134
+ <div class="text-3xl font-bold text-white mb-1">4.2B+</div>
135
+ <div class="text-sm text-zinc-500">Emails delivered / year</div>
136
+ </div>
137
+ <div>
138
+ <div class="text-3xl font-bold text-white mb-1">99.97%</div>
139
+ <div class="text-sm text-zinc-500">Deliverability rate</div>
140
+ </div>
141
+ <div>
142
+ <div class="text-3xl font-bold text-white mb-1">&lt;120ms</div>
143
+ <div class="text-sm text-zinc-500">Median send latency</div>
144
+ </div>
145
+ <div>
146
+ <div class="text-3xl font-bold text-white mb-1">11 SDKs</div>
147
+ <div class="text-sm text-zinc-500">Node, Python, Go, Ruby…</div>
148
+ </div>
149
+ </div>
150
+ </section>
151
+
152
+ <!-- The hard part is handled -->
153
+ <section class="py-24 px-6">
154
+ <div class="max-w-6xl mx-auto">
155
+ <div class="text-center mb-16">
156
+ <h2 class="text-3xl font-bold mb-4">The invisible work is done for you</h2>
157
+ <p class="text-zinc-400 max-w-xl mx-auto">Deliverability is a full-time job. We've already done it. Every account gets production-grade email infrastructure from day one.</p>
158
+ </div>
159
+ <div class="grid md:grid-cols-3 gap-6">
160
+
161
+ <div class="stat-card border border-zinc-800 rounded-xl p-6">
162
+ <div class="w-10 h-10 bg-brand-500/10 border border-brand-500/20 rounded-lg flex items-center justify-center mb-4">
163
+ <svg class="w-5 h-5 text-brand-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" 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>
164
+ </div>
165
+ <h3 class="font-semibold text-white mb-2">Domain authentication</h3>
166
+ <p class="text-sm text-zinc-400 leading-relaxed">SPF, DKIM, and DMARC configured in minutes with guided DNS setup. We verify and monitor your records continuously.</p>
167
+ </div>
168
+
169
+ <div class="stat-card border border-zinc-800 rounded-xl p-6">
170
+ <div class="w-10 h-10 bg-brand-500/10 border border-brand-500/20 rounded-lg flex items-center justify-center mb-4">
171
+ <svg class="w-5 h-5 text-brand-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" /></svg>
172
+ </div>
173
+ <h3 class="font-semibold text-white mb-2">Suppression management</h3>
174
+ <p class="text-sm text-zinc-400 leading-relaxed">Bounces, unsubscribes, and spam complaints are captured and suppressed automatically. No manual list hygiene.</p>
175
+ </div>
176
+
177
+ <div class="stat-card border border-zinc-800 rounded-xl p-6">
178
+ <div class="w-10 h-10 bg-brand-500/10 border border-brand-500/20 rounded-lg flex items-center justify-center mb-4">
179
+ <svg class="w-5 h-5 text-brand-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" 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>
180
+ </div>
181
+ <h3 class="font-semibold text-white mb-2">Reputation monitoring</h3>
182
+ <p class="text-sm text-zinc-400 leading-relaxed">Real-time visibility into your sender reputation, bounce rates, and spam complaint rates — with alerts before they become problems.</p>
183
+ </div>
184
+
185
+ <div class="stat-card border border-zinc-800 rounded-xl p-6">
186
+ <div class="w-10 h-10 bg-brand-500/10 border border-brand-500/20 rounded-lg flex items-center justify-center mb-4">
187
+ <svg class="w-5 h-5 text-brand-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /><path stroke-linecap="round" stroke-linejoin="round" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" /></svg>
188
+ </div>
189
+ <h3 class="font-semibold text-white mb-2">Preview &amp; test mode</h3>
190
+ <p class="text-sm text-zinc-400 leading-relaxed">Send to your test environment without touching production inboxes. See exactly how an email renders before it ships to users.</p>
191
+ </div>
192
+
193
+ <div class="stat-card border border-zinc-800 rounded-xl p-6">
194
+ <div class="w-10 h-10 bg-brand-500/10 border border-brand-500/20 rounded-lg flex items-center justify-center mb-4">
195
+ <svg class="w-5 h-5 text-brand-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.486M7 17h.01" /></svg>
196
+ </div>
197
+ <h3 class="font-semibold text-white mb-2">React component templates</h3>
198
+ <p class="text-sm text-zinc-400 leading-relaxed">Write emails as React components. Compile to battle-tested HTML. Version control your templates like the rest of your code.</p>
199
+ </div>
200
+
201
+ <div class="stat-card border border-zinc-800 rounded-xl p-6">
202
+ <div class="w-10 h-10 bg-brand-500/10 border border-brand-500/20 rounded-lg flex items-center justify-center mb-4">
203
+ <svg class="w-5 h-5 text-brand-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" /></svg>
204
+ </div>
205
+ <h3 class="font-semibold text-white mb-2">Analytics dashboard</h3>
206
+ <p class="text-sm text-zinc-400 leading-relaxed">Opens, clicks, deliveries, and bounces per campaign and per message. Exportable via webhook or the Events API.</p>
207
+ </div>
208
+
209
+ </div>
210
+ </div>
211
+ </section>
212
+
213
+ <!-- For both engineers and content owners -->
214
+ <section class="py-24 px-6 bg-zinc-900/30 border-y border-zinc-800">
215
+ <div class="max-w-6xl mx-auto">
216
+ <div class="text-center mb-16">
217
+ <h2 class="text-3xl font-bold mb-4">One tool for your whole team</h2>
218
+ <p class="text-zinc-400 max-w-xl mx-auto">Engineers control the plumbing. Everyone else controls the content. No PRs required to update copy.</p>
219
+ </div>
220
+ <div class="grid md:grid-cols-2 gap-8">
221
+
222
+ <div class="bg-zinc-900 border border-zinc-800 rounded-xl p-8">
223
+ <div class="text-xs font-mono text-brand-400 uppercase tracking-widest mb-4">For engineers</div>
224
+ <h3 class="text-xl font-semibold mb-4">An API that fits your stack</h3>
225
+ <ul class="space-y-3 text-sm text-zinc-400">
226
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> REST API + SDKs for Node, Python, Go, Ruby, PHP, Elixir, and more</li>
227
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Idempotency keys — safe to retry without duplicate sends</li>
228
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Webhook delivery for open/click/bounce events</li>
229
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Scheduled sends via API — no cron job needed</li>
230
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> React Email support — templates are code, not config</li>
231
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Staging environment with real send simulation</li>
232
+ </ul>
233
+ </div>
234
+
235
+ <div class="bg-zinc-900 border border-zinc-800 rounded-xl p-8">
236
+ <div class="text-xs font-mono text-brand-400 uppercase tracking-widest mb-4">For content &amp; product</div>
237
+ <h3 class="text-xl font-semibold mb-4">Edit emails without a deploy</h3>
238
+ <ul class="space-y-3 text-sm text-zinc-400">
239
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Visual template editor — update subject, copy, and layout directly</li>
240
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Preview any template with real data before publishing</li>
241
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Schedule campaigns and one-time sends from the dashboard</li>
242
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Per-template analytics: open rate, click rate, unsubscribes</li>
243
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Role-based access — content editors can't touch API credentials</li>
244
+ <li class="flex gap-3"><span class="text-brand-500 mt-0.5">✓</span> Version history — revert any template to a previous state</li>
245
+ </ul>
246
+ </div>
247
+
248
+ </div>
249
+ </div>
250
+ </section>
251
+
252
+ <!-- API snippet section -->
253
+ <section class="py-24 px-6">
254
+ <div class="max-w-6xl mx-auto">
255
+ <div class="grid lg:grid-cols-2 gap-16 items-start">
256
+ <div>
257
+ <h2 class="text-3xl font-bold mb-4">From zero to sending in under five minutes</h2>
258
+ <p class="text-zinc-400 mb-8 leading-relaxed">Install the SDK, set your API key, call <code class="text-brand-400 bg-zinc-800 px-1.5 py-0.5 rounded text-sm font-mono">email.send()</code>. That's the whole integration for most use cases. No SMTP config, no relay setup, no warm-up spreadsheet.</p>
259
+ <div class="space-y-4">
260
+ <div class="flex gap-4 items-start">
261
+ <div class="w-8 h-8 rounded-full bg-brand-500/20 border border-brand-500/30 text-brand-400 text-sm font-mono font-semibold flex items-center justify-center shrink-0 mt-0.5">1</div>
262
+ <div>
263
+ <div class="font-medium text-white mb-1">Install the SDK</div>
264
+ <div class="text-sm text-zinc-400">npm, pip, go get, gem — whichever fits your stack</div>
265
+ </div>
266
+ </div>
267
+ <div class="flex gap-4 items-start">
268
+ <div class="w-8 h-8 rounded-full bg-brand-500/20 border border-brand-500/30 text-brand-400 text-sm font-mono font-semibold flex items-center justify-center shrink-0 mt-0.5">2</div>
269
+ <div>
270
+ <div class="font-medium text-white mb-1">Add your API key</div>
271
+ <div class="text-sm text-zinc-400">One environment variable. No SMTP credentials to juggle.</div>
272
+ </div>
273
+ </div>
274
+ <div class="flex gap-4 items-start">
275
+ <div class="w-8 h-8 rounded-full bg-brand-500/20 border border-brand-500/30 text-brand-400 text-sm font-mono font-semibold flex items-center justify-center shrink-0 mt-0.5">3</div>
276
+ <div>
277
+ <div class="font-medium text-white mb-1">Send your first email</div>
278
+ <div class="text-sm text-zinc-400">Hit the API. Check the dashboard. It's there.</div>
279
+ </div>
280
+ </div>
281
+ <div class="flex gap-4 items-start">
282
+ <div class="w-8 h-8 rounded-full bg-brand-500/20 border border-brand-500/30 text-brand-400 text-sm font-mono font-semibold flex items-center justify-center shrink-0 mt-0.5">4</div>
283
+ <div>
284
+ <div class="font-medium text-white mb-1">Authenticate your domain</div>
285
+ <div class="text-sm text-zinc-400">Follow the DNS guide to unlock full deliverability and custom from addresses.</div>
286
+ </div>
287
+ </div>
288
+ </div>
289
+ </div>
290
+
291
+ <div>
292
+ <div class="glow-green rounded-xl overflow-hidden border border-zinc-800">
293
+ <div class="code-block px-4 py-3 flex items-center gap-2 border-b border-zinc-800">
294
+ <span class="text-xs text-zinc-500 font-mono">Shell</span>
295
+ </div>
296
+ <pre class="code-block px-5 py-4 text-sm font-mono leading-relaxed overflow-x-auto"><code><span class="token-comment"># Install</span>
297
+ <span class="token-plain">npm install @cadence/sdk</span>
298
+
299
+ <span class="token-comment"># Set your key</span>
300
+ <span class="token-plain">export CADENCE_API_KEY=</span><span class="token-string">sk_live_...</span></code></pre>
301
+ </div>
302
+
303
+ <div class="glow-green rounded-xl overflow-hidden border border-zinc-800 mt-4">
304
+ <div class="code-block px-4 py-3 flex items-center gap-2 border-b border-zinc-800">
305
+ <span class="text-xs text-zinc-500 font-mono">Python</span>
306
+ </div>
307
+ <pre class="code-block px-5 py-4 text-sm font-mono leading-relaxed overflow-x-auto"><code><span class="token-keyword">from</span> <span class="token-plain">cadence </span><span class="token-keyword">import</span> <span class="token-plain">Cadence</span>
308
+
309
+ <span class="token-plain">client = </span><span class="token-func">Cadence</span><span class="token-plain">(api_key=</span><span class="token-string">"sk_live_..."</span><span class="token-plain">)</span>
310
+
311
+ <span class="token-plain">client.email.</span><span class="token-func">send</span><span class="token-plain">(</span>
312
+ <span class="token-prop">to</span><span class="token-plain">=</span><span class="token-string">"user@example.com"</span><span class="token-plain">,</span>
313
+ <span class="token-prop">from_</span><span class="token-plain">=</span><span class="token-string">"you@yourapp.com"</span><span class="token-plain">,</span>
314
+ <span class="token-prop">template</span><span class="token-plain">=</span><span class="token-string">"password-reset"</span><span class="token-plain">,</span>
315
+ <span class="token-prop">data</span><span class="token-plain">={</span><span class="token-string">"reset_url"</span><span class="token-plain">: reset_link}</span>
316
+ <span class="token-plain">)</span></code></pre>
317
+ </div>
318
+
319
+ <div class="glow-green rounded-xl overflow-hidden border border-zinc-800 mt-4">
320
+ <div class="code-block px-4 py-3 flex items-center gap-2 border-b border-zinc-800">
321
+ <span class="text-xs text-zinc-500 font-mono">Go</span>
322
+ </div>
323
+ <pre class="code-block px-5 py-4 text-sm font-mono leading-relaxed overflow-x-auto"><code><span class="token-plain">client := cadence.</span><span class="token-func">New</span><span class="token-plain">(</span><span class="token-string">"sk_live_..."</span><span class="token-plain">)</span>
324
+
325
+ <span class="token-plain">_, err := client.Email.</span><span class="token-func">Send</span><span class="token-plain">(ctx, &cadence.SendParams{</span>
326
+ <span class="token-prop">To</span><span class="token-plain">: </span><span class="token-string">"user@example.com"</span><span class="token-plain">,</span>
327
+ <span class="token-prop">From</span><span class="token-plain">: </span><span class="token-string">"you@yourapp.com"</span><span class="token-plain">,</span>
328
+ <span class="token-prop">Template</span><span class="token-plain">: </span><span class="token-string">"order-confirmed"</span><span class="token-plain">,</span>
329
+ <span class="token-plain">})</span></code></pre>
330
+ </div>
331
+ </div>
332
+ </div>
333
+ </div>
334
+ </section>
335
+
336
+ <!-- CTA -->
337
+ <section class="py-24 px-6">
338
+ <div class="max-w-2xl mx-auto text-center">
339
+ <h2 class="text-4xl font-bold mb-4">Start sending in minutes</h2>
340
+ <p class="text-zinc-400 mb-8 text-lg">Free tier includes 5,000 emails per month. No credit card required. Full API access from day one.</p>
341
+ <div class="flex flex-col sm:flex-row gap-4 justify-center">
342
+ <a href="#" class="bg-brand-500 hover:bg-brand-400 text-black font-bold px-8 py-4 rounded-lg text-base transition-colors">Get your API key →</a>
343
+ <a href="#" class="bg-zinc-800 hover:bg-zinc-700 text-zinc-100 font-medium px-8 py-4 rounded-lg text-base transition-colors">Read the quickstart</a>
344
+ </div>
345
+ <p class="text-xs text-zinc-600 mt-6">Used in production by 3,000+ engineering teams</p>
346
+ </div>
347
+ </section>
348
+
349
+ <!-- Footer -->
350
+ <footer class="border-t border-zinc-800 py-10 px-6">
351
+ <div class="max-w-6xl mx-auto flex flex-col md:flex-row items-center justify-between gap-4">
352
+ <span class="font-mono font-semibold text-zinc-400">cadence<span class="text-brand-500">.</span></span>
353
+ <div class="flex gap-6 text-sm text-zinc-600">
354
+ <a href="#" class="hover:text-zinc-400">Privacy</a>
355
+ <a href="#" class="hover:text-zinc-400">Terms</a>
356
+ <a href="#" class="hover:text-zinc-400">Status</a>
357
+ <a href="#" class="hover:text-zinc-400">Security</a>
358
+ <a href="#" class="hover:text-zinc-400">Contact</a>
359
+ </div>
360
+ </div>
361
+ </footer>
362
+
363
+ </body>
364
+ </html>