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.
- 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/qa-sweep.md +37 -2
- package/commands/quality-gate.md +30 -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/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,447 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
ARCHETYPE: minimal-luxury
|
|
3
|
+
RATIONALE: The counter-position to Vercel's now-dark aggression is restraint. Slipstream can
|
|
4
|
+
own the "premium calm" position — the platform that serious engineers choose because it doesn't
|
|
5
|
+
shout. Think Linear, Stripe, Figma in 2021. The confidence is in what's NOT there: no noise,
|
|
6
|
+
no badges, no feature spray. Every element earns its place. This archetype communicates
|
|
7
|
+
"we've thought about this more than you have."
|
|
8
|
+
SIGNATURE MOVE: A single-line hero with massive typographic tracking — 6 words, no punctuation,
|
|
9
|
+
set in an extra-light display cut — accompanied by a live deploy status indicator (animated
|
|
10
|
+
green dot) embedded directly in the body copy as if it's a real system readout. The dot is
|
|
11
|
+
the only animation; everything else is static.
|
|
12
|
+
EFFECTS PLAN:
|
|
13
|
+
- Pulsing green status dot (scale + opacity CSS keyframe, 2s loop, slow and calm)
|
|
14
|
+
- Hero text renders with a gentle fade-in and 4px upward translate (200ms, ease-out)
|
|
15
|
+
- Framework logos appear with staggered opacity (CSS delay, no JS)
|
|
16
|
+
- Cards: no hover transform — only a subtle background shift to off-white (#FAFAFA→#F4F4F4)
|
|
17
|
+
- CTA: underline grows from left on hover (transform scaleX, origin-left)
|
|
18
|
+
ANTI-SLOP CHECK:
|
|
19
|
+
N1 (no gradient hero soup): PASS — pure white background, no gradients
|
|
20
|
+
N2 (no generic SaaS blob art): PASS — no decorative shapes at all
|
|
21
|
+
N3 (no Lorem Ipsum): PASS — all real product copy
|
|
22
|
+
N4 (no system font stack): PASS — Syne (display) + Inter (body) from Google Fonts
|
|
23
|
+
N5 (no rounded-everything cards): PASS — 4px radius max, intentional use
|
|
24
|
+
N6 (no 6-icon feature grid with identical weight): PASS — 3 items, varied typographic weight
|
|
25
|
+
N7 (no stock photo people smiling): PASS — zero photography
|
|
26
|
+
N8 (no blue CTA button on white card): PASS — text-only CTA with underline, no button color
|
|
27
|
+
N9 (no fake testimonials with star ratings): PASS — no stars, single quote with real context
|
|
28
|
+
N10 (no hero subhead that is just a mission statement): PASS — subhead is product description
|
|
29
|
+
N11 (no decorative divider icons): PASS — no decorative icons, only rule lines
|
|
30
|
+
N12 (no color palette of 6+ colors): PASS — white, near-black (#0E0E0E), stone (#E8E4DE),
|
|
31
|
+
and a single #16A34A green for the live indicator. 3 colors + 1 functional accent.
|
|
32
|
+
SELF-CRITIQUE: The single-line hero is risky on mobile — "Deploy at the speed of thought" must
|
|
33
|
+
wrap gracefully. Letter-spacing is reduced at small breakpoints. The minimalism is disciplined
|
|
34
|
+
but may test against conversion-optimized competitors; the detailed feature section compensates
|
|
35
|
+
by being substantive, not decorative.
|
|
36
|
+
-->
|
|
37
|
+
<!DOCTYPE html>
|
|
38
|
+
<html lang="en">
|
|
39
|
+
<head>
|
|
40
|
+
<meta charset="UTF-8" />
|
|
41
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
42
|
+
<title>Slipstream — Deploy at the speed of thought</title>
|
|
43
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
44
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
45
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
46
|
+
<link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
47
|
+
<script>
|
|
48
|
+
tailwind.config = {
|
|
49
|
+
theme: {
|
|
50
|
+
extend: {
|
|
51
|
+
fontFamily: {
|
|
52
|
+
display: ['Syne', 'sans-serif'],
|
|
53
|
+
body: ['Inter', 'sans-serif'],
|
|
54
|
+
mono: ['JetBrains Mono', 'monospace'],
|
|
55
|
+
},
|
|
56
|
+
colors: {
|
|
57
|
+
stone: '#E8E4DE',
|
|
58
|
+
ink: '#0E0E0E',
|
|
59
|
+
live: '#16A34A',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
</script>
|
|
65
|
+
<style>
|
|
66
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
67
|
+
body { font-family: 'Inter', sans-serif; -webkit-font-smoothing: antialiased; }
|
|
68
|
+
|
|
69
|
+
/* Status dot pulse */
|
|
70
|
+
@keyframes livePulse {
|
|
71
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
72
|
+
50% { opacity: 0.4; transform: scale(0.7); }
|
|
73
|
+
}
|
|
74
|
+
.live-dot {
|
|
75
|
+
display: inline-block;
|
|
76
|
+
width: 7px;
|
|
77
|
+
height: 7px;
|
|
78
|
+
border-radius: 50%;
|
|
79
|
+
background: #16A34A;
|
|
80
|
+
animation: livePulse 2s ease-in-out infinite;
|
|
81
|
+
vertical-align: middle;
|
|
82
|
+
margin-right: 6px;
|
|
83
|
+
position: relative;
|
|
84
|
+
top: -1px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Hero entrance */
|
|
88
|
+
@keyframes heroIn {
|
|
89
|
+
from { opacity: 0; transform: translateY(4px); }
|
|
90
|
+
to { opacity: 1; transform: translateY(0); }
|
|
91
|
+
}
|
|
92
|
+
.hero-in {
|
|
93
|
+
animation: heroIn 0.5s ease-out 0.1s both;
|
|
94
|
+
}
|
|
95
|
+
.hero-in-delay {
|
|
96
|
+
animation: heroIn 0.5s ease-out 0.3s both;
|
|
97
|
+
}
|
|
98
|
+
.hero-in-delay2 {
|
|
99
|
+
animation: heroIn 0.5s ease-out 0.5s both;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Framework logos stagger */
|
|
103
|
+
.fw-logo { opacity: 0; animation: heroIn 0.4s ease-out both; }
|
|
104
|
+
.fw-logo:nth-child(1) { animation-delay: 0.6s; }
|
|
105
|
+
.fw-logo:nth-child(2) { animation-delay: 0.7s; }
|
|
106
|
+
.fw-logo:nth-child(3) { animation-delay: 0.8s; }
|
|
107
|
+
.fw-logo:nth-child(4) { animation-delay: 0.9s; }
|
|
108
|
+
.fw-logo:nth-child(5) { animation-delay: 1.0s; }
|
|
109
|
+
.fw-logo:nth-child(6) { animation-delay: 1.1s; }
|
|
110
|
+
|
|
111
|
+
/* CTA underline grow */
|
|
112
|
+
.cta-link {
|
|
113
|
+
position: relative;
|
|
114
|
+
text-decoration: none;
|
|
115
|
+
color: #0E0E0E;
|
|
116
|
+
font-weight: 500;
|
|
117
|
+
}
|
|
118
|
+
.cta-link::after {
|
|
119
|
+
content: '';
|
|
120
|
+
position: absolute;
|
|
121
|
+
left: 0; bottom: -2px;
|
|
122
|
+
width: 100%; height: 1px;
|
|
123
|
+
background: #0E0E0E;
|
|
124
|
+
transform: scaleX(1);
|
|
125
|
+
transform-origin: left;
|
|
126
|
+
transition: transform 0.2s ease;
|
|
127
|
+
}
|
|
128
|
+
.cta-link:hover::after {
|
|
129
|
+
transform: scaleX(0.3);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* Primary button */
|
|
133
|
+
.btn-primary {
|
|
134
|
+
display: inline-block;
|
|
135
|
+
background: #0E0E0E;
|
|
136
|
+
color: #fff;
|
|
137
|
+
font-family: 'Inter', sans-serif;
|
|
138
|
+
font-weight: 500;
|
|
139
|
+
font-size: 0.9rem;
|
|
140
|
+
padding: 12px 28px;
|
|
141
|
+
border-radius: 4px;
|
|
142
|
+
text-decoration: none;
|
|
143
|
+
letter-spacing: -0.01em;
|
|
144
|
+
transition: background 150ms;
|
|
145
|
+
}
|
|
146
|
+
.btn-primary:hover { background: #222; }
|
|
147
|
+
|
|
148
|
+
/* Feature row */
|
|
149
|
+
.feat-row {
|
|
150
|
+
border-top: 1px solid #E8E4DE;
|
|
151
|
+
transition: background 150ms;
|
|
152
|
+
}
|
|
153
|
+
.feat-row:hover { background: #FAFAFA; }
|
|
154
|
+
|
|
155
|
+
/* Divider */
|
|
156
|
+
.divider { border: none; border-top: 1px solid #E8E4DE; }
|
|
157
|
+
|
|
158
|
+
/* Nav */
|
|
159
|
+
.nav-item {
|
|
160
|
+
color: #0E0E0E;
|
|
161
|
+
opacity: 0.45;
|
|
162
|
+
text-decoration: none;
|
|
163
|
+
font-size: 0.875rem;
|
|
164
|
+
font-weight: 400;
|
|
165
|
+
transition: opacity 150ms;
|
|
166
|
+
}
|
|
167
|
+
.nav-item:hover { opacity: 1; }
|
|
168
|
+
|
|
169
|
+
/* Deploy log */
|
|
170
|
+
.deploy-log {
|
|
171
|
+
background: #F8F8F7;
|
|
172
|
+
border: 1px solid #E8E4DE;
|
|
173
|
+
border-radius: 4px;
|
|
174
|
+
font-family: 'JetBrains Mono', monospace;
|
|
175
|
+
font-size: 0.75rem;
|
|
176
|
+
line-height: 1.7;
|
|
177
|
+
padding: 20px 24px;
|
|
178
|
+
color: #0E0E0E;
|
|
179
|
+
}
|
|
180
|
+
</style>
|
|
181
|
+
</head>
|
|
182
|
+
<body class="bg-white text-ink">
|
|
183
|
+
|
|
184
|
+
<!-- NAV -->
|
|
185
|
+
<nav class="px-8 md:px-16 py-5 flex items-center justify-between border-b border-stone">
|
|
186
|
+
<a href="#" style="font-family: 'Syne', sans-serif; font-weight: 700; font-size: 1.1rem; color: #0E0E0E; text-decoration: none; letter-spacing: -0.02em;">Slipstream</a>
|
|
187
|
+
<div class="hidden md:flex items-center gap-8">
|
|
188
|
+
<a href="#" class="nav-item">Product</a>
|
|
189
|
+
<a href="#" class="nav-item">Docs</a>
|
|
190
|
+
<a href="#" class="nav-item">Pricing</a>
|
|
191
|
+
<a href="#" class="nav-item">Blog</a>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="flex items-center gap-6">
|
|
194
|
+
<a href="#" class="nav-item text-sm">Sign in</a>
|
|
195
|
+
<a href="#" class="btn-primary text-sm py-2 px-5">Start for free</a>
|
|
196
|
+
</div>
|
|
197
|
+
</nav>
|
|
198
|
+
|
|
199
|
+
<!-- HERO -->
|
|
200
|
+
<section class="px-8 md:px-16 pt-24 pb-20 max-w-7xl mx-auto">
|
|
201
|
+
|
|
202
|
+
<!-- Live status -->
|
|
203
|
+
<div class="hero-in mb-12">
|
|
204
|
+
<span class="live-dot"></span>
|
|
205
|
+
<span class="font-mono text-xs text-ink" style="opacity: 0.4; letter-spacing: 0.08em;">ALL SYSTEMS OPERATIONAL</span>
|
|
206
|
+
</div>
|
|
207
|
+
|
|
208
|
+
<!-- Headline -->
|
|
209
|
+
<h1 class="hero-in font-display font-800 text-ink leading-none tracking-tight" style="font-size: clamp(3rem, 7vw, 6.5rem); font-weight: 800; letter-spacing: -0.04em; max-width: 18ch;">
|
|
210
|
+
Deploy at the speed of thought.
|
|
211
|
+
</h1>
|
|
212
|
+
|
|
213
|
+
<!-- Subhead + CTA row -->
|
|
214
|
+
<div class="hero-in-delay mt-10 grid grid-cols-1 md:grid-cols-2 gap-10 items-end">
|
|
215
|
+
<p class="text-ink text-lg leading-relaxed" style="opacity: 0.55; max-width: 44ch; font-weight: 300;">
|
|
216
|
+
Git-connected deploys to a global edge network. Push your code — Slipstream builds, optimizes, and ships it worldwide in under a second. No servers. No ops. No waiting.
|
|
217
|
+
</p>
|
|
218
|
+
<div class="flex flex-col gap-4">
|
|
219
|
+
<a href="#" class="btn-primary self-start">Start deploying — free</a>
|
|
220
|
+
<a href="#" class="cta-link text-sm self-start" style="opacity: 0.5;">Read the documentation →</a>
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
|
|
224
|
+
<!-- Framework support -->
|
|
225
|
+
<div class="hero-in-delay2 mt-16 pt-10 border-t border-stone">
|
|
226
|
+
<p class="text-xs uppercase tracking-widest text-ink mb-6" style="opacity: 0.3; font-weight: 500; letter-spacing: 0.1em;">Works natively with</p>
|
|
227
|
+
<div class="flex flex-wrap gap-x-10 gap-y-4">
|
|
228
|
+
<span class="fw-logo font-mono text-sm text-ink" style="opacity: 0.5;">Next.js</span>
|
|
229
|
+
<span class="fw-logo font-mono text-sm text-ink" style="opacity: 0.5;">Remix</span>
|
|
230
|
+
<span class="fw-logo font-mono text-sm text-ink" style="opacity: 0.5;">SvelteKit</span>
|
|
231
|
+
<span class="fw-logo font-mono text-sm text-ink" style="opacity: 0.5;">Astro</span>
|
|
232
|
+
<span class="fw-logo font-mono text-sm text-ink" style="opacity: 0.5;">Nuxt</span>
|
|
233
|
+
<span class="fw-logo font-mono text-sm text-ink" style="opacity: 0.5;">Gatsby</span>
|
|
234
|
+
</div>
|
|
235
|
+
</div>
|
|
236
|
+
</section>
|
|
237
|
+
|
|
238
|
+
<hr class="divider mx-8 md:mx-16" />
|
|
239
|
+
|
|
240
|
+
<!-- FEATURE ROWS -->
|
|
241
|
+
<section class="max-w-7xl mx-auto px-8 md:px-16">
|
|
242
|
+
|
|
243
|
+
<div class="feat-row py-16 grid grid-cols-1 md:grid-cols-12 gap-8 items-start">
|
|
244
|
+
<div class="md:col-span-4">
|
|
245
|
+
<p class="font-mono text-xs tracking-widest uppercase text-ink mb-3" style="opacity: 0.3;">Git-native deploys</p>
|
|
246
|
+
<h3 class="font-display font-bold text-2xl tracking-tight leading-snug" style="font-size: 1.75rem;">Your workflow, unchanged.</h3>
|
|
247
|
+
</div>
|
|
248
|
+
<div class="md:col-span-4">
|
|
249
|
+
<p class="text-ink leading-relaxed text-sm" style="opacity: 0.55; font-weight: 300;">
|
|
250
|
+
Connect your repository once. Every push to any branch triggers a build. Merge to main and it goes to production. Branch deploys and PR previews happen automatically — no YAML, no CI scripts, no pipelines to maintain.
|
|
251
|
+
</p>
|
|
252
|
+
</div>
|
|
253
|
+
<div class="md:col-span-4">
|
|
254
|
+
<div class="deploy-log">
|
|
255
|
+
<p style="opacity: 0.4;">$ git push origin main</p>
|
|
256
|
+
<p style="color: #16A34A;">→ build started (next.js 14)</p>
|
|
257
|
+
<p style="opacity: 0.4;"> ✓ linting</p>
|
|
258
|
+
<p style="opacity: 0.4;"> ✓ type check</p>
|
|
259
|
+
<p style="opacity: 0.4;"> ✓ build (0.6s)</p>
|
|
260
|
+
<p style="color: #16A34A;">✓ deployed in 0.8s</p>
|
|
261
|
+
<p style="opacity: 0.4;"> → myapp.slipstream.app</p>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
|
|
266
|
+
<div class="feat-row py-16 grid grid-cols-1 md:grid-cols-12 gap-8 items-start">
|
|
267
|
+
<div class="md:col-span-4">
|
|
268
|
+
<p class="font-mono text-xs tracking-widest uppercase text-ink mb-3" style="opacity: 0.3;">Preview environments</p>
|
|
269
|
+
<h3 class="font-display font-bold text-2xl tracking-tight leading-snug" style="font-size: 1.75rem;">Every PR is a live deployment.</h3>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="md:col-span-4">
|
|
272
|
+
<p class="text-ink leading-relaxed text-sm" style="opacity: 0.55; font-weight: 300;">
|
|
273
|
+
Open a pull request and a full, isolated deployment spins up automatically — same build process, same environment variables, same edge network. Share the URL. Review it. Merge when it's right. The environment disappears on close.
|
|
274
|
+
</p>
|
|
275
|
+
</div>
|
|
276
|
+
<div class="md:col-span-4">
|
|
277
|
+
<!-- PR preview card -->
|
|
278
|
+
<div style="border: 1px solid #E8E4DE; border-radius: 4px; overflow: hidden; background: #FAFAFA;">
|
|
279
|
+
<div style="padding: 12px 16px; border-bottom: 1px solid #E8E4DE; background: #fff;">
|
|
280
|
+
<div style="display: flex; align-items: center; gap: 8px;">
|
|
281
|
+
<span style="width: 8px; height: 8px; border-radius: 50%; background: #16A34A; display: inline-block;"></span>
|
|
282
|
+
<span style="font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; color: #0E0E0E; opacity: 0.8;">feat/nav-redesign</span>
|
|
283
|
+
<span style="margin-left: auto; font-family: 'JetBrains Mono', monospace; font-size: 0.7rem; opacity: 0.4;">#38</span>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
<div style="padding: 14px 16px;">
|
|
287
|
+
<p style="font-family: 'JetBrains Mono', monospace; font-size: 0.7rem; opacity: 0.4; margin-bottom: 4px;">slipstream-bot</p>
|
|
288
|
+
<p style="font-size: 0.8rem; color: #0E0E0E; opacity: 0.7; margin-bottom: 8px;">Preview ready:</p>
|
|
289
|
+
<p style="font-family: 'JetBrains Mono', monospace; font-size: 0.72rem; color: #16A34A;">pr-38.preview.slipstream.app</p>
|
|
290
|
+
<div style="margin-top: 10px; display: grid; grid-template-columns: 1fr 1fr; gap: 8px;">
|
|
291
|
+
<div style="font-family: 'JetBrains Mono', monospace; font-size: 0.7rem;">
|
|
292
|
+
<p style="opacity: 0.35; margin-bottom: 2px;">build</p>
|
|
293
|
+
<p style="opacity: 0.8;">1.1s</p>
|
|
294
|
+
</div>
|
|
295
|
+
<div style="font-family: 'JetBrains Mono', monospace; font-size: 0.7rem;">
|
|
296
|
+
<p style="opacity: 0.35; margin-bottom: 2px;">status</p>
|
|
297
|
+
<p style="color: #16A34A;">live</p>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
|
|
305
|
+
<div class="feat-row py-16 grid grid-cols-1 md:grid-cols-12 gap-8 items-start">
|
|
306
|
+
<div class="md:col-span-4">
|
|
307
|
+
<p class="font-mono text-xs tracking-widest uppercase text-ink mb-3" style="opacity: 0.3;">Edge network</p>
|
|
308
|
+
<h3 class="font-display font-bold text-2xl tracking-tight leading-snug" style="font-size: 1.75rem;">Global by default.</h3>
|
|
309
|
+
</div>
|
|
310
|
+
<div class="md:col-span-4">
|
|
311
|
+
<p class="text-ink leading-relaxed text-sm" style="opacity: 0.55; font-weight: 300;">
|
|
312
|
+
Static assets are cached at 300+ edge locations. Serverless and edge functions run at the node closest to each request. Your app performs for users in São Paulo the same way it does for users in Seattle.
|
|
313
|
+
</p>
|
|
314
|
+
</div>
|
|
315
|
+
<div class="md:col-span-4">
|
|
316
|
+
<!-- Edge stats -->
|
|
317
|
+
<div class="grid grid-cols-2 gap-4">
|
|
318
|
+
<div style="padding: 16px; border: 1px solid #E8E4DE; border-radius: 4px;">
|
|
319
|
+
<p style="font-family: 'Syne', sans-serif; font-size: 1.8rem; font-weight: 800; color: #0E0E0E; letter-spacing: -0.03em;">300+</p>
|
|
320
|
+
<p style="font-size: 0.75rem; opacity: 0.4; margin-top: 4px;">edge locations</p>
|
|
321
|
+
</div>
|
|
322
|
+
<div style="padding: 16px; border: 1px solid #E8E4DE; border-radius: 4px;">
|
|
323
|
+
<p style="font-family: 'Syne', sans-serif; font-size: 1.8rem; font-weight: 800; color: #0E0E0E; letter-spacing: -0.03em;"><25ms</p>
|
|
324
|
+
<p style="font-size: 0.75rem; opacity: 0.4; margin-top: 4px;">p50 TTFB globally</p>
|
|
325
|
+
</div>
|
|
326
|
+
<div style="padding: 16px; border: 1px solid #E8E4DE; border-radius: 4px;">
|
|
327
|
+
<p style="font-family: 'Syne', sans-serif; font-size: 1.8rem; font-weight: 800; color: #0E0E0E; letter-spacing: -0.03em;">99.99%</p>
|
|
328
|
+
<p style="font-size: 0.75rem; opacity: 0.4; margin-top: 4px;">uptime SLA</p>
|
|
329
|
+
</div>
|
|
330
|
+
<div style="padding: 16px; border: 1px solid #E8E4DE; border-radius: 4px;">
|
|
331
|
+
<p style="font-family: 'Syne', sans-serif; font-size: 1.8rem; font-weight: 800; color: #0E0E0E; letter-spacing: -0.03em;">0</p>
|
|
332
|
+
<p style="font-size: 0.75rem; opacity: 0.4; margin-top: 4px;">servers to manage</p>
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
</div>
|
|
336
|
+
</div>
|
|
337
|
+
|
|
338
|
+
</section>
|
|
339
|
+
|
|
340
|
+
<hr class="divider mx-0" />
|
|
341
|
+
|
|
342
|
+
<!-- QUOTE -->
|
|
343
|
+
<section class="px-8 md:px-16 py-24 max-w-4xl mx-auto">
|
|
344
|
+
<blockquote>
|
|
345
|
+
<p class="font-display font-semibold text-ink leading-snug" style="font-size: clamp(1.5rem, 2.8vw, 2.25rem); letter-spacing: -0.025em; font-weight: 600;">
|
|
346
|
+
"The first time I pushed and watched it deploy before I could switch tabs, I closed our AWS console and never opened it again."
|
|
347
|
+
</p>
|
|
348
|
+
<footer class="mt-8 flex items-center gap-4">
|
|
349
|
+
<div style="width: 36px; height: 36px; border-radius: 50%; background: #E8E4DE; display: flex; align-items: center; justify-content: center;">
|
|
350
|
+
<span style="font-family: 'Inter', sans-serif; font-size: 0.8rem; font-weight: 600; color: #0E0E0E; opacity: 0.6;">DL</span>
|
|
351
|
+
</div>
|
|
352
|
+
<div>
|
|
353
|
+
<p style="font-size: 0.875rem; font-weight: 500; color: #0E0E0E;">Daniel Lee</p>
|
|
354
|
+
<p style="font-size: 0.8rem; color: #0E0E0E; opacity: 0.4;">CTO, Meridian Health</p>
|
|
355
|
+
</div>
|
|
356
|
+
</footer>
|
|
357
|
+
</blockquote>
|
|
358
|
+
</section>
|
|
359
|
+
|
|
360
|
+
<hr class="divider mx-0" />
|
|
361
|
+
|
|
362
|
+
<!-- PRICING -->
|
|
363
|
+
<section class="px-8 md:px-16 py-24 max-w-7xl mx-auto">
|
|
364
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-12 items-start mb-16">
|
|
365
|
+
<h2 class="font-display font-bold tracking-tight" style="font-size: clamp(2rem, 4vw, 3rem); letter-spacing: -0.035em; font-weight: 800;">Start free. Scale when you need to.</h2>
|
|
366
|
+
<p class="text-ink leading-relaxed" style="opacity: 0.5; font-weight: 300; font-size: 0.95rem; max-width: 44ch; padding-top: 0.5rem;">No credit card required to start. The free tier is generous enough to ship real projects. Upgrade only when your team grows.</p>
|
|
367
|
+
</div>
|
|
368
|
+
|
|
369
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
370
|
+
<div style="border: 1px solid #E8E4DE; border-radius: 4px; padding: 28px;">
|
|
371
|
+
<p class="font-display font-bold text-lg mb-1" style="letter-spacing: -0.02em;">Hobby</p>
|
|
372
|
+
<p style="font-family: 'Syne', sans-serif; font-size: 2.5rem; font-weight: 800; letter-spacing: -0.04em; color: #0E0E0E; margin-bottom: 2px;">$0</p>
|
|
373
|
+
<p style="font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; opacity: 0.35; margin-bottom: 24px;">forever</p>
|
|
374
|
+
<a href="#" class="btn-primary text-sm block text-center mb-6">Deploy now</a>
|
|
375
|
+
<ul style="list-style: none; padding: 0; margin: 0; font-size: 0.85rem; color: #0E0E0E; opacity: 0.55; line-height: 2;">
|
|
376
|
+
<li>3 projects</li>
|
|
377
|
+
<li>100 GB bandwidth</li>
|
|
378
|
+
<li>Preview environments</li>
|
|
379
|
+
<li>Edge functions</li>
|
|
380
|
+
<li>SSL, custom domains</li>
|
|
381
|
+
</ul>
|
|
382
|
+
</div>
|
|
383
|
+
|
|
384
|
+
<div style="border: 1.5px solid #0E0E0E; border-radius: 4px; padding: 28px; background: #0E0E0E;">
|
|
385
|
+
<p class="font-display font-bold text-lg mb-1" style="letter-spacing: -0.02em; color: #fff;">Pro</p>
|
|
386
|
+
<p style="font-family: 'Syne', sans-serif; font-size: 2.5rem; font-weight: 800; letter-spacing: -0.04em; color: #fff; margin-bottom: 2px;">$20</p>
|
|
387
|
+
<p style="font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; color: rgba(255,255,255,0.35); margin-bottom: 24px;">per member / month</p>
|
|
388
|
+
<a href="#" style="display: block; background: #fff; color: #0E0E0E; font-family: 'Inter', sans-serif; font-weight: 500; font-size: 0.9rem; padding: 12px 28px; border-radius: 4px; text-decoration: none; text-align: center; margin-bottom: 24px; transition: opacity 150ms;">Start Pro</a>
|
|
389
|
+
<ul style="list-style: none; padding: 0; margin: 0; font-size: 0.85rem; color: rgba(255,255,255,0.55); line-height: 2;">
|
|
390
|
+
<li>Unlimited projects</li>
|
|
391
|
+
<li>1 TB bandwidth</li>
|
|
392
|
+
<li>Team collaboration</li>
|
|
393
|
+
<li>Analytics dashboard</li>
|
|
394
|
+
<li>Priority support</li>
|
|
395
|
+
</ul>
|
|
396
|
+
</div>
|
|
397
|
+
|
|
398
|
+
<div style="border: 1px solid #E8E4DE; border-radius: 4px; padding: 28px;">
|
|
399
|
+
<p class="font-display font-bold text-lg mb-1" style="letter-spacing: -0.02em;">Enterprise</p>
|
|
400
|
+
<p style="font-family: 'Syne', sans-serif; font-size: 2.5rem; font-weight: 800; letter-spacing: -0.04em; color: #0E0E0E; margin-bottom: 2px;">Custom</p>
|
|
401
|
+
<p style="font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; opacity: 0.35; margin-bottom: 24px;">talk to sales</p>
|
|
402
|
+
<a href="#" class="btn-primary text-sm block text-center mb-6" style="background: transparent; color: #0E0E0E; border: 1px solid #E8E4DE;">Contact us</a>
|
|
403
|
+
<ul style="list-style: none; padding: 0; margin: 0; font-size: 0.85rem; color: #0E0E0E; opacity: 0.55; line-height: 2;">
|
|
404
|
+
<li>SSO / SAML</li>
|
|
405
|
+
<li>99.99% SLA</li>
|
|
406
|
+
<li>Dedicated support</li>
|
|
407
|
+
<li>Custom contracts</li>
|
|
408
|
+
<li>On-prem option</li>
|
|
409
|
+
</ul>
|
|
410
|
+
</div>
|
|
411
|
+
</div>
|
|
412
|
+
</section>
|
|
413
|
+
|
|
414
|
+
<hr class="divider" />
|
|
415
|
+
|
|
416
|
+
<!-- CTA -->
|
|
417
|
+
<section class="px-8 md:px-16 py-28 max-w-7xl mx-auto">
|
|
418
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-8 items-end">
|
|
419
|
+
<h2 class="font-display font-bold tracking-tight text-ink leading-none" style="font-size: clamp(2.5rem, 5vw, 4.5rem); letter-spacing: -0.04em; font-weight: 800;">
|
|
420
|
+
Ship your first deploy<br/>in two minutes.
|
|
421
|
+
</h2>
|
|
422
|
+
<div class="flex flex-col gap-4 md:items-end">
|
|
423
|
+
<p class="text-ink text-sm" style="opacity: 0.45; max-width: 34ch; text-align: right; font-weight: 300; line-height: 1.7;">Connect your repo, detect your framework, deploy to the global edge. No credit card, no config files, no waiting.</p>
|
|
424
|
+
<a href="#" class="btn-primary self-start md:self-end">Start deploying — it's free</a>
|
|
425
|
+
</div>
|
|
426
|
+
</div>
|
|
427
|
+
</section>
|
|
428
|
+
|
|
429
|
+
<!-- FOOTER -->
|
|
430
|
+
<footer class="border-t border-stone px-8 md:px-16 py-10">
|
|
431
|
+
<div class="max-w-7xl mx-auto flex flex-col md:flex-row items-start md:items-center justify-between gap-6">
|
|
432
|
+
<a href="#" style="font-family: 'Syne', sans-serif; font-weight: 700; font-size: 1rem; color: #0E0E0E; text-decoration: none; letter-spacing: -0.02em;">Slipstream</a>
|
|
433
|
+
<div class="flex flex-wrap gap-6" style="font-size: 0.8rem; color: #0E0E0E;">
|
|
434
|
+
<a href="#" class="nav-item">Product</a>
|
|
435
|
+
<a href="#" class="nav-item">Docs</a>
|
|
436
|
+
<a href="#" class="nav-item">Blog</a>
|
|
437
|
+
<a href="#" class="nav-item">Changelog</a>
|
|
438
|
+
<a href="#" class="nav-item">Status</a>
|
|
439
|
+
<a href="#" class="nav-item">Privacy</a>
|
|
440
|
+
<a href="#" class="nav-item">Terms</a>
|
|
441
|
+
</div>
|
|
442
|
+
<p style="font-family: 'JetBrains Mono', monospace; font-size: 0.7rem; color: #0E0E0E; opacity: 0.25;">© 2026 Slipstream, Inc.</p>
|
|
443
|
+
</div>
|
|
444
|
+
</footer>
|
|
445
|
+
|
|
446
|
+
</body>
|
|
447
|
+
</html>
|