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.
- package/README.md +34 -1
- package/bin/cross-publish.mjs +344 -0
- package/bin/forgedock.mjs +229 -17
- package/commands/autopilot.md +77 -0
- package/commands/design-bench.md +176 -0
- package/commands/design-render-critique-loop.md +103 -0
- package/commands/design.md +259 -0
- package/commands/issue.md +7 -3
- package/commands/orchestrate.md +121 -0
- package/commands/{resume.md → pipeline-resume.md} +4 -4
- package/commands/{status.md → pipeline-status.md} +1 -1
- package/commands/qa-sweep.md +37 -2
- package/commands/quality-gate.md +57 -0
- package/commands/review-pr-staging.md +158 -2
- package/commands/test-gate.md +929 -0
- package/commands/work-on/build/implement.md +5 -3
- package/commands/work-on.md +53 -3
- package/docs/CI.md +177 -0
- package/docs/FORGE-PROTOCOL.md +324 -0
- package/docs/articles/b-vs-c-baseline.md +210 -0
- package/docs/articles/full-abc-benchmark.md +205 -0
- package/docs/articles/selective-spec-loading-token-savings.md +140 -0
- package/docs/design/abc-benchmark.md +195 -0
- package/docs/design/design-architect-rationale.md +123 -0
- package/docs/design/design-memory.md +61 -0
- package/docs/design/design-spec-schema.md +248 -0
- package/docs/design/design-system-lint.md +150 -0
- package/docs/design/divergent-generation.md +106 -0
- package/docs/design/effects-appropriateness.md +133 -0
- package/docs/design/fixtures/briefs/README.md +47 -0
- package/docs/design/fixtures/briefs/cadence.md +39 -0
- package/docs/design/fixtures/briefs/plume.md +39 -0
- package/docs/design/fixtures/briefs/slipstream.md +39 -0
- package/docs/design/fixtures/briefs/tender.md +39 -0
- package/docs/design/fixtures/briefs/voltage.md +39 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-1.html +364 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-2.html +420 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/cadence/arm-b/run-3.html +506 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-1.html +611 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-2.html +594 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/plume/arm-b/run-3.html +817 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/runs.json +175 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/scorecard.json +138 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-1.html +373 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-2.html +398 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/slipstream/arm-b/run-3.html +595 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-1.html +531 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-2.html +565 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/tender/arm-b/run-3.html +674 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-1.html +388 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-2.html +463 -0
- package/docs/design/fixtures/runs/b-vs-c-baseline/voltage/arm-b/run-3.html +568 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-1.html +562 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-2.html +618 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-a/run-3.html +618 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-1.html +364 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-2.html +420 -0
- package/docs/design/fixtures/runs/full-abc/cadence/arm-b/run-3.html +506 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-1.html +527 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-2.html +445 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-a/run-3.html +483 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-1.html +611 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-2.html +594 -0
- package/docs/design/fixtures/runs/full-abc/plume/arm-b/run-3.html +817 -0
- package/docs/design/fixtures/runs/full-abc/runs.json +190 -0
- package/docs/design/fixtures/runs/full-abc/scorecard.json +144 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-1.html +496 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-2.html +447 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-a/run-3.html +564 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-1.html +373 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-2.html +398 -0
- package/docs/design/fixtures/runs/full-abc/slipstream/arm-b/run-3.html +595 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-1.html +622 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-2.html +475 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-a/run-3.html +660 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-1.html +531 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-2.html +565 -0
- package/docs/design/fixtures/runs/full-abc/tender/arm-b/run-3.html +674 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-1.html +525 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-2.html +446 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-a/run-3.html +463 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-1.html +388 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-2.html +463 -0
- package/docs/design/fixtures/runs/full-abc/voltage/arm-b/run-3.html +568 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-1.html +1068 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-2.html +1423 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-a/run-3.html +1245 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-1.html +305 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-2.html +327 -0
- package/docs/design/fixtures/runs/full-abc-opus/cadence/arm-b/run-3.html +428 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-1.html +1270 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-2.html +1172 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-a/run-3.html +1532 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-1.html +315 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-2.html +342 -0
- package/docs/design/fixtures/runs/full-abc-opus/plume/arm-b/run-3.html +353 -0
- package/docs/design/fixtures/runs/full-abc-opus/runs.json +190 -0
- package/docs/design/fixtures/runs/full-abc-opus/scorecard.json +144 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-1.html +345 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-2.html +396 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-a/run-3.html +502 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-1.html +408 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-2.html +446 -0
- package/docs/design/fixtures/runs/full-abc-opus/slipstream/arm-b/run-3.html +496 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-1.html +813 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-2.html +711 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-a/run-3.html +721 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-1.html +280 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-2.html +291 -0
- package/docs/design/fixtures/runs/full-abc-opus/tender/arm-b/run-3.html +366 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-1.html +1010 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-2.html +836 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-a/run-3.html +930 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-1.html +407 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-2.html +396 -0
- package/docs/design/fixtures/runs/full-abc-opus/voltage/arm-b/run-3.html +529 -0
- package/docs/design/foundations/brutalist.css +294 -0
- package/docs/design/foundations/editorial.css +300 -0
- package/docs/design/foundations/minimal-luxury.css +295 -0
- package/docs/design/foundations/technical.css +293 -0
- package/docs/design/foundations/warm-photo.css +299 -0
- package/docs/design/reference-corpus.md +1726 -0
- package/docs/design/render-critique-loop.md +57 -0
- package/docs/spec-graph-schema.md +397 -0
- package/package.json +1 -1
- package/scripts/bench-scorecard.mjs +239 -0
- package/scripts/build-spec-graph.mjs +509 -0
- package/scripts/check-native-conflicts.sh +200 -0
- package/scripts/classify-lane.sh +0 -7
- package/scripts/design-system-lint.mjs +993 -0
- package/scripts/graph-query.sh +486 -0
- package/scripts/transition-label.sh +10 -2
- package/scripts/validate-spec-graph.sh +423 -0
- package/templates/workflows/forgedock-review.yml +96 -0
|
@@ -0,0 +1,446 @@
|
|
|
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 - The deployment platform for the modern web</title>
|
|
7
|
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
8
|
+
<style>
|
|
9
|
+
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
10
|
+
|
|
11
|
+
body {
|
|
12
|
+
font-family: 'Space Grotesk', sans-serif;
|
|
13
|
+
background: #fafaf9;
|
|
14
|
+
color: #1c1917;
|
|
15
|
+
-webkit-font-smoothing: antialiased;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* ---- NAV ---- */
|
|
19
|
+
header {
|
|
20
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
21
|
+
padding: 20px 64px;
|
|
22
|
+
position: fixed; top: 0; left: 0; right: 0; z-index: 50;
|
|
23
|
+
background: rgba(250,250,249,0.92);
|
|
24
|
+
backdrop-filter: blur(12px);
|
|
25
|
+
}
|
|
26
|
+
.logo { font-size: 20px; font-weight: 700; letter-spacing: -0.5px; }
|
|
27
|
+
.nav-center { display: flex; gap: 36px; }
|
|
28
|
+
.nav-center a {
|
|
29
|
+
font-size: 14px; font-weight: 500; color: #78716c;
|
|
30
|
+
text-decoration: none; transition: color 0.15s;
|
|
31
|
+
}
|
|
32
|
+
.nav-center a:hover { color: #1c1917; }
|
|
33
|
+
.nav-right { display: flex; gap: 12px; align-items: center; }
|
|
34
|
+
.nav-right a { font-size: 14px; font-weight: 500; color: #78716c; text-decoration: none; }
|
|
35
|
+
.btn-dark {
|
|
36
|
+
display: inline-block; padding: 10px 24px;
|
|
37
|
+
background: #1c1917; color: #fafaf9;
|
|
38
|
+
font-size: 14px; font-weight: 600;
|
|
39
|
+
border-radius: 6px; text-decoration: none;
|
|
40
|
+
border: none; cursor: pointer;
|
|
41
|
+
transition: background 0.15s;
|
|
42
|
+
}
|
|
43
|
+
.btn-dark:hover { background: #292524; }
|
|
44
|
+
|
|
45
|
+
/* ---- HERO: split layout ---- */
|
|
46
|
+
.hero {
|
|
47
|
+
display: grid; grid-template-columns: 1fr 1fr;
|
|
48
|
+
min-height: 100vh;
|
|
49
|
+
max-width: 1440px; margin: 0 auto;
|
|
50
|
+
padding: 0 64px;
|
|
51
|
+
align-items: center;
|
|
52
|
+
gap: 80px;
|
|
53
|
+
}
|
|
54
|
+
.hero-text { padding-top: 64px; }
|
|
55
|
+
.hero-text h1 {
|
|
56
|
+
font-size: 56px; font-weight: 700;
|
|
57
|
+
line-height: 1.1; letter-spacing: -2px;
|
|
58
|
+
margin-bottom: 24px;
|
|
59
|
+
}
|
|
60
|
+
.hero-text h1 em {
|
|
61
|
+
font-style: normal;
|
|
62
|
+
color: #0369a1;
|
|
63
|
+
}
|
|
64
|
+
.hero-text p {
|
|
65
|
+
font-size: 18px; line-height: 1.7;
|
|
66
|
+
color: #57534e; max-width: 460px;
|
|
67
|
+
margin-bottom: 40px;
|
|
68
|
+
}
|
|
69
|
+
.hero-actions { display: flex; gap: 16px; align-items: center; }
|
|
70
|
+
.hero-actions .link-arrow {
|
|
71
|
+
font-size: 15px; font-weight: 500; color: #1c1917;
|
|
72
|
+
text-decoration: none;
|
|
73
|
+
}
|
|
74
|
+
.hero-actions .link-arrow:hover { text-decoration: underline; }
|
|
75
|
+
|
|
76
|
+
.hero-visual {
|
|
77
|
+
padding-top: 64px;
|
|
78
|
+
}
|
|
79
|
+
.code-window {
|
|
80
|
+
background: #1c1917;
|
|
81
|
+
border-radius: 12px;
|
|
82
|
+
overflow: hidden;
|
|
83
|
+
box-shadow: 0 24px 80px rgba(0,0,0,0.15);
|
|
84
|
+
}
|
|
85
|
+
.code-titlebar {
|
|
86
|
+
padding: 16px 20px;
|
|
87
|
+
display: flex; align-items: center; gap: 8px;
|
|
88
|
+
border-bottom: 1px solid #292524;
|
|
89
|
+
}
|
|
90
|
+
.code-dot { width: 10px; height: 10px; border-radius: 50%; }
|
|
91
|
+
.code-dot:nth-child(1) { background: #ef4444; }
|
|
92
|
+
.code-dot:nth-child(2) { background: #eab308; }
|
|
93
|
+
.code-dot:nth-child(3) { background: #22c55e; }
|
|
94
|
+
.code-titlebar span {
|
|
95
|
+
margin-left: 12px; font-size: 12px;
|
|
96
|
+
color: #78716c; font-family: 'IBM Plex Mono', monospace;
|
|
97
|
+
}
|
|
98
|
+
.code-body {
|
|
99
|
+
padding: 28px 24px;
|
|
100
|
+
font-family: 'IBM Plex Mono', monospace;
|
|
101
|
+
font-size: 13px; line-height: 2;
|
|
102
|
+
color: #d6d3d1;
|
|
103
|
+
}
|
|
104
|
+
.code-body .comment { color: #78716c; }
|
|
105
|
+
.code-body .keyword { color: #c084fc; }
|
|
106
|
+
.code-body .string { color: #34d399; }
|
|
107
|
+
.code-body .fn { color: #60a5fa; }
|
|
108
|
+
.code-body .tag { color: #f472b6; }
|
|
109
|
+
|
|
110
|
+
.deploy-status {
|
|
111
|
+
margin-top: 16px;
|
|
112
|
+
background: #1c1917;
|
|
113
|
+
border-radius: 12px;
|
|
114
|
+
padding: 20px 24px;
|
|
115
|
+
font-family: 'IBM Plex Mono', monospace;
|
|
116
|
+
font-size: 13px;
|
|
117
|
+
display: flex; flex-direction: column; gap: 6px;
|
|
118
|
+
box-shadow: 0 8px 40px rgba(0,0,0,0.1);
|
|
119
|
+
}
|
|
120
|
+
.deploy-row { display: flex; align-items: center; gap: 10px; }
|
|
121
|
+
.dot-green { width: 8px; height: 8px; border-radius: 50%; background: #22c55e; }
|
|
122
|
+
.dot-blue { width: 8px; height: 8px; border-radius: 50%; background: #3b82f6; }
|
|
123
|
+
.deploy-row span { color: #a8a29e; }
|
|
124
|
+
.deploy-row strong { color: #fafaf9; font-weight: 500; }
|
|
125
|
+
.deploy-row a { color: #38bdf8; text-decoration: none; }
|
|
126
|
+
|
|
127
|
+
/* ---- METRICS BAR ---- */
|
|
128
|
+
.metrics-bar {
|
|
129
|
+
border-top: 1px solid #e7e5e4;
|
|
130
|
+
border-bottom: 1px solid #e7e5e4;
|
|
131
|
+
padding: 64px;
|
|
132
|
+
display: flex; justify-content: center; gap: 120px;
|
|
133
|
+
}
|
|
134
|
+
.metric { text-align: center; }
|
|
135
|
+
.metric .number {
|
|
136
|
+
font-size: 48px; font-weight: 700; letter-spacing: -2px;
|
|
137
|
+
color: #1c1917;
|
|
138
|
+
}
|
|
139
|
+
.metric .label {
|
|
140
|
+
font-size: 14px; color: #78716c; margin-top: 4px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* ---- FEATURES (horizontal cards) ---- */
|
|
144
|
+
.features-section {
|
|
145
|
+
max-width: 1200px; margin: 0 auto;
|
|
146
|
+
padding: 120px 64px;
|
|
147
|
+
}
|
|
148
|
+
.features-section > h2 {
|
|
149
|
+
font-size: 36px; font-weight: 700; letter-spacing: -1px;
|
|
150
|
+
margin-bottom: 64px;
|
|
151
|
+
}
|
|
152
|
+
.feature-row {
|
|
153
|
+
display: grid; grid-template-columns: 1fr 1fr;
|
|
154
|
+
gap: 48px;
|
|
155
|
+
margin-bottom: 48px;
|
|
156
|
+
}
|
|
157
|
+
.feature-block {
|
|
158
|
+
padding: 48px;
|
|
159
|
+
background: #f5f5f4;
|
|
160
|
+
border-radius: 12px;
|
|
161
|
+
border: 1px solid #e7e5e4;
|
|
162
|
+
}
|
|
163
|
+
.feature-label {
|
|
164
|
+
font-size: 11px; font-weight: 600;
|
|
165
|
+
text-transform: uppercase; letter-spacing: 1.5px;
|
|
166
|
+
color: #0369a1; margin-bottom: 16px;
|
|
167
|
+
}
|
|
168
|
+
.feature-block h3 {
|
|
169
|
+
font-size: 22px; font-weight: 600; margin-bottom: 12px;
|
|
170
|
+
}
|
|
171
|
+
.feature-block p {
|
|
172
|
+
font-size: 15px; color: #57534e; line-height: 1.7;
|
|
173
|
+
}
|
|
174
|
+
.feature-wide {
|
|
175
|
+
grid-column: 1 / -1;
|
|
176
|
+
}
|
|
177
|
+
.feature-code {
|
|
178
|
+
background: #1c1917;
|
|
179
|
+
color: #d6d3d1;
|
|
180
|
+
font-family: 'IBM Plex Mono', monospace;
|
|
181
|
+
font-size: 13px;
|
|
182
|
+
padding: 20px 24px;
|
|
183
|
+
border-radius: 8px;
|
|
184
|
+
margin-top: 20px;
|
|
185
|
+
line-height: 1.8;
|
|
186
|
+
overflow-x: auto;
|
|
187
|
+
}
|
|
188
|
+
.feature-code .dim { color: #57534e; }
|
|
189
|
+
|
|
190
|
+
/* ---- FRAMEWORKS ---- */
|
|
191
|
+
.frameworks-section {
|
|
192
|
+
max-width: 1200px; margin: 0 auto;
|
|
193
|
+
padding: 0 64px 120px;
|
|
194
|
+
}
|
|
195
|
+
.frameworks-section h2 {
|
|
196
|
+
font-size: 36px; font-weight: 700; letter-spacing: -1px;
|
|
197
|
+
margin-bottom: 16px;
|
|
198
|
+
}
|
|
199
|
+
.frameworks-section > p {
|
|
200
|
+
color: #57534e; font-size: 17px; margin-bottom: 48px;
|
|
201
|
+
}
|
|
202
|
+
.fw-grid {
|
|
203
|
+
display: grid; grid-template-columns: repeat(4, 1fr);
|
|
204
|
+
gap: 16px;
|
|
205
|
+
}
|
|
206
|
+
.fw-card {
|
|
207
|
+
padding: 32px 28px;
|
|
208
|
+
background: #f5f5f4;
|
|
209
|
+
border: 1px solid #e7e5e4;
|
|
210
|
+
border-radius: 10px;
|
|
211
|
+
text-align: center;
|
|
212
|
+
}
|
|
213
|
+
.fw-card .fw-name {
|
|
214
|
+
font-size: 16px; font-weight: 600;
|
|
215
|
+
margin-bottom: 4px;
|
|
216
|
+
}
|
|
217
|
+
.fw-card .fw-note {
|
|
218
|
+
font-size: 13px; color: #78716c;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* ---- BOTTOM CTA ---- */
|
|
222
|
+
.bottom-cta {
|
|
223
|
+
max-width: 1200px; margin: 0 auto;
|
|
224
|
+
padding: 0 64px 120px;
|
|
225
|
+
text-align: center;
|
|
226
|
+
}
|
|
227
|
+
.bottom-cta-box {
|
|
228
|
+
background: #1c1917;
|
|
229
|
+
border-radius: 16px;
|
|
230
|
+
padding: 80px 64px;
|
|
231
|
+
color: #fafaf9;
|
|
232
|
+
}
|
|
233
|
+
.bottom-cta-box h2 {
|
|
234
|
+
font-size: 42px; font-weight: 700; letter-spacing: -1.5px;
|
|
235
|
+
margin-bottom: 16px;
|
|
236
|
+
}
|
|
237
|
+
.bottom-cta-box p {
|
|
238
|
+
color: #a8a29e; font-size: 18px;
|
|
239
|
+
margin-bottom: 40px;
|
|
240
|
+
}
|
|
241
|
+
.btn-light {
|
|
242
|
+
display: inline-block; padding: 14px 32px;
|
|
243
|
+
background: #fafaf9; color: #1c1917;
|
|
244
|
+
font-size: 15px; font-weight: 600;
|
|
245
|
+
border-radius: 8px; text-decoration: none;
|
|
246
|
+
transition: opacity 0.15s;
|
|
247
|
+
}
|
|
248
|
+
.btn-light:hover { opacity: 0.9; }
|
|
249
|
+
|
|
250
|
+
/* ---- FOOTER ---- */
|
|
251
|
+
footer {
|
|
252
|
+
border-top: 1px solid #e7e5e4;
|
|
253
|
+
padding: 40px 64px;
|
|
254
|
+
display: flex; justify-content: space-between;
|
|
255
|
+
max-width: 1440px; margin: 0 auto;
|
|
256
|
+
}
|
|
257
|
+
footer span { font-size: 13px; color: #a8a29e; }
|
|
258
|
+
.footer-links { display: flex; gap: 24px; }
|
|
259
|
+
.footer-links a { font-size: 13px; color: #78716c; text-decoration: none; }
|
|
260
|
+
.footer-links a:hover { color: #1c1917; }
|
|
261
|
+
</style>
|
|
262
|
+
</head>
|
|
263
|
+
<body>
|
|
264
|
+
|
|
265
|
+
<header>
|
|
266
|
+
<div class="logo">slipstream</div>
|
|
267
|
+
<nav class="nav-center">
|
|
268
|
+
<a href="#">Product</a>
|
|
269
|
+
<a href="#">Solutions</a>
|
|
270
|
+
<a href="#">Docs</a>
|
|
271
|
+
<a href="#">Pricing</a>
|
|
272
|
+
<a href="#">Blog</a>
|
|
273
|
+
</nav>
|
|
274
|
+
<div class="nav-right">
|
|
275
|
+
<a href="#">Log in</a>
|
|
276
|
+
<a href="#" class="btn-dark">Start for free</a>
|
|
277
|
+
</div>
|
|
278
|
+
</header>
|
|
279
|
+
|
|
280
|
+
<section class="hero">
|
|
281
|
+
<div class="hero-text">
|
|
282
|
+
<h1>Deploy to the edge <em>on every push</em></h1>
|
|
283
|
+
<p>Slipstream connects to your Git repository and turns every commit into a global deployment. Preview environments for every PR. Serverless functions for your backend. No infrastructure to manage.</p>
|
|
284
|
+
<div class="hero-actions">
|
|
285
|
+
<a href="#" class="btn-dark">Deploy now</a>
|
|
286
|
+
<a href="#" class="link-arrow">View documentation →</a>
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
<div class="hero-visual">
|
|
290
|
+
<div class="code-window">
|
|
291
|
+
<div class="code-titlebar">
|
|
292
|
+
<div class="code-dot"></div>
|
|
293
|
+
<div class="code-dot"></div>
|
|
294
|
+
<div class="code-dot"></div>
|
|
295
|
+
<span>app/page.tsx</span>
|
|
296
|
+
</div>
|
|
297
|
+
<div class="code-body">
|
|
298
|
+
<div><span class="keyword">export default</span> <span class="keyword">function</span> <span class="fn">Home</span>() {</div>
|
|
299
|
+
<div> <span class="keyword">return</span> (</div>
|
|
300
|
+
<div> <span class="tag"><main></span></div>
|
|
301
|
+
<div> <span class="tag"><h1></span>Shipped with Slipstream<span class="tag"></h1></span></div>
|
|
302
|
+
<div> <span class="tag"><p></span>Globally distributed in 8 seconds.<span class="tag"></p></span></div>
|
|
303
|
+
<div> <span class="tag"></main></span></div>
|
|
304
|
+
<div> )</div>
|
|
305
|
+
<div>}</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
<div class="deploy-status">
|
|
309
|
+
<div class="deploy-row">
|
|
310
|
+
<div class="dot-green"></div>
|
|
311
|
+
<strong>Production</strong>
|
|
312
|
+
<span>· 4s ago ·</span>
|
|
313
|
+
<a href="#">your-app.slipstream.app</a>
|
|
314
|
+
</div>
|
|
315
|
+
<div class="deploy-row">
|
|
316
|
+
<div class="dot-blue"></div>
|
|
317
|
+
<strong>Preview</strong>
|
|
318
|
+
<span>· feat/nav-redesign ·</span>
|
|
319
|
+
<a href="#">feat-nav-redesign.slipstream.app</a>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
</section>
|
|
324
|
+
|
|
325
|
+
<section class="metrics-bar">
|
|
326
|
+
<div class="metric">
|
|
327
|
+
<div class="number">94</div>
|
|
328
|
+
<div class="label">Edge locations</div>
|
|
329
|
+
</div>
|
|
330
|
+
<div class="metric">
|
|
331
|
+
<div class="number"><50ms</div>
|
|
332
|
+
<div class="label">Global TTFB</div>
|
|
333
|
+
</div>
|
|
334
|
+
<div class="metric">
|
|
335
|
+
<div class="number">8s</div>
|
|
336
|
+
<div class="label">Average build time</div>
|
|
337
|
+
</div>
|
|
338
|
+
<div class="metric">
|
|
339
|
+
<div class="number">99.99%</div>
|
|
340
|
+
<div class="label">Uptime SLA</div>
|
|
341
|
+
</div>
|
|
342
|
+
</section>
|
|
343
|
+
|
|
344
|
+
<section class="features-section">
|
|
345
|
+
<h2>What the platform does</h2>
|
|
346
|
+
<div class="feature-row">
|
|
347
|
+
<div class="feature-block">
|
|
348
|
+
<div class="feature-label">Previews</div>
|
|
349
|
+
<h3>Every PR is a running environment</h3>
|
|
350
|
+
<p>When a developer opens a pull request, Slipstream builds and deploys it to a unique URL. Reviewers see the change running, not just as code. Comments and approvals happen alongside the live preview.</p>
|
|
351
|
+
</div>
|
|
352
|
+
<div class="feature-block">
|
|
353
|
+
<div class="feature-label">Edge Network</div>
|
|
354
|
+
<h3>Fast everywhere, not just near your servers</h3>
|
|
355
|
+
<p>Static assets are cached at 94 edge locations. Dynamic routes execute at the edge closest to the user. No regions to choose, no replicas to configure. Your app is fast by default.</p>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
<div class="feature-row">
|
|
359
|
+
<div class="feature-block feature-wide">
|
|
360
|
+
<div class="feature-label">Serverless Functions</div>
|
|
361
|
+
<h3>Backend logic, zero server management</h3>
|
|
362
|
+
<p>Write API routes and server-side logic as functions. They deploy with your frontend, scale automatically, and run in the same edge network. You never provision a server or choose an instance type.</p>
|
|
363
|
+
<div class="feature-code">
|
|
364
|
+
<div><span class="dim">// api/hello.ts</span></div>
|
|
365
|
+
<div>export default function handler(req, res) {</div>
|
|
366
|
+
<div> const user = await db.users.find(req.query.id)</div>
|
|
367
|
+
<div> return res.json({ name: user.name, plan: user.plan })</div>
|
|
368
|
+
<div>}</div>
|
|
369
|
+
<div><span class="dim">// Deployed to the edge. Scales to zero. No servers.</span></div>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
<div class="feature-row">
|
|
374
|
+
<div class="feature-block">
|
|
375
|
+
<div class="feature-label">Git Integration</div>
|
|
376
|
+
<h3>Your repository is the source of truth</h3>
|
|
377
|
+
<p>Connect GitHub, GitLab, or Bitbucket. Every push to any branch triggers a build. Merge to main and it's in production. Rollback is a revert commit. The workflow is Git, nothing else.</p>
|
|
378
|
+
</div>
|
|
379
|
+
<div class="feature-block">
|
|
380
|
+
<div class="feature-label">Collaboration</div>
|
|
381
|
+
<h3>Ship together, not just side by side</h3>
|
|
382
|
+
<p>Deploy notifications in Slack. Comments on preview deployments. Branch-level permissions and approval gates. Your whole team sees what shipped, who shipped it, and when.</p>
|
|
383
|
+
</div>
|
|
384
|
+
</div>
|
|
385
|
+
</section>
|
|
386
|
+
|
|
387
|
+
<section class="frameworks-section">
|
|
388
|
+
<h2>The home for modern frameworks</h2>
|
|
389
|
+
<p>Zero-configuration support for the frameworks that power the web.</p>
|
|
390
|
+
<div class="fw-grid">
|
|
391
|
+
<div class="fw-card">
|
|
392
|
+
<div class="fw-name">Next.js</div>
|
|
393
|
+
<div class="fw-note">Full support incl. App Router</div>
|
|
394
|
+
</div>
|
|
395
|
+
<div class="fw-card">
|
|
396
|
+
<div class="fw-name">Remix</div>
|
|
397
|
+
<div class="fw-note">Edge & Node runtimes</div>
|
|
398
|
+
</div>
|
|
399
|
+
<div class="fw-card">
|
|
400
|
+
<div class="fw-name">Astro</div>
|
|
401
|
+
<div class="fw-note">Static & SSR modes</div>
|
|
402
|
+
</div>
|
|
403
|
+
<div class="fw-card">
|
|
404
|
+
<div class="fw-name">SvelteKit</div>
|
|
405
|
+
<div class="fw-note">Adapter included</div>
|
|
406
|
+
</div>
|
|
407
|
+
<div class="fw-card">
|
|
408
|
+
<div class="fw-name">Nuxt</div>
|
|
409
|
+
<div class="fw-note">SSR on the edge</div>
|
|
410
|
+
</div>
|
|
411
|
+
<div class="fw-card">
|
|
412
|
+
<div class="fw-name">Vite</div>
|
|
413
|
+
<div class="fw-note">Any SPA framework</div>
|
|
414
|
+
</div>
|
|
415
|
+
<div class="fw-card">
|
|
416
|
+
<div class="fw-name">Gatsby</div>
|
|
417
|
+
<div class="fw-note">Incremental builds</div>
|
|
418
|
+
</div>
|
|
419
|
+
<div class="fw-card">
|
|
420
|
+
<div class="fw-name">Eleventy</div>
|
|
421
|
+
<div class="fw-note">Static site gen</div>
|
|
422
|
+
</div>
|
|
423
|
+
</div>
|
|
424
|
+
</section>
|
|
425
|
+
|
|
426
|
+
<section class="bottom-cta">
|
|
427
|
+
<div class="bottom-cta-box">
|
|
428
|
+
<h2>Stop configuring infrastructure.<br>Start shipping product.</h2>
|
|
429
|
+
<p>Free for hobby projects. No credit card required to start.</p>
|
|
430
|
+
<a href="#" class="btn-light">Deploy now</a>
|
|
431
|
+
</div>
|
|
432
|
+
</section>
|
|
433
|
+
|
|
434
|
+
<footer>
|
|
435
|
+
<span>© 2026 Slipstream, Inc.</span>
|
|
436
|
+
<div class="footer-links">
|
|
437
|
+
<a href="#">Privacy</a>
|
|
438
|
+
<a href="#">Terms</a>
|
|
439
|
+
<a href="#">Status</a>
|
|
440
|
+
<a href="#">Security</a>
|
|
441
|
+
<a href="#">GitHub</a>
|
|
442
|
+
</div>
|
|
443
|
+
</footer>
|
|
444
|
+
|
|
445
|
+
</body>
|
|
446
|
+
</html>
|