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,144 @@
1
+ {
2
+ "corpus_version": "seed-v1",
3
+ "generation_model": "claude-opus-4-6",
4
+ "judge_model": "claude-opus-4-6",
5
+ "n_products": 5,
6
+ "n_runs_per_product": 3,
7
+ "win_rate_vs_C": {
8
+ "A": {
9
+ "mean": 0.333,
10
+ "by_product": {
11
+ "cadence": 0.167,
12
+ "tender": 0.333,
13
+ "slipstream": 0.167,
14
+ "voltage": 0.167,
15
+ "plume": 0.833
16
+ }
17
+ },
18
+ "B": {
19
+ "mean": 0.067,
20
+ "by_product": {
21
+ "cadence": 0,
22
+ "tender": 0,
23
+ "slipstream": 0,
24
+ "voltage": 0,
25
+ "plume": 0.333
26
+ }
27
+ }
28
+ },
29
+ "a_vs_b_win_rate": 0.9,
30
+ "rubric": {
31
+ "A": {
32
+ "hierarchy": {
33
+ "mean": 4.4,
34
+ "stdev": 0.737
35
+ },
36
+ "typography": {
37
+ "mean": 4.467,
38
+ "stdev": 0.64
39
+ },
40
+ "color": {
41
+ "mean": 3.933,
42
+ "stdev": 0.594
43
+ },
44
+ "whitespace": {
45
+ "mean": 4.133,
46
+ "stdev": 0.743
47
+ },
48
+ "originality": {
49
+ "mean": 4.267,
50
+ "stdev": 0.961
51
+ },
52
+ "mobile": {
53
+ "mean": 3.467,
54
+ "stdev": 0.64
55
+ }
56
+ },
57
+ "B": {
58
+ "hierarchy": {
59
+ "mean": 3.267,
60
+ "stdev": 0.704
61
+ },
62
+ "typography": {
63
+ "mean": 3.267,
64
+ "stdev": 0.458
65
+ },
66
+ "color": {
67
+ "mean": 3.133,
68
+ "stdev": 0.64
69
+ },
70
+ "whitespace": {
71
+ "mean": 3.467,
72
+ "stdev": 0.64
73
+ },
74
+ "originality": {
75
+ "mean": 2.467,
76
+ "stdev": 0.834
77
+ },
78
+ "mobile": {
79
+ "mean": 3.467,
80
+ "stdev": 0.516
81
+ }
82
+ },
83
+ "C": {
84
+ "hierarchy": {
85
+ "mean": 5,
86
+ "stdev": 0
87
+ },
88
+ "typography": {
89
+ "mean": 5,
90
+ "stdev": 0
91
+ },
92
+ "color": {
93
+ "mean": 4.8,
94
+ "stdev": 0.414
95
+ },
96
+ "whitespace": {
97
+ "mean": 5,
98
+ "stdev": 0
99
+ },
100
+ "originality": {
101
+ "mean": 4.8,
102
+ "stdev": 0.414
103
+ },
104
+ "mobile": {
105
+ "mean": 4.6,
106
+ "stdev": 0.507
107
+ }
108
+ }
109
+ },
110
+ "slop": {
111
+ "A": 1.2,
112
+ "B": 3.8,
113
+ "C": 0
114
+ },
115
+ "judge_calibration": {
116
+ "miscalibrated_runs": [
117
+ {
118
+ "product": "tender",
119
+ "run": 2,
120
+ "comparison": "A_vs_C",
121
+ "winner": "A"
122
+ },
123
+ {
124
+ "product": "plume",
125
+ "run": 1,
126
+ "comparison": "A_vs_C",
127
+ "winner": "A"
128
+ },
129
+ {
130
+ "product": "plume",
131
+ "run": 2,
132
+ "comparison": "A_vs_C",
133
+ "winner": "A"
134
+ },
135
+ {
136
+ "product": "plume",
137
+ "run": 2,
138
+ "comparison": "B_vs_C",
139
+ "winner": "B"
140
+ }
141
+ ],
142
+ "ok": false
143
+ }
144
+ }
@@ -0,0 +1,345 @@
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 - Ship it.</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ <style>
10
+ *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
11
+ :root{
12
+ --black:#0a0a0a;--white:#f5f5f0;--accent:#ff3d00;--gray:#888;--grayDark:#1a1a1a;--grayMid:#2a2a2a;
13
+ }
14
+ html{font-size:16px;scroll-behavior:smooth}
15
+ body{font-family:'Space Grotesk',sans-serif;background:var(--black);color:var(--white);line-height:1.5;-webkit-font-smoothing:antialiased}
16
+ a{color:inherit;text-decoration:none}
17
+
18
+ /* UTILITY */
19
+ .container{max-width:1280px;margin:0 auto;padding:0 2rem}
20
+ .mono{font-family:'JetBrains Mono',monospace}
21
+ .accent{color:var(--accent)}
22
+ .uppercase{text-transform:uppercase;letter-spacing:.15em;font-size:.75rem;font-weight:600}
23
+
24
+ /* NAV */
25
+ nav{position:fixed;top:0;left:0;right:0;z-index:100;padding:1.25rem 2rem;display:flex;justify-content:space-between;align-items:center;background:rgba(10,10,10,.92);backdrop-filter:blur(4px);border-bottom:1px solid var(--grayMid)}
26
+ nav .logo{font-weight:700;font-size:1.25rem;letter-spacing:-.02em}
27
+ nav .logo span{color:var(--accent)}
28
+ nav ul{list-style:none;display:flex;gap:2rem;font-size:.85rem;font-weight:500}
29
+ nav .cta-nav{background:var(--accent);color:var(--black);padding:.5rem 1.25rem;font-weight:700;font-size:.8rem;text-transform:uppercase;letter-spacing:.1em}
30
+
31
+ /* HERO — signature move: oversized terminal command */
32
+ .hero{min-height:100vh;display:flex;flex-direction:column;justify-content:center;padding-top:5rem;position:relative;overflow:hidden}
33
+ .hero-command{font-family:'JetBrains Mono',monospace;font-size:clamp(2.5rem,8vw,7rem);font-weight:500;line-height:1.1;letter-spacing:-.03em;margin-bottom:2rem}
34
+ .hero-command .prompt{color:var(--accent)}
35
+ .hero-command .cmd{color:var(--white)}
36
+ .hero-sub{font-size:clamp(1rem,2vw,1.35rem);color:var(--gray);max-width:540px;margin-bottom:3rem;line-height:1.6}
37
+ .hero-cta{display:inline-block;background:var(--accent);color:var(--black);padding:1rem 2.5rem;font-weight:700;font-size:1rem;text-transform:uppercase;letter-spacing:.12em;transition:background .15s}
38
+ .hero-cta:hover{background:#ff5722}
39
+ .hero-meta{margin-top:4rem;display:flex;gap:3rem;flex-wrap:wrap}
40
+ .hero-meta dt{font-size:.7rem;text-transform:uppercase;letter-spacing:.15em;color:var(--gray);margin-bottom:.25rem}
41
+ .hero-meta dd{font-family:'JetBrains Mono',monospace;font-size:1.5rem;font-weight:500}
42
+
43
+ /* DIVIDER */
44
+ .divider{border:none;border-top:1px solid var(--grayMid);margin:0}
45
+
46
+ /* DEPLOY LOG SECTION */
47
+ .deploy-section{padding:6rem 0}
48
+ .deploy-section h2{font-size:clamp(1.75rem,4vw,3rem);font-weight:700;letter-spacing:-.03em;margin-bottom:1rem}
49
+ .deploy-section .lead{color:var(--gray);font-size:1.05rem;max-width:560px;margin-bottom:3rem}
50
+ .deploy-grid{display:grid;grid-template-columns:1fr 1fr;gap:2rem;align-items:start}
51
+ .deploy-terminal{background:var(--grayDark);border:1px solid var(--grayMid);padding:1.5rem;font-family:'JetBrains Mono',monospace;font-size:.8rem;line-height:1.8;overflow-x:auto}
52
+ .deploy-terminal .line-ok{color:#4ade80}
53
+ .deploy-terminal .line-info{color:var(--gray)}
54
+ .deploy-terminal .line-accent{color:var(--accent)}
55
+ .deploy-terminal .header{display:flex;gap:.5rem;margin-bottom:1rem}
56
+ .deploy-terminal .dot{width:10px;height:10px;border-radius:50%;background:var(--grayMid);border:1px solid #444}
57
+ .deploy-features{display:flex;flex-direction:column;gap:2rem}
58
+ .deploy-features .feat{border-left:2px solid var(--accent);padding-left:1.25rem}
59
+ .deploy-features .feat h3{font-size:1rem;font-weight:600;margin-bottom:.35rem}
60
+ .deploy-features .feat p{color:var(--gray);font-size:.9rem;line-height:1.5}
61
+
62
+ /* FRAMEWORKS STRIP */
63
+ .frameworks{padding:5rem 0;border-top:1px solid var(--grayMid)}
64
+ .frameworks h2{font-size:.75rem;text-transform:uppercase;letter-spacing:.2em;color:var(--gray);margin-bottom:2.5rem}
65
+ .fw-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1.5rem}
66
+ .fw-card{border:1px solid var(--grayMid);padding:1.25rem;text-align:left;font-weight:600;font-size:.95rem;transition:border-color .15s}
67
+ .fw-card:hover{border-color:var(--accent)}
68
+ .fw-card span{display:block;font-family:'JetBrains Mono',monospace;font-size:.7rem;color:var(--gray);margin-top:.35rem;font-weight:400}
69
+
70
+ /* METRICS BAR */
71
+ .metrics{padding:5rem 0;border-top:1px solid var(--grayMid)}
72
+ .metrics-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem}
73
+ .metric{text-align:left}
74
+ .metric .val{font-size:clamp(2rem,4vw,3.5rem);font-weight:700;letter-spacing:-.04em;line-height:1}
75
+ .metric .val .unit{font-size:.5em;color:var(--accent);margin-left:.1em}
76
+ .metric .label{font-size:.75rem;text-transform:uppercase;letter-spacing:.15em;color:var(--gray);margin-top:.5rem}
77
+
78
+ /* WORKFLOW SECTION */
79
+ .workflow{padding:6rem 0;border-top:1px solid var(--grayMid)}
80
+ .workflow h2{font-size:clamp(1.75rem,4vw,3rem);font-weight:700;letter-spacing:-.03em;margin-bottom:3rem}
81
+ .workflow-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:0}
82
+ .step{padding:2rem;border:1px solid var(--grayMid);position:relative}
83
+ .step-num{font-family:'JetBrains Mono',monospace;font-size:3rem;font-weight:700;color:var(--accent);line-height:1;margin-bottom:1rem}
84
+ .step h3{font-size:1.1rem;font-weight:600;margin-bottom:.5rem}
85
+ .step p{font-size:.85rem;color:var(--gray);line-height:1.6}
86
+ .step code{font-family:'JetBrains Mono',monospace;font-size:.75rem;display:block;margin-top:.75rem;color:var(--white);background:var(--black);padding:.5rem .75rem;border:1px solid var(--grayMid)}
87
+
88
+ /* EDGE SECTION */
89
+ .edge{padding:6rem 0;border-top:1px solid var(--grayMid)}
90
+ .edge-layout{display:grid;grid-template-columns:1fr 1fr;gap:4rem;align-items:start}
91
+ .edge h2{font-size:clamp(1.75rem,4vw,2.5rem);font-weight:700;letter-spacing:-.02em;margin-bottom:1rem}
92
+ .edge .lead{color:var(--gray);font-size:1rem;line-height:1.6;margin-bottom:2rem}
93
+ .edge-locations{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem}
94
+ .edge-loc{font-family:'JetBrains Mono',monospace;font-size:.75rem;padding:.5rem .75rem;border:1px solid var(--grayMid);color:var(--gray)}
95
+ .edge-loc .region{color:var(--white);font-weight:500;display:block}
96
+ .edge-func{border:1px solid var(--grayMid);padding:1.5rem}
97
+ .edge-func h3{font-size:1rem;font-weight:600;margin-bottom:1rem}
98
+ .edge-func pre{font-family:'JetBrains Mono',monospace;font-size:.75rem;line-height:1.7;color:var(--gray);overflow-x:auto}
99
+ .edge-func pre .kw{color:var(--accent)}
100
+ .edge-func pre .str{color:#4ade80}
101
+ .edge-func pre .cmt{color:#555}
102
+
103
+ /* CTA BANNER */
104
+ .cta-banner{padding:6rem 0;border-top:1px solid var(--grayMid);text-align:left}
105
+ .cta-banner h2{font-size:clamp(2rem,5vw,4rem);font-weight:700;letter-spacing:-.04em;margin-bottom:1rem}
106
+ .cta-banner p{color:var(--gray);font-size:1.1rem;margin-bottom:2.5rem;max-width:480px}
107
+ .cta-banner .btn{display:inline-block;background:var(--accent);color:var(--black);padding:1.1rem 3rem;font-weight:700;font-size:1rem;text-transform:uppercase;letter-spacing:.12em;transition:background .15s}
108
+ .cta-banner .btn:hover{background:#ff5722}
109
+ .cta-banner .free{display:block;margin-top:.75rem;font-size:.8rem;color:var(--gray)}
110
+
111
+ /* FOOTER */
112
+ footer{border-top:1px solid var(--grayMid);padding:2rem 0;display:flex;justify-content:space-between;align-items:center;font-size:.75rem;color:var(--gray)}
113
+
114
+ /* RESPONSIVE */
115
+ @media(max-width:900px){
116
+ .deploy-grid,.workflow-steps,.edge-layout,.metrics-grid{grid-template-columns:1fr}
117
+ .edge-locations{grid-template-columns:repeat(2,1fr)}
118
+ nav ul{display:none}
119
+ .hero-meta{flex-direction:column;gap:1.5rem}
120
+ }
121
+ @media(max-width:600px){
122
+ .container{padding:0 1.25rem}
123
+ .edge-locations{grid-template-columns:1fr}
124
+ .fw-grid{grid-template-columns:repeat(2,1fr)}
125
+ }
126
+ </style>
127
+ </head>
128
+ <body>
129
+
130
+ <!-- NAV -->
131
+ <nav>
132
+ <div class="logo">SLIP<span>STREAM</span></div>
133
+ <ul>
134
+ <li><a href="#deploy">Deploy</a></li>
135
+ <li><a href="#frameworks">Frameworks</a></li>
136
+ <li><a href="#edge">Edge</a></li>
137
+ <li><a href="#workflow">How it works</a></li>
138
+ </ul>
139
+ <a href="#" class="cta-nav">Deploy now</a>
140
+ </nav>
141
+
142
+ <!-- HERO: Signature move = oversized terminal command as typography -->
143
+ <section class="hero">
144
+ <div class="container">
145
+ <div class="hero-command">
146
+ <span class="prompt">$</span> <span class="cmd">git push origin main</span>
147
+ </div>
148
+ <p class="hero-sub">That's the entire deploy process. Push your code. Slipstream builds it, ships it to 40+ edge locations, and hands you a live URL. No YAML. No containers. No waiting.</p>
149
+ <a href="#" class="hero-cta">Deploy now — free</a>
150
+ <dl class="hero-meta">
151
+ <div>
152
+ <dt>Build time</dt>
153
+ <dd>&lt;8s</dd>
154
+ </div>
155
+ <div>
156
+ <dt>Edge locations</dt>
157
+ <dd>42</dd>
158
+ </div>
159
+ <div>
160
+ <dt>Uptime</dt>
161
+ <dd>99.99%</dd>
162
+ </div>
163
+ <div>
164
+ <dt>Deploys / day</dt>
165
+ <dd>1.2M+</dd>
166
+ </div>
167
+ </dl>
168
+ </div>
169
+ </section>
170
+
171
+ <hr class="divider">
172
+
173
+ <!-- DEPLOY LOG -->
174
+ <section class="deploy-section" id="deploy">
175
+ <div class="container">
176
+ <h2>Every push, deployed.</h2>
177
+ <p class="lead">Connect your repository. Slipstream detects the framework, installs dependencies, builds, and deploys. Every pull request gets its own preview URL.</p>
178
+ <div class="deploy-grid">
179
+ <div class="deploy-terminal">
180
+ <div class="header"><span class="dot"></span><span class="dot"></span><span class="dot"></span></div>
181
+ <div class="line-info">$ slipstream deploy</div>
182
+ <div class="line-info">Detecting framework... <span class="line-ok">Next.js 14.2</span></div>
183
+ <div class="line-info">Installing dependencies...</div>
184
+ <div class="line-ok">&#10003; 1,247 modules installed (2.1s)</div>
185
+ <div class="line-info">Building...</div>
186
+ <div class="line-ok">&#10003; Build complete (4.8s)</div>
187
+ <div class="line-info">Deploying to edge network...</div>
188
+ <div class="line-ok">&#10003; 42 regions propagated (1.2s)</div>
189
+ <div class="line-info">Assigning URL...</div>
190
+ <div class="line-accent">&#9654; https://app-git-main.slipstream.app</div>
191
+ <br>
192
+ <div class="line-ok">Deploy complete in 8.1s</div>
193
+ </div>
194
+ <div class="deploy-features">
195
+ <div class="feat">
196
+ <h3>Preview deployments</h3>
197
+ <p>Every pull request gets a unique, shareable URL. Review changes in production conditions before merging. Comments sync back to your PR.</p>
198
+ </div>
199
+ <div class="feat">
200
+ <h3>Instant rollbacks</h3>
201
+ <p>Every deploy is immutable. Roll back to any previous deployment with a single click. No rebuild required.</p>
202
+ </div>
203
+ <div class="feat">
204
+ <h3>Zero configuration</h3>
205
+ <p>Framework detection, build settings, and output routing are handled automatically. Override anything when you need to.</p>
206
+ </div>
207
+ <div class="feat">
208
+ <h3>Branch environments</h3>
209
+ <p>Every branch gets its own environment with isolated serverless functions, environment variables, and edge config. Test in production parity.</p>
210
+ </div>
211
+ </div>
212
+ </div>
213
+ </div>
214
+ </section>
215
+
216
+ <hr class="divider">
217
+
218
+ <!-- FRAMEWORKS -->
219
+ <section class="frameworks" id="frameworks">
220
+ <div class="container">
221
+ <h2>First-class framework support</h2>
222
+ <div class="fw-grid">
223
+ <div class="fw-card">Next.js<span>App Router, SSR, ISR</span></div>
224
+ <div class="fw-card">React<span>SPA, Vite, CRA</span></div>
225
+ <div class="fw-card">Svelte<span>SvelteKit, Vite</span></div>
226
+ <div class="fw-card">Astro<span>SSG, SSR, Islands</span></div>
227
+ <div class="fw-card">Nuxt<span>Vue 3, Nitro</span></div>
228
+ <div class="fw-card">Remix<span>Full-stack, loaders</span></div>
229
+ <div class="fw-card">Angular<span>SSR, prerender</span></div>
230
+ <div class="fw-card">Solid<span>SolidStart</span></div>
231
+ </div>
232
+ </div>
233
+ </section>
234
+
235
+ <!-- METRICS -->
236
+ <section class="metrics">
237
+ <div class="container">
238
+ <div class="metrics-grid">
239
+ <div class="metric">
240
+ <div class="val">50<span class="unit">ms</span></div>
241
+ <div class="label">Median TTFB globally</div>
242
+ </div>
243
+ <div class="metric">
244
+ <div class="val">99.99<span class="unit">%</span></div>
245
+ <div class="label">Uptime SLA</div>
246
+ </div>
247
+ <div class="metric">
248
+ <div class="val">1.2<span class="unit">M</span></div>
249
+ <div class="label">Deploys per day</div>
250
+ </div>
251
+ <div class="metric">
252
+ <div class="val">42</div>
253
+ <div class="label">Edge regions</div>
254
+ </div>
255
+ </div>
256
+ </div>
257
+ </section>
258
+
259
+ <!-- WORKFLOW -->
260
+ <section class="workflow" id="workflow">
261
+ <div class="container">
262
+ <h2>Three commands. That's it.</h2>
263
+ <div class="workflow-steps">
264
+ <div class="step">
265
+ <div class="step-num">01</div>
266
+ <h3>Connect</h3>
267
+ <p>Link your GitHub, GitLab, or Bitbucket repository. Slipstream reads your framework and configures the build pipeline.</p>
268
+ <code>$ slipstream link github.com/team/app</code>
269
+ </div>
270
+ <div class="step">
271
+ <div class="step-num">02</div>
272
+ <h3>Push</h3>
273
+ <p>Push to any branch. Slipstream builds and deploys automatically. Preview URLs for branches, production URL for main.</p>
274
+ <code>$ git push origin feature/auth</code>
275
+ </div>
276
+ <div class="step">
277
+ <div class="step-num">03</div>
278
+ <h3>Ship</h3>
279
+ <p>Merge your PR. Production updates in seconds. Instant rollback if anything goes wrong. Global CDN invalidation included.</p>
280
+ <code>$ gh pr merge --squash</code>
281
+ </div>
282
+ </div>
283
+ </div>
284
+ </section>
285
+
286
+ <!-- EDGE -->
287
+ <section class="edge" id="edge">
288
+ <div class="container">
289
+ <div class="edge-layout">
290
+ <div>
291
+ <h2>Edge functions. No cold starts.</h2>
292
+ <p class="lead">Run server-side logic at the edge. API routes, middleware, authentication, redirects -- all deployed alongside your frontend, executed in the region closest to your user.</p>
293
+ <div class="edge-locations">
294
+ <div class="edge-loc"><span class="region">IAD</span>Virginia</div>
295
+ <div class="edge-loc"><span class="region">SFO</span>San Francisco</div>
296
+ <div class="edge-loc"><span class="region">LHR</span>London</div>
297
+ <div class="edge-loc"><span class="region">FRA</span>Frankfurt</div>
298
+ <div class="edge-loc"><span class="region">NRT</span>Tokyo</div>
299
+ <div class="edge-loc"><span class="region">SYD</span>Sydney</div>
300
+ <div class="edge-loc"><span class="region">GRU</span>Sao Paulo</div>
301
+ <div class="edge-loc"><span class="region">SIN</span>Singapore</div>
302
+ <div class="edge-loc"><span class="region">BOM</span>Mumbai</div>
303
+ </div>
304
+ </div>
305
+ <div class="edge-func">
306
+ <h3>api/hello.ts</h3>
307
+ <pre><span class="kw">export default</span> <span class="kw">function</span> handler(req: Request) {
308
+ <span class="kw">const</span> city = req.geo?.city ?? <span class="str">'somewhere'</span>;
309
+
310
+ <span class="kw">return new</span> Response(
311
+ JSON.stringify({
312
+ message: <span class="str">`Hello from ${city}`</span>,
313
+ region: process.env.SLIPSTREAM_REGION,
314
+ latency: <span class="str">'&lt;10ms'</span>,
315
+ }),
316
+ {
317
+ headers: { <span class="str">'content-type'</span>: <span class="str">'application/json'</span> },
318
+ }
319
+ );
320
+ }</pre>
321
+ </div>
322
+ </div>
323
+ </div>
324
+ </section>
325
+
326
+ <!-- CTA -->
327
+ <section class="cta-banner">
328
+ <div class="container">
329
+ <h2>Stop configuring.<br>Start shipping.</h2>
330
+ <p>Free for personal projects. No credit card required. Deploy your first app in under a minute.</p>
331
+ <a href="#" class="btn">Deploy now</a>
332
+ <span class="free">Free tier includes 100GB bandwidth, unlimited preview deploys, and edge functions.</span>
333
+ </div>
334
+ </section>
335
+
336
+ <!-- FOOTER -->
337
+ <footer>
338
+ <div class="container" style="display:flex;justify-content:space-between;width:100%">
339
+ <span>Slipstream 2026</span>
340
+ <span class="mono" style="font-size:.7rem">Build. Push. Live.</span>
341
+ </div>
342
+ </footer>
343
+
344
+ </body>
345
+ </html>