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,496 @@
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>Slipstream</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Fira+Code:wght@400;500&display=swap" rel="stylesheet">
8
+ <style>
9
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
10
+
11
+ :root {
12
+ --ink: #0f172a;
13
+ --ink-light: #334155;
14
+ --ink-muted: #64748b;
15
+ --bg: #ffffff;
16
+ --bg-alt: #f8fafc;
17
+ --border: #e2e8f0;
18
+ --blue: #2563eb;
19
+ --blue-bg: #eff6ff;
20
+ --green: #16a34a;
21
+ }
22
+
23
+ body {
24
+ font-family: 'DM Sans', -apple-system, sans-serif;
25
+ background: var(--bg);
26
+ color: var(--ink);
27
+ -webkit-font-smoothing: antialiased;
28
+ line-height: 1.6;
29
+ }
30
+
31
+ /* ===== NAV ===== */
32
+ .nav-wrap {
33
+ position: fixed; top: 0; left: 0; right: 0; z-index: 100;
34
+ background: rgba(255,255,255,0.9);
35
+ backdrop-filter: blur(16px);
36
+ border-bottom: 1px solid var(--border);
37
+ }
38
+ .nav-inner {
39
+ max-width: 1200px; margin: 0 auto;
40
+ padding: 0 40px; height: 60px;
41
+ display: flex; align-items: center; justify-content: space-between;
42
+ }
43
+ .nav-brand {
44
+ font-size: 19px; font-weight: 700; letter-spacing: -0.5px;
45
+ color: var(--ink);
46
+ }
47
+ .nav-items { display: flex; gap: 32px; align-items: center; }
48
+ .nav-items a {
49
+ font-size: 14px; color: var(--ink-muted); text-decoration: none;
50
+ font-weight: 500;
51
+ }
52
+ .nav-items a:hover { color: var(--ink); }
53
+ .btn-blue {
54
+ display: inline-block; padding: 9px 22px;
55
+ background: var(--blue); color: white;
56
+ font-size: 14px; font-weight: 600;
57
+ border-radius: 6px; text-decoration: none;
58
+ transition: background 0.15s;
59
+ }
60
+ .btn-blue:hover { background: #1d4ed8; }
61
+
62
+ /* ===== HERO: typographic, no images ===== */
63
+ .hero {
64
+ max-width: 1200px; margin: 0 auto;
65
+ padding: 160px 40px 100px;
66
+ }
67
+ .hero-top-line {
68
+ font-family: 'Fira Code', monospace;
69
+ font-size: 14px; color: var(--blue);
70
+ margin-bottom: 24px;
71
+ font-weight: 500;
72
+ }
73
+ .hero h1 {
74
+ font-size: 64px; font-weight: 700;
75
+ line-height: 1.08; letter-spacing: -2.5px;
76
+ max-width: 720px;
77
+ margin-bottom: 32px;
78
+ }
79
+ .hero-desc {
80
+ font-size: 19px; color: var(--ink-light);
81
+ max-width: 540px; line-height: 1.7;
82
+ margin-bottom: 48px;
83
+ }
84
+ .hero-cta { display: flex; gap: 16px; align-items: center; margin-bottom: 80px; }
85
+ .btn-outline {
86
+ display: inline-block; padding: 11px 28px;
87
+ border: 1.5px solid var(--border); border-radius: 6px;
88
+ font-size: 14px; font-weight: 600; color: var(--ink);
89
+ text-decoration: none; transition: border-color 0.15s;
90
+ }
91
+ .btn-outline:hover { border-color: var(--ink-muted); }
92
+ .btn-blue-lg {
93
+ display: inline-block; padding: 13px 32px;
94
+ background: var(--blue); color: white;
95
+ font-size: 15px; font-weight: 600;
96
+ border-radius: 6px; text-decoration: none;
97
+ }
98
+ .btn-blue-lg:hover { background: #1d4ed8; }
99
+
100
+ /* Horizontal pipeline diagram */
101
+ .pipeline {
102
+ display: flex; align-items: center;
103
+ gap: 0;
104
+ max-width: 900px;
105
+ }
106
+ .pipeline-step {
107
+ flex: 1;
108
+ padding: 24px;
109
+ background: var(--bg-alt);
110
+ border: 1px solid var(--border);
111
+ text-align: center;
112
+ }
113
+ .pipeline-step:first-child { border-radius: 10px 0 0 10px; }
114
+ .pipeline-step:last-child { border-radius: 0 10px 10px 0; }
115
+ .pipeline-step + .pipeline-step { border-left: none; }
116
+ .pipeline-step .step-label {
117
+ font-family: 'Fira Code', monospace;
118
+ font-size: 11px; font-weight: 500;
119
+ color: var(--ink-muted);
120
+ text-transform: uppercase;
121
+ letter-spacing: 1px;
122
+ margin-bottom: 8px;
123
+ }
124
+ .pipeline-step .step-value {
125
+ font-size: 15px; font-weight: 600;
126
+ }
127
+ .pipeline-arrow {
128
+ font-size: 18px; color: var(--ink-muted);
129
+ padding: 0 2px;
130
+ flex-shrink: 0;
131
+ }
132
+
133
+ /* ===== DIVIDER ===== */
134
+ .divider {
135
+ max-width: 1200px; margin: 0 auto;
136
+ padding: 0 40px;
137
+ }
138
+ .divider hr {
139
+ border: none; border-top: 1px solid var(--border);
140
+ }
141
+
142
+ /* ===== FEATURES: alternating rows ===== */
143
+ .feature-section {
144
+ max-width: 1200px; margin: 0 auto;
145
+ padding: 100px 40px;
146
+ }
147
+ .feature-row {
148
+ display: grid; grid-template-columns: 1fr 1fr;
149
+ gap: 80px; align-items: center;
150
+ margin-bottom: 100px;
151
+ }
152
+ .feature-row:last-child { margin-bottom: 0; }
153
+ .feature-row.reverse .feature-content { order: 2; }
154
+ .feature-row.reverse .feature-visual { order: 1; }
155
+
156
+ .feature-tag {
157
+ display: inline-block;
158
+ font-family: 'Fira Code', monospace;
159
+ font-size: 12px; font-weight: 500;
160
+ color: var(--blue);
161
+ background: var(--blue-bg);
162
+ padding: 4px 12px; border-radius: 4px;
163
+ margin-bottom: 16px;
164
+ }
165
+ .feature-content h2 {
166
+ font-size: 32px; font-weight: 700;
167
+ letter-spacing: -1px; margin-bottom: 16px;
168
+ line-height: 1.2;
169
+ }
170
+ .feature-content p {
171
+ font-size: 16px; color: var(--ink-light);
172
+ line-height: 1.75;
173
+ }
174
+
175
+ .feature-visual {
176
+ background: var(--ink);
177
+ border-radius: 10px;
178
+ padding: 32px;
179
+ font-family: 'Fira Code', monospace;
180
+ font-size: 13px; line-height: 1.9;
181
+ color: #cbd5e1;
182
+ overflow-x: auto;
183
+ }
184
+ .feature-visual .kw { color: #c084fc; }
185
+ .feature-visual .str { color: #4ade80; }
186
+ .feature-visual .cmt { color: #475569; }
187
+ .feature-visual .fn { color: #60a5fa; }
188
+ .feature-visual .num { color: #fb923c; }
189
+ .feature-visual .op { color: #94a3b8; }
190
+
191
+ /* ===== GRID STATS ===== */
192
+ .stats-section {
193
+ background: var(--ink);
194
+ padding: 80px 40px;
195
+ }
196
+ .stats-inner {
197
+ max-width: 1200px; margin: 0 auto;
198
+ display: grid; grid-template-columns: repeat(4, 1fr);
199
+ gap: 40px;
200
+ text-align: center;
201
+ }
202
+ .stat-item .stat-num {
203
+ font-size: 44px; font-weight: 700;
204
+ color: white; letter-spacing: -1.5px;
205
+ }
206
+ .stat-item .stat-desc {
207
+ font-size: 14px; color: #94a3b8; margin-top: 4px;
208
+ }
209
+
210
+ /* ===== FRAMEWORK STRIP ===== */
211
+ .fw-section {
212
+ max-width: 1200px; margin: 0 auto;
213
+ padding: 100px 40px;
214
+ text-align: center;
215
+ }
216
+ .fw-section h2 {
217
+ font-size: 32px; font-weight: 700; letter-spacing: -1px;
218
+ margin-bottom: 12px;
219
+ }
220
+ .fw-section > p {
221
+ color: var(--ink-muted); font-size: 16px;
222
+ margin-bottom: 48px;
223
+ }
224
+ .fw-strip {
225
+ display: flex; justify-content: center; gap: 12px; flex-wrap: wrap;
226
+ }
227
+ .fw-pill {
228
+ padding: 10px 24px;
229
+ border: 1px solid var(--border);
230
+ border-radius: 100px;
231
+ font-size: 14px; font-weight: 600;
232
+ color: var(--ink-light);
233
+ background: var(--bg);
234
+ }
235
+
236
+ /* ===== TEAM ===== */
237
+ .team-section {
238
+ max-width: 1200px; margin: 0 auto;
239
+ padding: 0 40px 100px;
240
+ }
241
+ .team-section h2 {
242
+ font-size: 32px; font-weight: 700; letter-spacing: -1px;
243
+ margin-bottom: 48px;
244
+ }
245
+ .team-grid {
246
+ display: grid; grid-template-columns: repeat(3, 1fr);
247
+ gap: 24px;
248
+ }
249
+ .team-card {
250
+ padding: 36px 32px;
251
+ background: var(--bg-alt);
252
+ border: 1px solid var(--border);
253
+ border-radius: 10px;
254
+ }
255
+ .team-card h3 {
256
+ font-size: 17px; font-weight: 600; margin-bottom: 10px;
257
+ }
258
+ .team-card p {
259
+ font-size: 14px; color: var(--ink-muted); line-height: 1.7;
260
+ }
261
+
262
+ /* ===== FINAL CTA ===== */
263
+ .final-cta {
264
+ max-width: 1200px; margin: 0 auto;
265
+ padding: 0 40px 120px;
266
+ }
267
+ .final-cta-inner {
268
+ border: 1px solid var(--border);
269
+ border-radius: 16px;
270
+ padding: 80px;
271
+ text-align: center;
272
+ background: var(--bg-alt);
273
+ }
274
+ .final-cta-inner h2 {
275
+ font-size: 40px; font-weight: 700; letter-spacing: -1.5px;
276
+ margin-bottom: 16px;
277
+ }
278
+ .final-cta-inner p {
279
+ color: var(--ink-muted); font-size: 17px;
280
+ margin-bottom: 36px;
281
+ }
282
+ .cta-input-row {
283
+ display: flex; gap: 12px; justify-content: center;
284
+ max-width: 480px; margin: 0 auto;
285
+ }
286
+ .cta-input-row input {
287
+ flex: 1; padding: 13px 16px;
288
+ border: 1px solid var(--border); border-radius: 6px;
289
+ font-size: 14px; font-family: 'Fira Code', monospace;
290
+ color: var(--ink-muted);
291
+ background: var(--bg);
292
+ outline: none;
293
+ }
294
+ .cta-input-row input:focus { border-color: var(--blue); }
295
+
296
+ /* ===== FOOTER ===== */
297
+ footer {
298
+ border-top: 1px solid var(--border);
299
+ max-width: 1200px; margin: 0 auto;
300
+ padding: 40px;
301
+ display: flex; justify-content: space-between;
302
+ }
303
+ footer span { font-size: 13px; color: var(--ink-muted); }
304
+ .f-links { display: flex; gap: 24px; }
305
+ .f-links a { font-size: 13px; color: var(--ink-muted); text-decoration: none; }
306
+ .f-links a:hover { color: var(--ink); }
307
+ </style>
308
+ </head>
309
+ <body>
310
+
311
+ <div class="nav-wrap">
312
+ <div class="nav-inner">
313
+ <div class="nav-brand">slipstream</div>
314
+ <div class="nav-items">
315
+ <a href="#">Features</a>
316
+ <a href="#">Enterprise</a>
317
+ <a href="#">Docs</a>
318
+ <a href="#">Changelog</a>
319
+ <a href="#">Pricing</a>
320
+ <a href="#" class="btn-blue">Start for free</a>
321
+ </div>
322
+ </div>
323
+ </div>
324
+
325
+ <section class="hero">
326
+ <div class="hero-top-line">$ git push origin main</div>
327
+ <h1>Your code runs everywhere in under ten seconds</h1>
328
+ <p class="hero-desc">Slipstream is a deployment platform. Connect a repository. Push code. It builds, deploys to a global edge network, and gives you a URL. No servers. No containers. No configuration files.</p>
329
+ <div class="hero-cta">
330
+ <a href="#" class="btn-blue-lg">Deploy now</a>
331
+ <a href="#" class="btn-outline">Read documentation</a>
332
+ </div>
333
+
334
+ <div class="pipeline">
335
+ <div class="pipeline-step">
336
+ <div class="step-label">Push</div>
337
+ <div class="step-value">git push</div>
338
+ </div>
339
+ <div class="pipeline-step">
340
+ <div class="step-label">Build</div>
341
+ <div class="step-value">~8 seconds</div>
342
+ </div>
343
+ <div class="pipeline-step">
344
+ <div class="step-label">Deploy</div>
345
+ <div class="step-value">94 edge nodes</div>
346
+ </div>
347
+ <div class="pipeline-step">
348
+ <div class="step-label">Live</div>
349
+ <div class="step-value">your-app.slipstream.app</div>
350
+ </div>
351
+ </div>
352
+ </section>
353
+
354
+ <div class="divider"><hr></div>
355
+
356
+ <section class="feature-section">
357
+
358
+ <div class="feature-row">
359
+ <div class="feature-content">
360
+ <div class="feature-tag">preview deployments</div>
361
+ <h2>Every pull request is a live environment</h2>
362
+ <p>When a developer opens a PR, Slipstream builds it and assigns a unique URL. Designers review the running app. PMs click through flows. Engineers debug in production conditions. The diff is context; the preview is the review.</p>
363
+ </div>
364
+ <div class="feature-visual">
365
+ <div><span class="cmt"># PR #247: redesign checkout flow</span></div>
366
+ <div>&nbsp;</div>
367
+ <div><span class="kw">Status:</span> Ready</div>
368
+ <div><span class="kw">Branch:</span> feat/checkout-v2</div>
369
+ <div><span class="kw">URL:</span> <span class="str">https://pr-247.slipstream.app</span></div>
370
+ <div>&nbsp;</div>
371
+ <div><span class="cmt"># 3 comments, 2 approvals</span></div>
372
+ <div><span class="cmt"># Merged &rarr; production deploy triggered</span></div>
373
+ </div>
374
+ </div>
375
+
376
+ <div class="feature-row reverse">
377
+ <div class="feature-content">
378
+ <div class="feature-tag">serverless functions</div>
379
+ <h2>Backend logic without the backend</h2>
380
+ <p>Write API endpoints as files. They deploy alongside your frontend to the same edge network. Automatic scaling. No cold starts. No instance types. No load balancers. You write the function; Slipstream handles the rest.</p>
381
+ </div>
382
+ <div class="feature-visual">
383
+ <div><span class="cmt">// api/users/[id].ts</span></div>
384
+ <div><span class="kw">import</span> { db } <span class="kw">from</span> <span class="str">'@/lib/db'</span></div>
385
+ <div>&nbsp;</div>
386
+ <div><span class="kw">export async function</span> <span class="fn">GET</span>(req) {</div>
387
+ <div>&nbsp;&nbsp;<span class="kw">const</span> user = <span class="kw">await</span> db.user</div>
388
+ <div>&nbsp;&nbsp;&nbsp;&nbsp;.<span class="fn">findUnique</span>({ id: req.params.id })</div>
389
+ <div>&nbsp;</div>
390
+ <div>&nbsp;&nbsp;<span class="kw">return</span> Response.<span class="fn">json</span>(user)</div>
391
+ <div>}</div>
392
+ </div>
393
+ </div>
394
+
395
+ <div class="feature-row">
396
+ <div class="feature-content">
397
+ <div class="feature-tag">edge network</div>
398
+ <h2>94 locations. One deploy command.</h2>
399
+ <p>Your static assets are cached on every continent. Your server-rendered pages execute at the edge closest to each user. DNS, SSL, and CDN configuration are automatic. You never choose a region or manage a certificate.</p>
400
+ </div>
401
+ <div class="feature-visual">
402
+ <div><span class="cmt"># Global latency (TTFB, p95)</span></div>
403
+ <div>&nbsp;</div>
404
+ <div>North America &nbsp;&nbsp; <span class="num">18ms</span></div>
405
+ <div>Europe &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="num">22ms</span></div>
406
+ <div>Asia Pacific &nbsp;&nbsp;&nbsp; <span class="num">31ms</span></div>
407
+ <div>South America &nbsp;&nbsp; <span class="num">38ms</span></div>
408
+ <div>Africa &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="num">44ms</span></div>
409
+ <div>Oceania &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="num">29ms</span></div>
410
+ </div>
411
+ </div>
412
+
413
+ </section>
414
+
415
+ <section class="stats-section">
416
+ <div class="stats-inner">
417
+ <div class="stat-item">
418
+ <div class="stat-num">94</div>
419
+ <div class="stat-desc">Edge locations worldwide</div>
420
+ </div>
421
+ <div class="stat-item">
422
+ <div class="stat-num">12M+</div>
423
+ <div class="stat-desc">Deploys per month</div>
424
+ </div>
425
+ <div class="stat-item">
426
+ <div class="stat-num">99.99%</div>
427
+ <div class="stat-desc">Uptime guarantee</div>
428
+ </div>
429
+ <div class="stat-item">
430
+ <div class="stat-num">0</div>
431
+ <div class="stat-desc">Servers to manage</div>
432
+ </div>
433
+ </div>
434
+ </section>
435
+
436
+ <section class="fw-section">
437
+ <h2>First-class framework support</h2>
438
+ <p>Zero-config deploys for the frameworks that define modern web development.</p>
439
+ <div class="fw-strip">
440
+ <div class="fw-pill">Next.js</div>
441
+ <div class="fw-pill">Remix</div>
442
+ <div class="fw-pill">Astro</div>
443
+ <div class="fw-pill">SvelteKit</div>
444
+ <div class="fw-pill">Nuxt</div>
445
+ <div class="fw-pill">Vite</div>
446
+ <div class="fw-pill">Gatsby</div>
447
+ <div class="fw-pill">Angular</div>
448
+ <div class="fw-pill">Eleventy</div>
449
+ <div class="fw-pill">Hugo</div>
450
+ </div>
451
+ </section>
452
+
453
+ <div class="divider"><hr></div>
454
+
455
+ <section class="team-section">
456
+ <h2>Built for teams that ship</h2>
457
+ <div class="team-grid">
458
+ <div class="team-card">
459
+ <h3>Deploy notifications</h3>
460
+ <p>Slack, email, and webhook notifications on every deploy. Your team knows what shipped and when, without checking dashboards.</p>
461
+ </div>
462
+ <div class="team-card">
463
+ <h3>Deploy comments</h3>
464
+ <p>Leave feedback directly on preview deployments. Pin a comment to a specific page and URL. Context stays with the deploy, not in a separate thread.</p>
465
+ </div>
466
+ <div class="team-card">
467
+ <h3>Branch protection</h3>
468
+ <p>Require successful preview builds before merge. Set approval gates per environment. Production deploys only from your main branch.</p>
469
+ </div>
470
+ </div>
471
+ </section>
472
+
473
+ <section class="final-cta">
474
+ <div class="final-cta-inner">
475
+ <h2>Ship your next project on Slipstream</h2>
476
+ <p>Free for personal projects. Deploy in under sixty seconds.</p>
477
+ <div class="cta-input-row">
478
+ <input type="text" value="https://github.com/you/your-repo" readonly>
479
+ <a href="#" class="btn-blue-lg">Deploy</a>
480
+ </div>
481
+ </div>
482
+ </section>
483
+
484
+ <footer>
485
+ <span>&copy; 2026 Slipstream</span>
486
+ <div class="f-links">
487
+ <a href="#">Privacy</a>
488
+ <a href="#">Terms</a>
489
+ <a href="#">Status</a>
490
+ <a href="#">Security</a>
491
+ <a href="#">Careers</a>
492
+ </div>
493
+ </footer>
494
+
495
+ </body>
496
+ </html>