forgedock 1.0.17 → 1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) 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/qa-sweep.md +37 -2
  11. package/commands/quality-gate.md +30 -0
  12. package/commands/review-pr-staging.md +158 -2
  13. package/commands/test-gate.md +929 -0
  14. package/commands/work-on/build/implement.md +5 -3
  15. package/commands/work-on.md +53 -3
  16. package/docs/CI.md +177 -0
  17. package/docs/FORGE-PROTOCOL.md +324 -0
  18. package/docs/articles/b-vs-c-baseline.md +210 -0
  19. package/docs/articles/full-abc-benchmark.md +205 -0
  20. package/docs/articles/selective-spec-loading-token-savings.md +140 -0
  21. package/docs/design/abc-benchmark.md +195 -0
  22. package/docs/design/design-architect-rationale.md +123 -0
  23. package/docs/design/design-memory.md +61 -0
  24. package/docs/design/design-spec-schema.md +248 -0
  25. package/docs/design/design-system-lint.md +150 -0
  26. package/docs/design/divergent-generation.md +106 -0
  27. package/docs/design/effects-appropriateness.md +133 -0
  28. package/docs/design/fixtures/briefs/README.md +47 -0
  29. package/docs/design/fixtures/briefs/cadence.md +39 -0
  30. package/docs/design/fixtures/briefs/plume.md +39 -0
  31. package/docs/design/fixtures/briefs/slipstream.md +39 -0
  32. package/docs/design/fixtures/briefs/tender.md +39 -0
  33. package/docs/design/fixtures/briefs/voltage.md +39 -0
  34. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-1.html +364 -0
  35. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-2.html +420 -0
  36. package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-3.html +506 -0
  37. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-1.html +611 -0
  38. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-2.html +594 -0
  39. package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-3.html +817 -0
  40. package/docs/design/fixtures/runs/b-vs-c-baseline/runs.json +175 -0
  41. package/docs/design/fixtures/runs/b-vs-c-baseline/scorecard.json +138 -0
  42. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-1.html +373 -0
  43. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-2.html +398 -0
  44. package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-3.html +595 -0
  45. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-1.html +531 -0
  46. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-2.html +565 -0
  47. package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-3.html +674 -0
  48. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-1.html +388 -0
  49. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-2.html +463 -0
  50. package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-3.html +568 -0
  51. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-1.html +562 -0
  52. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-2.html +618 -0
  53. package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-3.html +618 -0
  54. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-1.html +364 -0
  55. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-2.html +420 -0
  56. package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-3.html +506 -0
  57. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-1.html +527 -0
  58. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-2.html +445 -0
  59. package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-3.html +483 -0
  60. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-1.html +611 -0
  61. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-2.html +594 -0
  62. package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-3.html +817 -0
  63. package/docs/design/fixtures/runs/full-abc/runs.json +190 -0
  64. package/docs/design/fixtures/runs/full-abc/scorecard.json +144 -0
  65. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-1.html +496 -0
  66. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-2.html +447 -0
  67. package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-3.html +564 -0
  68. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-1.html +373 -0
  69. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-2.html +398 -0
  70. package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-3.html +595 -0
  71. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-1.html +622 -0
  72. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-2.html +475 -0
  73. package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-3.html +660 -0
  74. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-1.html +531 -0
  75. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-2.html +565 -0
  76. package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-3.html +674 -0
  77. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-1.html +525 -0
  78. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-2.html +446 -0
  79. package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-3.html +463 -0
  80. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-1.html +388 -0
  81. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-2.html +463 -0
  82. package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-3.html +568 -0
  83. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-1.html +1068 -0
  84. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-2.html +1423 -0
  85. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-3.html +1245 -0
  86. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-1.html +305 -0
  87. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-2.html +327 -0
  88. package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-3.html +428 -0
  89. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-1.html +1270 -0
  90. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-2.html +1172 -0
  91. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-3.html +1532 -0
  92. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-1.html +315 -0
  93. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-2.html +342 -0
  94. package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-3.html +353 -0
  95. package/docs/design/fixtures/runs/full-abc-opus/runs.json +190 -0
  96. package/docs/design/fixtures/runs/full-abc-opus/scorecard.json +144 -0
  97. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-1.html +345 -0
  98. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-2.html +396 -0
  99. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-3.html +502 -0
  100. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-1.html +408 -0
  101. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-2.html +446 -0
  102. package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-3.html +496 -0
  103. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-1.html +813 -0
  104. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-2.html +711 -0
  105. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-3.html +721 -0
  106. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-1.html +280 -0
  107. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-2.html +291 -0
  108. package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-3.html +366 -0
  109. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-1.html +1010 -0
  110. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-2.html +836 -0
  111. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-3.html +930 -0
  112. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-1.html +407 -0
  113. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-2.html +396 -0
  114. package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-3.html +529 -0
  115. package/docs/design/foundations/brutalist.css +294 -0
  116. package/docs/design/foundations/editorial.css +300 -0
  117. package/docs/design/foundations/minimal-luxury.css +295 -0
  118. package/docs/design/foundations/technical.css +293 -0
  119. package/docs/design/foundations/warm-photo.css +299 -0
  120. package/docs/design/reference-corpus.md +1726 -0
  121. package/docs/design/render-critique-loop.md +57 -0
  122. package/docs/spec-graph-schema.md +397 -0
  123. package/package.json +1 -1
  124. package/scripts/bench-scorecard.mjs +239 -0
  125. package/scripts/build-spec-graph.mjs +509 -0
  126. package/scripts/classify-lane.sh +0 -7
  127. package/scripts/design-system-lint.mjs +993 -0
  128. package/scripts/graph-query.sh +486 -0
  129. package/scripts/transition-label.sh +10 -2
  130. package/scripts/validate-spec-graph.sh +423 -0
  131. package/templates/workflows/forgedock-review.yml +96 -0
@@ -0,0 +1,407 @@
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>Voltage — Serverless GPU Compute for AI</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
8
+ <style>
9
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
10
+ :root {
11
+ --bg: #0a0a0f;
12
+ --surface: #12121a;
13
+ --border: #1e1e2e;
14
+ --text: #e4e4ef;
15
+ --text-muted: #8888a0;
16
+ --accent: #f0c040;
17
+ --accent-dim: #f0c04020;
18
+ --green: #4ade80;
19
+ --blue: #60a5fa;
20
+ --purple: #a78bfa;
21
+ --pink: #f472b6;
22
+ }
23
+ body {
24
+ font-family: 'Inter', sans-serif;
25
+ background: var(--bg);
26
+ color: var(--text);
27
+ line-height: 1.6;
28
+ overflow-x: hidden;
29
+ }
30
+ a { color: var(--accent); text-decoration: none; }
31
+
32
+ /* NAV */
33
+ nav {
34
+ position: fixed; top: 0; left: 0; right: 0; z-index: 100;
35
+ display: flex; align-items: center; justify-content: space-between;
36
+ padding: 16px 48px;
37
+ background: rgba(10,10,15,0.85);
38
+ backdrop-filter: blur(12px);
39
+ border-bottom: 1px solid var(--border);
40
+ }
41
+ .logo {
42
+ font-weight: 800; font-size: 20px; letter-spacing: -0.5px;
43
+ display: flex; align-items: center; gap: 8px;
44
+ }
45
+ .logo-icon {
46
+ width: 28px; height: 28px; background: var(--accent);
47
+ border-radius: 6px; display: flex; align-items: center; justify-content: center;
48
+ font-size: 16px; color: #000; font-weight: 800;
49
+ }
50
+ nav ul { list-style: none; display: flex; gap: 32px; }
51
+ nav ul a { color: var(--text-muted); font-size: 14px; font-weight: 500; transition: color 0.2s; }
52
+ nav ul a:hover { color: var(--text); }
53
+ .nav-cta {
54
+ background: var(--accent); color: #000; padding: 8px 20px;
55
+ border-radius: 6px; font-weight: 600; font-size: 14px; transition: opacity 0.2s;
56
+ }
57
+ .nav-cta:hover { opacity: 0.85; }
58
+
59
+ /* HERO */
60
+ .hero {
61
+ min-height: 100vh; display: flex; align-items: center;
62
+ padding: 120px 48px 80px;
63
+ max-width: 1440px; margin: 0 auto;
64
+ gap: 64px;
65
+ }
66
+ .hero-left { flex: 1; max-width: 540px; }
67
+ .hero-right { flex: 1; min-width: 0; }
68
+ .hero-badge {
69
+ display: inline-flex; align-items: center; gap: 8px;
70
+ background: var(--accent-dim); border: 1px solid var(--accent);
71
+ border-radius: 100px; padding: 6px 16px;
72
+ font-size: 13px; font-weight: 600; color: var(--accent);
73
+ margin-bottom: 28px;
74
+ }
75
+ .hero h1 {
76
+ font-size: 56px; font-weight: 800; line-height: 1.1;
77
+ letter-spacing: -2px; margin-bottom: 24px;
78
+ }
79
+ .hero h1 span { color: var(--accent); }
80
+ .hero p {
81
+ font-size: 18px; color: var(--text-muted); line-height: 1.7;
82
+ margin-bottom: 36px; max-width: 480px;
83
+ }
84
+ .cta-group { display: flex; gap: 16px; align-items: center; }
85
+ .btn-primary {
86
+ background: var(--accent); color: #000; padding: 14px 32px;
87
+ border-radius: 8px; font-weight: 700; font-size: 16px;
88
+ border: none; cursor: pointer; transition: transform 0.15s, opacity 0.2s;
89
+ display: inline-block;
90
+ }
91
+ .btn-primary:hover { transform: translateY(-1px); opacity: 0.9; }
92
+ .btn-secondary {
93
+ background: transparent; color: var(--text); padding: 14px 32px;
94
+ border-radius: 8px; font-weight: 600; font-size: 16px;
95
+ border: 1px solid var(--border); cursor: pointer; transition: border-color 0.2s;
96
+ display: inline-block;
97
+ }
98
+ .btn-secondary:hover { border-color: var(--text-muted); }
99
+
100
+ /* CODE BLOCK */
101
+ .code-window {
102
+ background: var(--surface); border: 1px solid var(--border);
103
+ border-radius: 12px; overflow: hidden;
104
+ box-shadow: 0 24px 80px rgba(0,0,0,0.5);
105
+ }
106
+ .code-titlebar {
107
+ display: flex; align-items: center; gap: 8px;
108
+ padding: 12px 16px; border-bottom: 1px solid var(--border);
109
+ }
110
+ .dot { width: 10px; height: 10px; border-radius: 50%; }
111
+ .dot-r { background: #ef4444; }
112
+ .dot-y { background: #eab308; }
113
+ .dot-g { background: #22c55e; }
114
+ .code-filename {
115
+ margin-left: 12px; font-family: 'JetBrains Mono', monospace;
116
+ font-size: 12px; color: var(--text-muted);
117
+ }
118
+ .code-body {
119
+ padding: 24px; font-family: 'JetBrains Mono', monospace;
120
+ font-size: 13.5px; line-height: 1.8; overflow-x: auto;
121
+ }
122
+ .code-body .kw { color: var(--purple); }
123
+ .code-body .fn { color: var(--blue); }
124
+ .code-body .str { color: var(--green); }
125
+ .code-body .dec { color: var(--accent); }
126
+ .code-body .cm { color: var(--text-muted); }
127
+ .code-body .num { color: var(--pink); }
128
+
129
+ /* METRICS BAR */
130
+ .metrics {
131
+ max-width: 1440px; margin: 0 auto;
132
+ padding: 0 48px 80px;
133
+ display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
134
+ background: var(--border); border-radius: 12px; overflow: hidden;
135
+ }
136
+ .metric {
137
+ background: var(--surface); padding: 40px 32px; text-align: center;
138
+ }
139
+ .metric-value {
140
+ font-size: 42px; font-weight: 800; letter-spacing: -2px;
141
+ color: var(--accent);
142
+ }
143
+ .metric-label {
144
+ font-size: 14px; color: var(--text-muted); margin-top: 8px; font-weight: 500;
145
+ }
146
+
147
+ /* FEATURES */
148
+ .features {
149
+ max-width: 1440px; margin: 0 auto;
150
+ padding: 80px 48px 100px;
151
+ }
152
+ .features-header {
153
+ text-align: center; margin-bottom: 64px;
154
+ }
155
+ .features-header h2 {
156
+ font-size: 40px; font-weight: 800; letter-spacing: -1.5px; margin-bottom: 16px;
157
+ }
158
+ .features-header p {
159
+ font-size: 18px; color: var(--text-muted); max-width: 560px; margin: 0 auto;
160
+ }
161
+ .features-grid {
162
+ display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
163
+ }
164
+ .feature-card {
165
+ background: var(--surface); border: 1px solid var(--border);
166
+ border-radius: 12px; padding: 36px 32px;
167
+ transition: border-color 0.3s;
168
+ }
169
+ .feature-card:hover { border-color: var(--accent); }
170
+ .feature-icon {
171
+ width: 44px; height: 44px; border-radius: 10px;
172
+ display: flex; align-items: center; justify-content: center;
173
+ font-size: 20px; margin-bottom: 20px;
174
+ background: var(--accent-dim); color: var(--accent);
175
+ }
176
+ .feature-card h3 {
177
+ font-size: 18px; font-weight: 700; margin-bottom: 12px;
178
+ }
179
+ .feature-card p {
180
+ font-size: 14px; color: var(--text-muted); line-height: 1.7;
181
+ }
182
+
183
+ /* HOW IT WORKS */
184
+ .how-section {
185
+ max-width: 1440px; margin: 0 auto;
186
+ padding: 80px 48px 100px;
187
+ border-top: 1px solid var(--border);
188
+ }
189
+ .how-section h2 {
190
+ font-size: 40px; font-weight: 800; letter-spacing: -1.5px;
191
+ text-align: center; margin-bottom: 64px;
192
+ }
193
+ .steps {
194
+ display: grid; grid-template-columns: repeat(3, 1fr); gap: 48px;
195
+ }
196
+ .step-num {
197
+ font-size: 64px; font-weight: 800; color: var(--accent);
198
+ opacity: 0.3; line-height: 1; margin-bottom: 16px;
199
+ }
200
+ .step h3 { font-size: 20px; font-weight: 700; margin-bottom: 12px; }
201
+ .step p { font-size: 14px; color: var(--text-muted); line-height: 1.7; }
202
+ .step code {
203
+ display: inline-block; margin-top: 12px;
204
+ font-family: 'JetBrains Mono', monospace;
205
+ font-size: 13px; background: var(--surface);
206
+ border: 1px solid var(--border); border-radius: 6px;
207
+ padding: 4px 10px; color: var(--green);
208
+ }
209
+
210
+ /* CTA */
211
+ .cta-section {
212
+ max-width: 1440px; margin: 0 auto;
213
+ padding: 100px 48px;
214
+ text-align: center;
215
+ }
216
+ .cta-box {
217
+ background: linear-gradient(135deg, #1a1a2e, #16162a);
218
+ border: 1px solid var(--border);
219
+ border-radius: 20px; padding: 80px 48px;
220
+ }
221
+ .cta-box h2 {
222
+ font-size: 44px; font-weight: 800; letter-spacing: -1.5px;
223
+ margin-bottom: 16px;
224
+ }
225
+ .cta-box p {
226
+ font-size: 18px; color: var(--text-muted); max-width: 500px;
227
+ margin: 0 auto 36px;
228
+ }
229
+ .cta-box .install-cmd {
230
+ display: inline-block; font-family: 'JetBrains Mono', monospace;
231
+ font-size: 15px; background: var(--surface);
232
+ border: 1px solid var(--border); border-radius: 8px;
233
+ padding: 12px 24px; color: var(--green); margin-top: 20px;
234
+ }
235
+
236
+ /* FOOTER */
237
+ footer {
238
+ border-top: 1px solid var(--border);
239
+ padding: 40px 48px; max-width: 1440px; margin: 0 auto;
240
+ display: flex; justify-content: space-between; align-items: center;
241
+ }
242
+ footer span { font-size: 13px; color: var(--text-muted); }
243
+ footer ul { list-style: none; display: flex; gap: 24px; }
244
+ footer ul a { font-size: 13px; color: var(--text-muted); }
245
+ footer ul a:hover { color: var(--text); }
246
+ </style>
247
+ </head>
248
+ <body>
249
+
250
+ <nav>
251
+ <div class="logo">
252
+ <div class="logo-icon">V</div>
253
+ Voltage
254
+ </div>
255
+ <ul>
256
+ <li><a href="#features">Features</a></li>
257
+ <li><a href="#how">How it works</a></li>
258
+ <li><a href="#">Docs</a></li>
259
+ <li><a href="#">Pricing</a></li>
260
+ </ul>
261
+ <a href="#" class="nav-cta">Get Started</a>
262
+ </nav>
263
+
264
+ <section class="hero">
265
+ <div class="hero-left">
266
+ <div class="hero-badge">Now available: H100 &amp; A100 GPUs on demand</div>
267
+ <h1>GPU compute that feels like <span>local Python</span></h1>
268
+ <p>Write a function. Add a decorator. Voltage runs it on cloud GPUs, scales to thousands of containers, and bills you only while code is executing. No clusters. No YAML. No idle costs.</p>
269
+ <div class="cta-group">
270
+ <a href="#" class="btn-primary">Run your first function</a>
271
+ <a href="#" class="btn-secondary">Read the docs</a>
272
+ </div>
273
+ </div>
274
+ <div class="hero-right">
275
+ <div class="code-window">
276
+ <div class="code-titlebar">
277
+ <div class="dot dot-r"></div>
278
+ <div class="dot dot-y"></div>
279
+ <div class="dot dot-g"></div>
280
+ <span class="code-filename">inference.py</span>
281
+ </div>
282
+ <div class="code-body">
283
+ <span class="kw">import</span> voltage<br>
284
+ <br>
285
+ <span class="dec">@voltage.function</span>(<br>
286
+ &nbsp;&nbsp;&nbsp;&nbsp;gpu=<span class="str">"A100-80GB"</span>,<br>
287
+ &nbsp;&nbsp;&nbsp;&nbsp;memory=<span class="num">32768</span>,<br>
288
+ &nbsp;&nbsp;&nbsp;&nbsp;timeout=<span class="num">300</span>,<br>
289
+ )<br>
290
+ <span class="kw">def</span> <span class="fn">generate_embeddings</span>(texts: list[str]):<br>
291
+ &nbsp;&nbsp;&nbsp;&nbsp;<span class="cm"># Runs on a cloud A100 — not your laptop</span><br>
292
+ &nbsp;&nbsp;&nbsp;&nbsp;<span class="kw">from</span> sentence_transformers <span class="kw">import</span> SentenceTransformer<br>
293
+ &nbsp;&nbsp;&nbsp;&nbsp;model = SentenceTransformer(<span class="str">"all-MiniLM-L6-v2"</span>)<br>
294
+ &nbsp;&nbsp;&nbsp;&nbsp;<span class="kw">return</span> model.encode(texts).tolist()<br>
295
+ <br>
296
+ <span class="cm"># Call it like any Python function</span><br>
297
+ result = generate_embeddings([<span class="str">"hello world"</span>])<br>
298
+ <span class="kw">print</span>(result) <span class="cm"># [[0.012, -0.034, ...]]</span>
299
+ </div>
300
+ </div>
301
+ </div>
302
+ </section>
303
+
304
+ <section class="metrics">
305
+ <div class="metric">
306
+ <div class="metric-value">&lt;500ms</div>
307
+ <div class="metric-label">Cold start (GPU containers)</div>
308
+ </div>
309
+ <div class="metric">
310
+ <div class="metric-value">10,000+</div>
311
+ <div class="metric-label">Concurrent containers</div>
312
+ </div>
313
+ <div class="metric">
314
+ <div class="metric-value">$0</div>
315
+ <div class="metric-label">Cost when idle</div>
316
+ </div>
317
+ <div class="metric">
318
+ <div class="metric-value">5 min</div>
319
+ <div class="metric-label">From pip install to production</div>
320
+ </div>
321
+ </section>
322
+
323
+ <section class="features" id="features">
324
+ <div class="features-header">
325
+ <h2>Everything you need. Nothing you don't.</h2>
326
+ <p>Voltage replaces your cluster, your container registry, and your infrastructure team with one Python decorator.</p>
327
+ </div>
328
+ <div class="features-grid">
329
+ <div class="feature-card">
330
+ <div class="feature-icon">&#9889;</div>
331
+ <h3>On-demand GPUs</h3>
332
+ <p>A100, H100, or T4 GPUs attached to your function with a single parameter. No reservations, no capacity planning. Available instantly.</p>
333
+ </div>
334
+ <div class="feature-card">
335
+ <div class="feature-icon">&#8734;</div>
336
+ <h3>Scale to zero</h3>
337
+ <p>Your functions run only when called. Between invocations, you pay nothing. Scale from zero to thousands of containers and back automatically.</p>
338
+ </div>
339
+ <div class="feature-card">
340
+ <div class="feature-icon">&#128640;</div>
341
+ <h3>Fast cold starts</h3>
342
+ <p>Container snapshots and smart image caching keep cold starts under 500ms for most workloads, even with large ML model weights.</p>
343
+ </div>
344
+ <div class="feature-card">
345
+ <div class="feature-icon">&#128336;</div>
346
+ <h3>Scheduled jobs</h3>
347
+ <p>Cron-style scheduling for batch pipelines, retraining loops, and data processing. Set it and forget it — Voltage handles the infra.</p>
348
+ </div>
349
+ <div class="feature-card">
350
+ <div class="feature-icon">&#127760;</div>
351
+ <h3>Inference endpoints</h3>
352
+ <p>Expose any function as an HTTPS endpoint with built-in auth and auto-scaling. Deploy a model-serving API in one line.</p>
353
+ </div>
354
+ <div class="feature-card">
355
+ <div class="feature-icon">&#128269;</div>
356
+ <h3>Full observability</h3>
357
+ <p>Structured logs, GPU utilization metrics, and cost tracking per function. Traces and spans out of the box, with OpenTelemetry export.</p>
358
+ </div>
359
+ </div>
360
+ </section>
361
+
362
+ <section class="how-section" id="how">
363
+ <h2>Three steps to cloud compute</h2>
364
+ <div class="steps">
365
+ <div class="step">
366
+ <div class="step-num">01</div>
367
+ <h3>Install the SDK</h3>
368
+ <p>One pip install gives you the Voltage decorator and CLI. Works with any Python 3.9+ environment.</p>
369
+ <code>pip install voltage</code>
370
+ </div>
371
+ <div class="step">
372
+ <div class="step-num">02</div>
373
+ <h3>Decorate your function</h3>
374
+ <p>Specify GPU type, memory, and timeout. Your function's dependencies are detected automatically from your imports.</p>
375
+ <code>@voltage.function(gpu="A100")</code>
376
+ </div>
377
+ <div class="step">
378
+ <div class="step-num">03</div>
379
+ <h3>Run it</h3>
380
+ <p>Call your function normally or deploy it as an endpoint. Voltage provisions the hardware, runs the code, and tears it down.</p>
381
+ <code>voltage deploy inference.py</code>
382
+ </div>
383
+ </div>
384
+ </section>
385
+
386
+ <section class="cta-section">
387
+ <div class="cta-box">
388
+ <h2>Ship your first GPU workload in five minutes</h2>
389
+ <p>No credit card required. Free tier includes 10 GPU-hours per month and unlimited CPU functions.</p>
390
+ <a href="#" class="btn-primary">Get started free</a>
391
+ <div class="install-cmd">$ pip install voltage && voltage login</div>
392
+ </div>
393
+ </section>
394
+
395
+ <footer>
396
+ <span>&copy; 2026 Voltage, Inc.</span>
397
+ <ul>
398
+ <li><a href="#">Documentation</a></li>
399
+ <li><a href="#">GitHub</a></li>
400
+ <li><a href="#">Status</a></li>
401
+ <li><a href="#">Privacy</a></li>
402
+ <li><a href="#">Terms</a></li>
403
+ </ul>
404
+ </footer>
405
+
406
+ </body>
407
+ </html>