forgedock 1.0.17 → 1.0.19

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 (134) hide show
  1. package/README.md +34 -1
  2. package/bin/cross-publish.mjs +344 -0
  3. package/bin/forgedock.mjs +229 -17
  4. package/commands/autopilot.md +77 -0
  5. package/commands/design-bench.md +176 -0
  6. package/commands/design-render-critique-loop.md +103 -0
  7. package/commands/design.md +259 -0
  8. package/commands/issue.md +7 -3
  9. package/commands/orchestrate.md +121 -0
  10. package/commands/{resume.md → pipeline-resume.md} +4 -4
  11. package/commands/{status.md → pipeline-status.md} +1 -1
  12. package/commands/qa-sweep.md +37 -2
  13. package/commands/quality-gate.md +57 -0
  14. package/commands/review-pr-staging.md +158 -2
  15. package/commands/test-gate.md +929 -0
  16. package/commands/work-on/build/implement.md +5 -3
  17. package/commands/work-on.md +53 -3
  18. package/docs/CI.md +177 -0
  19. package/docs/FORGE-PROTOCOL.md +324 -0
  20. package/docs/articles/b-vs-c-baseline.md +210 -0
  21. package/docs/articles/full-abc-benchmark.md +205 -0
  22. package/docs/articles/selective-spec-loading-token-savings.md +140 -0
  23. package/docs/design/abc-benchmark.md +195 -0
  24. package/docs/design/design-architect-rationale.md +123 -0
  25. package/docs/design/design-memory.md +61 -0
  26. package/docs/design/design-spec-schema.md +248 -0
  27. package/docs/design/design-system-lint.md +150 -0
  28. package/docs/design/divergent-generation.md +106 -0
  29. package/docs/design/effects-appropriateness.md +133 -0
  30. package/docs/design/fixtures/briefs/README.md +47 -0
  31. package/docs/design/fixtures/briefs/cadence.md +39 -0
  32. package/docs/design/fixtures/briefs/plume.md +39 -0
  33. package/docs/design/fixtures/briefs/slipstream.md +39 -0
  34. package/docs/design/fixtures/briefs/tender.md +39 -0
  35. package/docs/design/fixtures/briefs/voltage.md +39 -0
  36. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-1.html +364 -0
  37. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-2.html +420 -0
  38. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-3.html +506 -0
  39. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-1.html +611 -0
  40. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-2.html +594 -0
  41. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-3.html +817 -0
  42. package/docs/design/fixtures/runs/b-vs-c-baseline/runs.json +175 -0
  43. package/docs/design/fixtures/runs/b-vs-c-baseline/scorecard.json +138 -0
  44. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-1.html +373 -0
  45. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-2.html +398 -0
  46. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-3.html +595 -0
  47. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-1.html +531 -0
  48. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-2.html +565 -0
  49. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-3.html +674 -0
  50. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-1.html +388 -0
  51. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-2.html +463 -0
  52. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-3.html +568 -0
  53. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-1.html +562 -0
  54. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-2.html +618 -0
  55. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-3.html +618 -0
  56. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-1.html +364 -0
  57. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-2.html +420 -0
  58. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-3.html +506 -0
  59. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-1.html +527 -0
  60. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-2.html +445 -0
  61. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-3.html +483 -0
  62. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-1.html +611 -0
  63. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-2.html +594 -0
  64. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-3.html +817 -0
  65. package/docs/design/fixtures/runs/full-abc/runs.json +190 -0
  66. package/docs/design/fixtures/runs/full-abc/scorecard.json +144 -0
  67. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-1.html +496 -0
  68. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-2.html +447 -0
  69. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-3.html +564 -0
  70. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-1.html +373 -0
  71. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-2.html +398 -0
  72. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-3.html +595 -0
  73. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-1.html +622 -0
  74. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-2.html +475 -0
  75. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-3.html +660 -0
  76. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-1.html +531 -0
  77. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-2.html +565 -0
  78. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-3.html +674 -0
  79. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-1.html +525 -0
  80. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-2.html +446 -0
  81. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-3.html +463 -0
  82. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-1.html +388 -0
  83. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-2.html +463 -0
  84. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-3.html +568 -0
  85. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-1.html +1068 -0
  86. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-2.html +1423 -0
  87. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-3.html +1245 -0
  88. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-1.html +305 -0
  89. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-2.html +327 -0
  90. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-3.html +428 -0
  91. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-1.html +1270 -0
  92. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-2.html +1172 -0
  93. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-3.html +1532 -0
  94. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-1.html +315 -0
  95. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-2.html +342 -0
  96. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-3.html +353 -0
  97. package/docs/design/fixtures/runs/full-abc-opus/runs.json +190 -0
  98. package/docs/design/fixtures/runs/full-abc-opus/scorecard.json +144 -0
  99. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-1.html +345 -0
  100. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-2.html +396 -0
  101. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-3.html +502 -0
  102. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-1.html +408 -0
  103. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-2.html +446 -0
  104. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-3.html +496 -0
  105. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-1.html +813 -0
  106. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-2.html +711 -0
  107. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-3.html +721 -0
  108. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-1.html +280 -0
  109. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-2.html +291 -0
  110. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-3.html +366 -0
  111. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-1.html +1010 -0
  112. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-2.html +836 -0
  113. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-3.html +930 -0
  114. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-1.html +407 -0
  115. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-2.html +396 -0
  116. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-3.html +529 -0
  117. package/docs/design/foundations/brutalist.css +294 -0
  118. package/docs/design/foundations/editorial.css +300 -0
  119. package/docs/design/foundations/minimal-luxury.css +295 -0
  120. package/docs/design/foundations/technical.css +293 -0
  121. package/docs/design/foundations/warm-photo.css +299 -0
  122. package/docs/design/reference-corpus.md +1726 -0
  123. package/docs/design/render-critique-loop.md +57 -0
  124. package/docs/spec-graph-schema.md +397 -0
  125. package/package.json +1 -1
  126. package/scripts/bench-scorecard.mjs +239 -0
  127. package/scripts/build-spec-graph.mjs +509 -0
  128. package/scripts/check-native-conflicts.sh +200 -0
  129. package/scripts/classify-lane.sh +0 -7
  130. package/scripts/design-system-lint.mjs +993 -0
  131. package/scripts/graph-query.sh +486 -0
  132. package/scripts/transition-label.sh +10 -2
  133. package/scripts/validate-spec-graph.sh +423 -0
  134. package/templates/workflows/forgedock-review.yml +96 -0
@@ -0,0 +1,446 @@
1
+ <!--
2
+ ARCHETYPE: bold-brutalist
3
+ RATIONALE: Voltage's value proposition is confident and clear — serious compute, zero ops
4
+ overhead. Brutalism externalizes that confidence. The stark geometry and heavy type
5
+ signal "we know what we are" — which earns trust with ML engineers who are skeptical
6
+ of over-polished marketing. The loudness IS the message: this thing is powerful.
7
+ SIGNATURE MOVE: The page opens with a massive, full-bleed typographic hero where the
8
+ headline is split across color blocks — "SERIOUS" on black, "COMPUTE." on electric
9
+ yellow. Below it, a single code sample is printed at hero-scale, treated as artwork.
10
+ The layout uses visible grid lines as structural elements (neo-brutalist ruled lines).
11
+ EFFECTS PLAN:
12
+ - Color: #0d0d0d near-black, #F5FF3C electric yellow (the single loud accent), #FFFFFF white
13
+ - Type: Space Grotesk (heavy, blunt) for display — it has brutalist personality without
14
+ being unreadable. JetBrains Mono for all code.
15
+ - Layout: explicit 8-column grid with visible column rules as thin yellow lines
16
+ - Hover states: yellow underlines that animate width 0→100% left-to-right
17
+ - Section separators: thick #F5FF3C bars at full viewport width (not contained)
18
+ - The code block is oversized, treated as an image not a sidebar element
19
+ - No gradients, no shadows, no rounded corners (except where functionally necessary)
20
+ - Button: solid yellow, black text, no border-radius — punchy rectangle
21
+ NEGATIVES CHECKED:
22
+ N1 - No lorem ipsum — all copy is product-specific
23
+ N2 - Hero not generic — "Serious compute. Zero ops." is specific, arguable, ownable
24
+ N3 - No placeholder images — code IS the imagery
25
+ N4 - Archetype signals consistent — no soft drop shadows or pastel gradients
26
+ N5 - Not centered-everything — hero and content is left-anchored
27
+ N6 - Palette disciplined: #0d0d0d, #F5FF3C, #FFFFFF only. No blues, no grays beyond #666
28
+ N7 - Two typefaces only: Space Grotesk + JetBrains Mono
29
+ N8 - CTA is "Run your first function" not "Get started" or "Learn more"
30
+ N9 - No wall of text — copy is punchy, declarative, short sentences
31
+ N10 - Hero communicates OUTCOME: "write Python, get GPU compute" is immediately clear
32
+ N11 - Brutalist density is intentional — every dense element earns its place
33
+ N12 - Mobile-considered: stack columns, font sizes scale down responsively
34
+ -->
35
+ <!DOCTYPE html>
36
+ <html lang="en">
37
+ <head>
38
+ <meta charset="UTF-8" />
39
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
40
+ <title>Voltage — GPU Compute Without the Ops</title>
41
+ <script src="https://cdn.tailwindcss.com"></script>
42
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
43
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
44
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet" />
45
+ <script>
46
+ tailwind.config = {
47
+ theme: {
48
+ extend: {
49
+ fontFamily: {
50
+ display: ['Space Grotesk', 'sans-serif'],
51
+ mono: ['JetBrains Mono', 'monospace'],
52
+ },
53
+ colors: {
54
+ brut: {
55
+ black: '#0d0d0d',
56
+ yellow: '#F5FF3C',
57
+ white: '#FFFFFF',
58
+ gray: '#666666',
59
+ lightgray: '#AAAAAA',
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ </script>
66
+ <style>
67
+ * { box-sizing: border-box; }
68
+ body {
69
+ background: #0d0d0d;
70
+ color: #FFFFFF;
71
+ font-family: 'Space Grotesk', sans-serif;
72
+ overflow-x: hidden;
73
+ }
74
+
75
+ /* Syntax highlighting */
76
+ .k { color: #F5FF3C; } /* keyword / decorator */
77
+ .fn { color: #FFFFFF; font-weight: 700; } /* function name */
78
+ .s { color: #AAAAAA; } /* string */
79
+ .n { color: #F5FF3C; } /* number */
80
+ .c { color: #555555; } /* comment */
81
+ .p { color: #888888; } /* punctuation */
82
+
83
+ /* Animated underline on links */
84
+ .brut-link {
85
+ position: relative;
86
+ text-decoration: none;
87
+ }
88
+ .brut-link::after {
89
+ content: '';
90
+ position: absolute;
91
+ bottom: -2px;
92
+ left: 0;
93
+ width: 0;
94
+ height: 2px;
95
+ background: #F5FF3C;
96
+ transition: width 0.2s ease-out;
97
+ }
98
+ .brut-link:hover::after { width: 100%; }
99
+
100
+ /* Full-bleed yellow bar */
101
+ .full-bleed-bar {
102
+ width: 100vw;
103
+ margin-left: calc(-50vw + 50%);
104
+ background: #F5FF3C;
105
+ height: 4px;
106
+ }
107
+
108
+ /* Thin column rules */
109
+ .col-rule {
110
+ border-left: 1px solid rgba(245, 255, 60, 0.15);
111
+ }
112
+
113
+ /* Cursor blink */
114
+ @keyframes blink { 50% { opacity: 0; } }
115
+ .cursor { animation: blink 1s step-end infinite; color: #F5FF3C; }
116
+
117
+ /* Hover state: feature boxes */
118
+ .feat-box {
119
+ border: 1px solid #333;
120
+ transition: border-color 0.15s ease, background 0.15s ease;
121
+ }
122
+ .feat-box:hover {
123
+ border-color: #F5FF3C;
124
+ background: #111;
125
+ }
126
+
127
+ /* Big code block */
128
+ .hero-code {
129
+ font-family: 'JetBrains Mono', monospace;
130
+ line-height: 1.65;
131
+ tab-size: 4;
132
+ }
133
+ </style>
134
+ </head>
135
+ <body class="antialiased">
136
+
137
+ <!-- NAV -->
138
+ <nav class="border-b-2 border-[#F5FF3C] px-6 sm:px-10 h-14 flex items-center justify-between">
139
+ <a href="#" class="font-display font-bold text-lg tracking-tight text-white flex items-center gap-2">
140
+ <span class="text-[#F5FF3C]">⚡</span> VOLTAGE
141
+ </a>
142
+ <div class="flex items-center gap-6">
143
+ <div class="hidden md:flex gap-6 font-mono text-xs text-[#666]">
144
+ <a href="#" class="brut-link hover:text-white transition-colors">docs</a>
145
+ <a href="#" class="brut-link hover:text-white transition-colors">pricing</a>
146
+ <a href="#" class="brut-link hover:text-white transition-colors">examples</a>
147
+ </div>
148
+ <a href="#" class="font-mono text-xs font-bold bg-[#F5FF3C] text-[#0d0d0d] px-4 py-2 hover:bg-white transition-colors">
149
+ START FREE →
150
+ </a>
151
+ </div>
152
+ </nav>
153
+
154
+ <!-- HERO -->
155
+ <section class="px-6 sm:px-10 pt-16 pb-0">
156
+
157
+ <!-- Massive typographic hero -->
158
+ <div class="mb-0">
159
+ <div class="flex flex-col sm:flex-row sm:items-start gap-0 sm:gap-8 mb-4">
160
+ <div>
161
+ <div class="font-display font-bold leading-none text-[clamp(3rem,9vw,8rem)] text-white tracking-tight">
162
+ SERIOUS
163
+ </div>
164
+ <div class="font-display font-bold leading-none text-[clamp(3rem,9vw,8rem)] text-[#F5FF3C] tracking-tight">
165
+ COMPUTE.
166
+ </div>
167
+ <div class="font-display font-bold leading-none text-[clamp(3rem,9vw,8rem)] text-white tracking-tight">
168
+ ZERO OPS.
169
+ </div>
170
+ </div>
171
+ </div>
172
+
173
+ <div class="max-w-xl mt-8 mb-10">
174
+ <p class="font-display text-base sm:text-lg text-[#AAAAAA] leading-relaxed">
175
+ Python functions running on GPUs in the cloud. Write ordinary code.
176
+ Add a decorator. Call <code class="font-mono text-[#F5FF3C] text-sm">.remote()</code>.
177
+ It scales from zero to 10,000 containers. Billed by the second.
178
+ </p>
179
+ </div>
180
+
181
+ <div class="flex flex-wrap gap-4 mb-16">
182
+ <a href="#" class="font-mono text-sm font-bold bg-[#F5FF3C] text-[#0d0d0d] px-8 py-4 hover:bg-white transition-colors">
183
+ RUN YOUR FIRST FUNCTION →
184
+ </a>
185
+ <a href="#" class="font-mono text-sm border border-[#333] text-[#666] px-8 py-4 hover:border-[#F5FF3C] hover:text-white transition-colors">
186
+ VIEW EXAMPLES
187
+ </a>
188
+ </div>
189
+ </div>
190
+ </section>
191
+
192
+ <!-- FULL BLEED BAR -->
193
+ <div class="full-bleed-bar"></div>
194
+
195
+ <!-- HERO CODE — full section, code as art -->
196
+ <section class="bg-[#111] border-b-2 border-[#F5FF3C]">
197
+ <div class="px-6 sm:px-10 py-12">
198
+ <div class="flex items-center justify-between mb-6">
199
+ <span class="font-mono text-xs text-[#555] uppercase tracking-widest">train.py</span>
200
+ <span class="font-mono text-xs text-[#F5FF3C]">← this is all you write</span>
201
+ </div>
202
+
203
+ <!-- Big code block -->
204
+ <div class="hero-code text-sm sm:text-base overflow-x-auto">
205
+ <div class="c"># Voltage: serverless GPU compute for Python</div>
206
+ <div class="c"># pip install voltage</div>
207
+ <div class="mt-4"><span class="k">import</span> <span class="fn">voltage</span></div>
208
+ <div class="mt-4">
209
+ <span class="k">@voltage.function(</span>
210
+ </div>
211
+ <div class="pl-8"><span class="k">gpu=</span><span class="s">"A100"</span><span class="p">,</span>
212
+ <span class="c"> # A100, H100, L40S</span>
213
+ </div>
214
+ <div class="pl-8"><span class="k">memory=</span><span class="s">"80GB"</span><span class="p">,</span></div>
215
+ <div class="pl-8"><span class="k">concurrency=</span><span class="n">512</span><span class="p">,</span>
216
+ <span class="c"> # up to 10,000</span>
217
+ </div>
218
+ <div><span class="k">)</span></div>
219
+ <div class="mt-1">
220
+ <span class="k">def</span> <span class="fn">train_model</span><span class="p">(</span><span class="fn">dataset</span><span class="p">:</span> <span class="fn">str</span><span class="p">)</span> <span class="p">-></span> <span class="fn">dict</span><span class="p">:</span>
221
+ </div>
222
+ <div class="pl-8 text-[#AAAAAA]">model = <span class="fn">load_model</span><span class="p">()</span></div>
223
+ <div class="pl-8 text-[#AAAAAA]"><span class="k">return</span> <span class="fn">model.fit</span><span class="p">(</span>dataset<span class="p">)</span></div>
224
+
225
+ <div class="mt-6 border-t border-[#222] pt-6">
226
+ <div class="c"># Invoke from anywhere — laptop, CI, another function</div>
227
+ <div class="mt-2 text-[#AAAAAA]">result = <span class="fn">train_model</span><span class="p">.</span><span class="k">remote</span><span class="p">(</span><span class="s">"/data/imagenet"</span><span class="p">)</span></div>
228
+ <div class="mt-1 text-[#AAAAAA]">results = <span class="fn">train_model</span><span class="p">.</span><span class="k">map</span><span class="p">(</span>dataset_shards<span class="p">, </span><span class="k">concurrency=</span><span class="n">1000</span><span class="p">)</span></div>
229
+ </div>
230
+
231
+ <div class="mt-6 border-t border-[#222] pt-6 text-sm">
232
+ <div class="text-[#F5FF3C]">✓ container provisioned (138ms)</div>
233
+ <div class="text-[#F5FF3C] mt-1">✓ A100 attached — 0% → 94% GPU utilization</div>
234
+ <div class="text-[#F5FF3C] mt-1">✓ training... epoch 1/10 · loss: 2.847<span class="cursor">▌</span></div>
235
+ </div>
236
+ </div>
237
+ </div>
238
+ </section>
239
+
240
+ <!-- STATS BAR -->
241
+ <section class="border-b border-[#222] bg-[#0d0d0d]">
242
+ <div class="px-6 sm:px-10 py-10">
243
+ <div class="grid grid-cols-2 sm:grid-cols-4 gap-0">
244
+ <div class="border-r border-[#222] pr-8 pb-6 sm:pb-0">
245
+ <div class="font-display font-bold text-4xl text-white">10K</div>
246
+ <div class="font-mono text-xs text-[#555] mt-1">max containers per job</div>
247
+ </div>
248
+ <div class="border-r border-[#222] px-8 pb-6 sm:pb-0">
249
+ <div class="font-display font-bold text-4xl text-[#F5FF3C]">&lt;200</div>
250
+ <div class="font-mono text-xs text-[#555] mt-1">millisecond cold start</div>
251
+ </div>
252
+ <div class="border-r border-[#222] px-8 pt-6 sm:pt-0">
253
+ <div class="font-display font-bold text-4xl text-white">$0</div>
254
+ <div class="font-mono text-xs text-[#555] mt-1">cost when idle</div>
255
+ </div>
256
+ <div class="pl-8 pt-6 sm:pt-0">
257
+ <div class="font-display font-bold text-4xl text-white">1s</div>
258
+ <div class="font-mono text-xs text-[#555] mt-1">billing granularity</div>
259
+ </div>
260
+ </div>
261
+ </div>
262
+ </section>
263
+
264
+ <!-- FULL BLEED BAR -->
265
+ <div class="full-bleed-bar"></div>
266
+
267
+ <!-- FEATURES -->
268
+ <section class="px-6 sm:px-10 py-16">
269
+ <div class="mb-10">
270
+ <span class="font-mono text-xs text-[#F5FF3C] uppercase tracking-widest">what it does</span>
271
+ </div>
272
+
273
+ <div class="grid sm:grid-cols-2 gap-4">
274
+
275
+ <div class="feat-box p-6">
276
+ <div class="font-mono text-xs text-[#F5FF3C] mb-3 uppercase">GPU compute</div>
277
+ <h3 class="font-display font-bold text-xl text-white mb-2">A100s. H100s. L40S.<br/>Pick in a decorator.</h3>
278
+ <p class="text-[#666] text-sm leading-relaxed">
279
+ No GPU instances to reserve. No hours-long setup. Specify the GPU you need
280
+ as a string argument. Voltage provisions it in under 200ms, attaches it to your
281
+ function, and bills to the second.
282
+ </p>
283
+ </div>
284
+
285
+ <div class="feat-box p-6">
286
+ <div class="font-mono text-xs text-[#F5FF3C] mb-3 uppercase">Parallel scale</div>
287
+ <h3 class="font-display font-bold text-xl text-white mb-2">5,000 containers.<br/>One .map() call.</h3>
288
+ <p class="text-[#666] text-sm leading-relaxed">
289
+ Submit a list of inputs. Voltage fans them across thousands of parallel containers,
290
+ collects results, returns them in order. No queue infrastructure. No autoscaling
291
+ policy. No retry logic to write.
292
+ </p>
293
+ </div>
294
+
295
+ <div class="feat-box p-6">
296
+ <div class="font-mono text-xs text-[#F5FF3C] mb-3 uppercase">Inference endpoints</div>
297
+ <h3 class="font-display font-bold text-xl text-white mb-2">One decorator.<br/>One HTTP endpoint.</h3>
298
+ <p class="text-[#666] text-sm leading-relaxed">
299
+ Swap <code class="font-mono text-[#F5FF3C] text-xs">@voltage.function</code> for
300
+ <code class="font-mono text-[#F5FF3C] text-xs">@voltage.endpoint</code>. Your model
301
+ gets a URL. Scales to traffic. Scales to zero at idle. No load balancers to
302
+ configure, no Kubernetes operators.
303
+ </p>
304
+ </div>
305
+
306
+ <div class="feat-box p-6">
307
+ <div class="font-mono text-xs text-[#F5FF3C] mb-3 uppercase">Scheduling</div>
308
+ <h3 class="font-display font-bold text-xl text-white mb-2">Cron jobs.<br/>Nightly retraining.</h3>
309
+ <p class="text-[#666] text-sm leading-relaxed">
310
+ Schedule any Voltage function with a cron expression. Trigger from CI, webhooks,
311
+ or other functions. Data pipelines, model evals, batch embedding jobs — all in
312
+ Python, all tracked in the Voltage dashboard.
313
+ </p>
314
+ </div>
315
+
316
+ </div>
317
+ </section>
318
+
319
+ <!-- FULL BLEED BAR -->
320
+ <div class="full-bleed-bar"></div>
321
+
322
+ <!-- WHO IS IT FOR -->
323
+ <section class="px-6 sm:px-10 py-16 bg-[#111]">
324
+ <div class="mb-10">
325
+ <span class="font-mono text-xs text-[#F5FF3C] uppercase tracking-widest">who uses voltage</span>
326
+ </div>
327
+
328
+ <div class="grid sm:grid-cols-3 gap-8">
329
+ <div>
330
+ <div class="font-display font-bold text-lg text-white mb-3">ML Engineers</div>
331
+ <p class="text-[#666] text-sm leading-relaxed">
332
+ Training runs, hyperparameter sweeps, distributed fine-tuning.
333
+ No more "can I borrow the GPU cluster" conversations.
334
+ </p>
335
+ </div>
336
+ <div class="sm:border-l border-[#222] sm:pl-8">
337
+ <div class="font-display font-bold text-lg text-white mb-3">Data Scientists</div>
338
+ <p class="text-[#666] text-sm leading-relaxed">
339
+ Parallelize data processing, feature engineering, model evaluation.
340
+ Write Python. Let Voltage handle the infrastructure.
341
+ </p>
342
+ </div>
343
+ <div class="sm:border-l border-[#222] sm:pl-8">
344
+ <div class="font-display font-bold text-lg text-white mb-3">Backend Engineers</div>
345
+ <p class="text-[#666] text-sm leading-relaxed">
346
+ Offload compute-heavy work — embedding generation, image processing,
347
+ PDF parsing — without standing up dedicated worker infrastructure.
348
+ </p>
349
+ </div>
350
+ </div>
351
+ </section>
352
+
353
+ <!-- FULL BLEED BAR -->
354
+ <div class="full-bleed-bar"></div>
355
+
356
+ <!-- PRICING SIGNAL -->
357
+ <section class="px-6 sm:px-10 py-16">
358
+ <div class="mb-10">
359
+ <span class="font-mono text-xs text-[#F5FF3C] uppercase tracking-widest">pricing</span>
360
+ </div>
361
+ <div class="max-w-2xl">
362
+ <p class="font-display font-bold text-2xl sm:text-3xl text-white mb-4">
363
+ You pay while it runs.<br/>
364
+ Not while it sits idle.
365
+ </p>
366
+ <p class="text-[#666] mb-8 leading-relaxed">
367
+ Per-second billing. No reserved instances. No minimum spend.
368
+ GPUs from $2.49/hr, billed to the millisecond when your function
369
+ is executing. $0 when it's not.
370
+ </p>
371
+
372
+ <div class="font-mono text-sm border border-[#222] divide-y divide-[#222]">
373
+ <div class="flex justify-between px-5 py-3">
374
+ <span class="text-[#666]">NVIDIA A100 (80GB)</span>
375
+ <span class="text-white">$2.49 / hr</span>
376
+ </div>
377
+ <div class="flex justify-between px-5 py-3">
378
+ <span class="text-[#666]">NVIDIA H100 (80GB)</span>
379
+ <span class="text-white">$3.89 / hr</span>
380
+ </div>
381
+ <div class="flex justify-between px-5 py-3">
382
+ <span class="text-[#666]">NVIDIA L40S (48GB)</span>
383
+ <span class="text-white">$1.79 / hr</span>
384
+ </div>
385
+ <div class="flex justify-between px-5 py-3">
386
+ <span class="text-[#666]">CPU (per vCPU)</span>
387
+ <span class="text-white">$0.018 / hr</span>
388
+ </div>
389
+ <div class="flex justify-between px-5 py-3 bg-[#111]">
390
+ <span class="text-[#F5FF3C]">Idle cost</span>
391
+ <span class="text-[#F5FF3C] font-bold">$0.00</span>
392
+ </div>
393
+ </div>
394
+ </div>
395
+ </section>
396
+
397
+ <!-- CTA -->
398
+ <section class="border-t-2 border-[#F5FF3C] bg-[#F5FF3C]">
399
+ <div class="px-6 sm:px-10 py-16">
400
+ <div class="max-w-3xl">
401
+ <div class="font-mono text-xs text-[#0d0d0d] uppercase tracking-widest mb-4">
402
+ get started
403
+ </div>
404
+ <h2 class="font-display font-bold text-4xl sm:text-5xl text-[#0d0d0d] mb-6 leading-tight">
405
+ Run your first<br/>function today.
406
+ </h2>
407
+ <p class="font-display text-[#333] text-base mb-8 max-w-lg">
408
+ Install the SDK. Decorate a function. Call <code class="font-mono text-sm">.remote()</code>.
409
+ Your code is running on a GPU in the cloud. That's it.
410
+ </p>
411
+
412
+ <div class="font-mono text-sm bg-[#0d0d0d] text-[#F5FF3C] p-4 rounded mb-6 inline-block">
413
+ $ pip install voltage
414
+ </div>
415
+
416
+ <div class="flex flex-wrap gap-4">
417
+ <a href="#" class="font-mono text-sm font-bold bg-[#0d0d0d] text-[#F5FF3C] px-8 py-4 hover:bg-[#111] transition-colors">
418
+ RUN YOUR FIRST FUNCTION →
419
+ </a>
420
+ <a href="#" class="font-mono text-sm font-bold border-2 border-[#0d0d0d] text-[#0d0d0d] px-8 py-4 hover:bg-[#0d0d0d] hover:text-[#F5FF3C] transition-colors">
421
+ READ THE DOCS
422
+ </a>
423
+ </div>
424
+ </div>
425
+ </div>
426
+ </section>
427
+
428
+ <!-- FOOTER -->
429
+ <footer class="border-t border-[#222] px-6 sm:px-10 py-10 bg-[#0d0d0d]">
430
+ <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
431
+ <div class="font-display font-bold text-white flex items-center gap-2">
432
+ <span class="text-[#F5FF3C]">⚡</span> VOLTAGE
433
+ </div>
434
+ <div class="flex flex-wrap gap-6 font-mono text-xs text-[#555]">
435
+ <a href="#" class="brut-link hover:text-[#AAA] transition-colors">docs</a>
436
+ <a href="#" class="brut-link hover:text-[#AAA] transition-colors">status</a>
437
+ <a href="#" class="brut-link hover:text-[#AAA] transition-colors">pricing</a>
438
+ <a href="#" class="brut-link hover:text-[#AAA] transition-colors">github</a>
439
+ <a href="#" class="brut-link hover:text-[#AAA] transition-colors">discord</a>
440
+ </div>
441
+ <div class="font-mono text-xs text-[#333]">© 2024 Voltage Inc.</div>
442
+ </div>
443
+ </footer>
444
+
445
+ </body>
446
+ </html>