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,594 @@
|
|
|
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>Plume — Keyboard-driven project management</title>
|
|
7
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
8
|
+
<script>
|
|
9
|
+
tailwind.config = {
|
|
10
|
+
theme: {
|
|
11
|
+
extend: {
|
|
12
|
+
fontFamily: {
|
|
13
|
+
display: ['"Playfair Display"', 'Georgia', 'serif'],
|
|
14
|
+
body: ['"DM Sans"', 'system-ui', 'sans-serif'],
|
|
15
|
+
mono: ['"IBM Plex Mono"', 'monospace'],
|
|
16
|
+
},
|
|
17
|
+
colors: {
|
|
18
|
+
stone: {
|
|
19
|
+
925: '#1a1816',
|
|
20
|
+
950: '#12110f',
|
|
21
|
+
},
|
|
22
|
+
amber: {
|
|
23
|
+
350: '#fbbf6a',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
</script>
|
|
30
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
31
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
32
|
+
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=Playfair+Display:ital,wght@0,700;0,800;1,700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
33
|
+
<style>
|
|
34
|
+
:root {
|
|
35
|
+
--sand: #f5f0e8;
|
|
36
|
+
--ink: #1a1816;
|
|
37
|
+
--amber: #d97706;
|
|
38
|
+
--amber-light: #fbbf24;
|
|
39
|
+
--muted: #6b6560;
|
|
40
|
+
--border: #e8e0d4;
|
|
41
|
+
--surface: #faf7f2;
|
|
42
|
+
}
|
|
43
|
+
body {
|
|
44
|
+
background: var(--sand);
|
|
45
|
+
color: var(--ink);
|
|
46
|
+
font-family: 'DM Sans', system-ui, sans-serif;
|
|
47
|
+
}
|
|
48
|
+
h1, h2, .serif { font-family: 'Playfair Display', Georgia, serif; }
|
|
49
|
+
.mono { font-family: 'IBM Plex Mono', monospace; }
|
|
50
|
+
.border-ink { border-color: var(--ink); }
|
|
51
|
+
.text-muted { color: var(--muted); }
|
|
52
|
+
.bg-surface { background: var(--surface); }
|
|
53
|
+
.border-sand { border-color: var(--border); }
|
|
54
|
+
.divider { border-top: 1px solid var(--border); }
|
|
55
|
+
.kbd {
|
|
56
|
+
display: inline-block;
|
|
57
|
+
font-family: 'IBM Plex Mono', monospace;
|
|
58
|
+
font-size: 11px;
|
|
59
|
+
font-weight: 500;
|
|
60
|
+
padding: 2px 7px;
|
|
61
|
+
background: white;
|
|
62
|
+
border: 1px solid var(--border);
|
|
63
|
+
border-bottom: 2px solid #d4ccc2;
|
|
64
|
+
border-radius: 4px;
|
|
65
|
+
color: var(--muted);
|
|
66
|
+
}
|
|
67
|
+
.issue-row { border-bottom: 1px solid var(--border); }
|
|
68
|
+
.issue-row:last-child { border-bottom: none; }
|
|
69
|
+
.amber-underline {
|
|
70
|
+
text-decoration: underline;
|
|
71
|
+
text-decoration-color: var(--amber);
|
|
72
|
+
text-decoration-thickness: 3px;
|
|
73
|
+
text-underline-offset: 4px;
|
|
74
|
+
}
|
|
75
|
+
.badge {
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: 4px;
|
|
79
|
+
padding: 2px 8px;
|
|
80
|
+
border-radius: 100px;
|
|
81
|
+
font-size: 11px;
|
|
82
|
+
font-weight: 500;
|
|
83
|
+
}
|
|
84
|
+
.badge-todo { background: #f0ede8; color: #6b6560; border: 1px solid #e0d9d0; }
|
|
85
|
+
.badge-progress { background: #fffbeb; color: #92400e; border: 1px solid #fde68a; }
|
|
86
|
+
.badge-review { background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe; }
|
|
87
|
+
.badge-done { background: #f0fdf4; color: #15803d; border: 1px solid #bbf7d0; }
|
|
88
|
+
.priority-urgent { color: #dc2626; }
|
|
89
|
+
.priority-high { color: #d97706; }
|
|
90
|
+
.priority-medium { color: #6b7280; }
|
|
91
|
+
.priority-low { color: #d4ccc2; }
|
|
92
|
+
.tag {
|
|
93
|
+
display: inline-block;
|
|
94
|
+
padding: 2px 8px;
|
|
95
|
+
font-size: 11px;
|
|
96
|
+
border-radius: 3px;
|
|
97
|
+
background: #f0ede8;
|
|
98
|
+
border: 1px solid var(--border);
|
|
99
|
+
color: var(--muted);
|
|
100
|
+
}
|
|
101
|
+
.cta-btn {
|
|
102
|
+
display: inline-flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
gap: 8px;
|
|
105
|
+
padding: 14px 28px;
|
|
106
|
+
background: var(--ink);
|
|
107
|
+
color: var(--sand);
|
|
108
|
+
font-weight: 600;
|
|
109
|
+
font-size: 15px;
|
|
110
|
+
border-radius: 4px;
|
|
111
|
+
transition: all 0.15s;
|
|
112
|
+
text-decoration: none;
|
|
113
|
+
}
|
|
114
|
+
.cta-btn:hover { background: #2d2b27; }
|
|
115
|
+
.cta-secondary {
|
|
116
|
+
display: inline-flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
gap: 8px;
|
|
119
|
+
padding: 13px 28px;
|
|
120
|
+
background: transparent;
|
|
121
|
+
color: var(--ink);
|
|
122
|
+
font-weight: 500;
|
|
123
|
+
font-size: 15px;
|
|
124
|
+
border-radius: 4px;
|
|
125
|
+
border: 1px solid var(--ink);
|
|
126
|
+
transition: all 0.15s;
|
|
127
|
+
text-decoration: none;
|
|
128
|
+
}
|
|
129
|
+
.cta-secondary:hover { background: rgba(26,24,22,0.05); }
|
|
130
|
+
.number-big {
|
|
131
|
+
font-family: 'Playfair Display', serif;
|
|
132
|
+
font-size: 4rem;
|
|
133
|
+
font-weight: 700;
|
|
134
|
+
line-height: 1;
|
|
135
|
+
color: var(--ink);
|
|
136
|
+
}
|
|
137
|
+
</style>
|
|
138
|
+
</head>
|
|
139
|
+
<body class="antialiased">
|
|
140
|
+
|
|
141
|
+
<!-- Nav -->
|
|
142
|
+
<nav style="border-bottom: 1px solid var(--border);" class="bg-surface sticky top-0 z-50">
|
|
143
|
+
<div class="max-w-6xl mx-auto px-6 h-14 flex items-center justify-between">
|
|
144
|
+
<div class="flex items-center gap-8">
|
|
145
|
+
<div class="flex items-center gap-2.5">
|
|
146
|
+
<div class="w-6 h-6 rounded" style="background: var(--ink);">
|
|
147
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
148
|
+
<circle cx="12" cy="12" r="4" fill="#f5f0e8"/>
|
|
149
|
+
<path d="M12 5C8.13 5 5 8.13 5 12" stroke="#f5f0e8" stroke-width="2" stroke-linecap="round"/>
|
|
150
|
+
</svg>
|
|
151
|
+
</div>
|
|
152
|
+
<span class="font-semibold text-base" style="color: var(--ink);">Plume</span>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="hidden md:flex items-center gap-6 text-sm" style="color: var(--muted);">
|
|
155
|
+
<a href="#product" class="hover:text-stone-900 transition-colors">Product</a>
|
|
156
|
+
<a href="#integrations" class="hover:text-stone-900 transition-colors">Integrations</a>
|
|
157
|
+
<a href="#pricing" class="hover:text-stone-900 transition-colors">Pricing</a>
|
|
158
|
+
<a href="#blog" class="hover:text-stone-900 transition-colors">Blog</a>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="flex items-center gap-3">
|
|
162
|
+
<a href="#" class="text-sm hidden sm:block" style="color: var(--muted);">Log in</a>
|
|
163
|
+
<a href="#signup" class="cta-btn" style="padding: 8px 20px; font-size: 13px; border-radius: 4px;">Get started</a>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</nav>
|
|
167
|
+
|
|
168
|
+
<!-- Hero - editorial, print-inspired -->
|
|
169
|
+
<section class="max-w-6xl mx-auto px-6 pt-16 pb-8">
|
|
170
|
+
<div class="grid md:grid-cols-2 gap-0 items-start">
|
|
171
|
+
<!-- Left: big editorial headline -->
|
|
172
|
+
<div class="md:border-r pr-0 md:pr-12" style="border-color: var(--border);">
|
|
173
|
+
<div class="text-xs mono uppercase tracking-widest mb-5" style="color: var(--muted);">Vol. I — Issue tracking, reconsidered</div>
|
|
174
|
+
<h1 class="text-7xl md:text-8xl font-bold serif leading-none tracking-tight mb-0" style="color: var(--ink);">
|
|
175
|
+
The<br/>
|
|
176
|
+
<span class="italic amber-underline">fast</span><br/>
|
|
177
|
+
way to<br/>
|
|
178
|
+
ship.
|
|
179
|
+
</h1>
|
|
180
|
+
<div class="mt-8 mb-8 max-w-xs">
|
|
181
|
+
<p class="text-base leading-relaxed" style="color: var(--muted);">Plume is the project management tool for software teams who value their time. Opinionated. Keyboard-native. Built so nothing gets in the way of the work.</p>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="flex flex-col sm:flex-row gap-3">
|
|
184
|
+
<a href="#signup" class="cta-btn">Get started free</a>
|
|
185
|
+
<a href="#demo" class="cta-secondary">See it in action</a>
|
|
186
|
+
</div>
|
|
187
|
+
<p class="text-xs mt-4" style="color: var(--muted);">Free up to 10 people. No credit card.</p>
|
|
188
|
+
</div>
|
|
189
|
+
|
|
190
|
+
<!-- Right: issue list mockup -->
|
|
191
|
+
<div class="mt-12 md:mt-0 md:pl-12">
|
|
192
|
+
<div class="text-xs mono uppercase tracking-widest mb-3" style="color: var(--muted);">Active — Sprint 12 · 9 of 14 done</div>
|
|
193
|
+
|
|
194
|
+
<!-- Progress bar -->
|
|
195
|
+
<div class="h-1.5 rounded-full mb-6 overflow-hidden" style="background: var(--border);">
|
|
196
|
+
<div class="h-full rounded-full" style="width: 64%; background: var(--ink);"></div>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<!-- Issue list -->
|
|
200
|
+
<div class="bg-surface rounded-lg overflow-hidden" style="border: 1px solid var(--border);">
|
|
201
|
+
<!-- Issue items -->
|
|
202
|
+
<div class="issue-row px-4 py-3 flex items-center gap-3 hover:bg-white/60 transition-colors cursor-pointer">
|
|
203
|
+
<span class="priority-urgent flex-shrink-0">
|
|
204
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor"><path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm8-3.5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 018 4.5zm0 7a1 1 0 110-2 1 1 0 010 2z"/></svg>
|
|
205
|
+
</span>
|
|
206
|
+
<span class="mono text-xs flex-shrink-0" style="color: var(--muted);">PLM-47</span>
|
|
207
|
+
<span class="text-sm flex-1 truncate font-medium">Fix rate limiting on GraphQL subscriptions</span>
|
|
208
|
+
<span class="badge badge-progress flex-shrink-0">In progress</span>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div class="issue-row px-4 py-3 flex items-center gap-3 hover:bg-white/60 transition-colors cursor-pointer bg-amber-50/50">
|
|
212
|
+
<span class="priority-high flex-shrink-0">
|
|
213
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor"><path d="M8 2a.75.75 0 01.75.75v6.5a.75.75 0 01-1.5 0v-6.5A.75.75 0 018 2zm0 9.5a1 1 0 110 2 1 1 0 010-2z"/></svg>
|
|
214
|
+
</span>
|
|
215
|
+
<span class="mono text-xs flex-shrink-0" style="color: var(--muted);">PLM-46</span>
|
|
216
|
+
<span class="text-sm flex-1 truncate font-medium">Keyboard shortcut conflicts in issue detail</span>
|
|
217
|
+
<span class="badge badge-review flex-shrink-0">In review</span>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<div class="issue-row px-4 py-3 flex items-center gap-3 hover:bg-white/60 transition-colors cursor-pointer">
|
|
221
|
+
<span class="priority-high flex-shrink-0">
|
|
222
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor"><path d="M8 2a.75.75 0 01.75.75v6.5a.75.75 0 01-1.5 0v-6.5A.75.75 0 018 2zm0 9.5a1 1 0 110 2 1 1 0 010-2z"/></svg>
|
|
223
|
+
</span>
|
|
224
|
+
<span class="mono text-xs flex-shrink-0" style="color: var(--muted);">PLM-44</span>
|
|
225
|
+
<span class="text-sm flex-1 truncate font-medium">Bulk triage: reassign selected issues</span>
|
|
226
|
+
<span class="badge badge-todo flex-shrink-0">Todo</span>
|
|
227
|
+
</div>
|
|
228
|
+
|
|
229
|
+
<div class="issue-row px-4 py-3 flex items-center gap-3 hover:bg-white/60 transition-colors cursor-pointer">
|
|
230
|
+
<span class="priority-medium flex-shrink-0">
|
|
231
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="none"><rect x="2" y="7" width="12" height="2" rx="1" fill="currentColor"/></svg>
|
|
232
|
+
</span>
|
|
233
|
+
<span class="mono text-xs flex-shrink-0" style="color: var(--muted);">PLM-43</span>
|
|
234
|
+
<span class="text-sm flex-1 truncate" style="color: var(--muted);">Roadmap quarter view — Safari rendering</span>
|
|
235
|
+
<span class="badge badge-done flex-shrink-0">Done</span>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
<div class="issue-row px-4 py-3 flex items-center gap-3 hover:bg-white/60 transition-colors cursor-pointer">
|
|
239
|
+
<span class="priority-medium flex-shrink-0">
|
|
240
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="none"><rect x="2" y="7" width="12" height="2" rx="1" fill="currentColor"/></svg>
|
|
241
|
+
</span>
|
|
242
|
+
<span class="mono text-xs flex-shrink-0" style="color: var(--muted);">PLM-42</span>
|
|
243
|
+
<span class="text-sm flex-1 truncate" style="color: var(--muted);">Webhook delivery retry queue overflow</span>
|
|
244
|
+
<span class="badge badge-done flex-shrink-0">Done</span>
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
<div class="px-4 py-2.5 flex items-center justify-between" style="background: var(--surface);">
|
|
248
|
+
<div class="flex items-center gap-2">
|
|
249
|
+
<span class="kbd">C</span>
|
|
250
|
+
<span class="text-xs" style="color: var(--muted);">New issue</span>
|
|
251
|
+
</div>
|
|
252
|
+
<div class="flex items-center gap-2">
|
|
253
|
+
<span class="kbd">⌘K</span>
|
|
254
|
+
<span class="text-xs" style="color: var(--muted);">Command palette</span>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
</div>
|
|
258
|
+
|
|
259
|
+
<!-- Keyboard hint strip -->
|
|
260
|
+
<div class="mt-4 grid grid-cols-3 gap-2">
|
|
261
|
+
<div class="text-center p-2 rounded" style="border: 1px solid var(--border); background: var(--surface);">
|
|
262
|
+
<span class="kbd block w-fit mx-auto mb-1">P</span>
|
|
263
|
+
<span class="text-xs" style="color: var(--muted);">Priority</span>
|
|
264
|
+
</div>
|
|
265
|
+
<div class="text-center p-2 rounded" style="border: 1px solid var(--border); background: var(--surface);">
|
|
266
|
+
<span class="kbd block w-fit mx-auto mb-1">A</span>
|
|
267
|
+
<span class="text-xs" style="color: var(--muted);">Assign</span>
|
|
268
|
+
</div>
|
|
269
|
+
<div class="text-center p-2 rounded" style="border: 1px solid var(--border); background: var(--surface);">
|
|
270
|
+
<span class="kbd block w-fit mx-auto mb-1">M</span>
|
|
271
|
+
<span class="text-xs" style="color: var(--muted);">Move</span>
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
</section>
|
|
277
|
+
|
|
278
|
+
<!-- Horizontal rule with pull quote -->
|
|
279
|
+
<div class="max-w-6xl mx-auto px-6 my-16 divider pt-10">
|
|
280
|
+
<div class="grid md:grid-cols-3 gap-8">
|
|
281
|
+
<div class="md:col-span-2">
|
|
282
|
+
<blockquote class="text-3xl font-bold serif leading-tight italic" style="color: var(--ink);">
|
|
283
|
+
"The project tool that finally treats engineers like the professionals they are."
|
|
284
|
+
</blockquote>
|
|
285
|
+
</div>
|
|
286
|
+
<div class="flex flex-col justify-end">
|
|
287
|
+
<div class="text-sm font-semibold" style="color: var(--ink);">Katja Reiner</div>
|
|
288
|
+
<div class="text-sm" style="color: var(--muted);">CTO, Meridian Systems</div>
|
|
289
|
+
<div class="flex gap-1 mt-2">
|
|
290
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor" style="color: var(--amber)"><path d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 11.771l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"/></svg>
|
|
291
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor" style="color: var(--amber)"><path d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 11.771l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"/></svg>
|
|
292
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor" style="color: var(--amber)"><path d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 11.771l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"/></svg>
|
|
293
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor" style="color: var(--amber)"><path d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 11.771l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"/></svg>
|
|
294
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="currentColor" style="color: var(--amber)"><path d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 11.771l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"/></svg>
|
|
295
|
+
</div>
|
|
296
|
+
</div>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
|
|
300
|
+
<!-- Stats row -->
|
|
301
|
+
<div class="max-w-6xl mx-auto px-6 my-16 divider pt-10">
|
|
302
|
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-8 md:gap-0 md:divide-x divide-stone-200">
|
|
303
|
+
<div class="md:px-8 first:pl-0">
|
|
304
|
+
<div class="number-big">47<span class="text-4xl text-amber-500">k</span></div>
|
|
305
|
+
<div class="text-sm mt-1" style="color: var(--muted);">Issues closed this month</div>
|
|
306
|
+
</div>
|
|
307
|
+
<div class="md:px-8">
|
|
308
|
+
<div class="number-big">3.2<span class="text-4xl text-amber-500">ms</span></div>
|
|
309
|
+
<div class="text-sm mt-1" style="color: var(--muted);">Median response time</div>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="md:px-8">
|
|
312
|
+
<div class="number-big">98<span class="text-4xl text-amber-500">%</span></div>
|
|
313
|
+
<div class="text-sm mt-1" style="color: var(--muted);">Teams renewing annually</div>
|
|
314
|
+
</div>
|
|
315
|
+
<div class="md:px-8">
|
|
316
|
+
<div class="number-big">0</div>
|
|
317
|
+
<div class="text-sm mt-1" style="color: var(--muted);">Required status meetings</div>
|
|
318
|
+
</div>
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
|
|
322
|
+
<!-- Features — editorial three column -->
|
|
323
|
+
<section id="product" class="max-w-6xl mx-auto px-6 py-16 divider">
|
|
324
|
+
<div class="mb-10">
|
|
325
|
+
<div class="text-xs mono uppercase tracking-widest mb-2" style="color: var(--muted);">What's inside</div>
|
|
326
|
+
<h2 class="text-4xl font-bold serif" style="color: var(--ink);">Everything a team needs to plan, prioritize, and ship.</h2>
|
|
327
|
+
</div>
|
|
328
|
+
|
|
329
|
+
<div class="grid md:grid-cols-3 gap-0 md:divide-x" style="border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);">
|
|
330
|
+
<div class="py-8 md:pr-8 md:first:pl-0">
|
|
331
|
+
<div class="text-xs mono uppercase tracking-wider mb-3" style="color: var(--muted);">01 — Issues</div>
|
|
332
|
+
<h3 class="text-xl font-bold serif mb-3" style="color: var(--ink);">The issue is the atom of work.</h3>
|
|
333
|
+
<p class="text-sm leading-relaxed mb-4" style="color: var(--muted);">Status, priority, labels, assignee, cycle, project — every field reachable from the keyboard. No mouse required, ever.</p>
|
|
334
|
+
<div class="space-y-1.5 text-sm" style="color: var(--muted);">
|
|
335
|
+
<div class="flex items-center gap-2">
|
|
336
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
337
|
+
Markdown-native descriptions
|
|
338
|
+
</div>
|
|
339
|
+
<div class="flex items-center gap-2">
|
|
340
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
341
|
+
Sub-issues and blocking relationships
|
|
342
|
+
</div>
|
|
343
|
+
<div class="flex items-center gap-2">
|
|
344
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
345
|
+
Custom labels and templates
|
|
346
|
+
</div>
|
|
347
|
+
<div class="flex items-center gap-2">
|
|
348
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
349
|
+
Bulk actions and triage mode
|
|
350
|
+
</div>
|
|
351
|
+
</div>
|
|
352
|
+
</div>
|
|
353
|
+
|
|
354
|
+
<div class="py-8 md:px-8 border-t md:border-t-0" style="border-color: var(--border);">
|
|
355
|
+
<div class="text-xs mono uppercase tracking-wider mb-3" style="color: var(--muted);">02 — Cycles & Projects</div>
|
|
356
|
+
<h3 class="text-xl font-bold serif mb-3" style="color: var(--ink);">Time-boxed sprints without the ceremony.</h3>
|
|
357
|
+
<p class="text-sm leading-relaxed mb-4" style="color: var(--muted);">Cycles give you a focused slice of work. Projects give you the long view. Both are just different lenses on the same issues.</p>
|
|
358
|
+
<div class="space-y-1.5 text-sm" style="color: var(--muted);">
|
|
359
|
+
<div class="flex items-center gap-2">
|
|
360
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
361
|
+
Automatic carryover of incomplete work
|
|
362
|
+
</div>
|
|
363
|
+
<div class="flex items-center gap-2">
|
|
364
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
365
|
+
Cycle analytics and burndown
|
|
366
|
+
</div>
|
|
367
|
+
<div class="flex items-center gap-2">
|
|
368
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
369
|
+
Project milestones with progress
|
|
370
|
+
</div>
|
|
371
|
+
<div class="flex items-center gap-2">
|
|
372
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
373
|
+
Quarter and year roadmap views
|
|
374
|
+
</div>
|
|
375
|
+
</div>
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<div class="py-8 md:pl-8 border-t md:border-t-0" style="border-color: var(--border);">
|
|
379
|
+
<div class="text-xs mono uppercase tracking-wider mb-3" style="color: var(--muted);">03 — Integrations</div>
|
|
380
|
+
<h3 class="text-xl font-bold serif mb-3" style="color: var(--ink);">Code and issues, finally in sync.</h3>
|
|
381
|
+
<p class="text-sm leading-relaxed mb-4" style="color: var(--muted);">Connect GitHub, GitLab, or Bitbucket. Branch names auto-link to issues. Issues close when PRs merge. Your tracker reflects reality.</p>
|
|
382
|
+
<div class="space-y-1.5 text-sm" style="color: var(--muted);">
|
|
383
|
+
<div class="flex items-center gap-2">
|
|
384
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
385
|
+
PR and commit auto-linking
|
|
386
|
+
</div>
|
|
387
|
+
<div class="flex items-center gap-2">
|
|
388
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
389
|
+
CI status in issue context
|
|
390
|
+
</div>
|
|
391
|
+
<div class="flex items-center gap-2">
|
|
392
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
393
|
+
Slack and Discord notifications
|
|
394
|
+
</div>
|
|
395
|
+
<div class="flex items-center gap-2">
|
|
396
|
+
<span class="w-1 h-1 rounded-full bg-amber-500 flex-shrink-0"></span>
|
|
397
|
+
Public REST + webhook API
|
|
398
|
+
</div>
|
|
399
|
+
</div>
|
|
400
|
+
</div>
|
|
401
|
+
</div>
|
|
402
|
+
</section>
|
|
403
|
+
|
|
404
|
+
<!-- Keyboard section — big visual -->
|
|
405
|
+
<section class="max-w-6xl mx-auto px-6 py-20">
|
|
406
|
+
<div class="grid md:grid-cols-5 gap-12 items-center">
|
|
407
|
+
<div class="md:col-span-2">
|
|
408
|
+
<div class="text-xs mono uppercase tracking-widest mb-3" style="color: var(--muted);">Keyboard-first</div>
|
|
409
|
+
<h2 class="text-4xl font-bold serif mb-5" style="color: var(--ink);">Every action, a keystroke away.</h2>
|
|
410
|
+
<p class="text-base leading-relaxed mb-6" style="color: var(--muted);">Plume was designed for people who live in their editors. The mouse is optional. The keyboard is everything.</p>
|
|
411
|
+
<p class="text-sm leading-relaxed" style="color: var(--muted);">Open the command palette with <span class="kbd">⌘K</span> and reach anything in the product — including actions across issues, cycles, and projects — in under two keystrokes.</p>
|
|
412
|
+
</div>
|
|
413
|
+
<div class="md:col-span-3">
|
|
414
|
+
<!-- Command palette mockup -->
|
|
415
|
+
<div class="rounded-xl overflow-hidden shadow-2xl" style="border: 1px solid var(--border); background: white;">
|
|
416
|
+
<div class="px-4 py-3 flex items-center gap-3" style="border-bottom: 1px solid var(--border);">
|
|
417
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="none" style="color: var(--muted);"><path d="M11 10l3 3M7 13A6 6 0 107 1a6 6 0 000 12z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
418
|
+
<span class="text-sm" style="color: var(--muted);">Search or type a command...</span>
|
|
419
|
+
<span class="ml-auto kbd">ESC</span>
|
|
420
|
+
</div>
|
|
421
|
+
<div class="p-2">
|
|
422
|
+
<div class="text-xs mono uppercase px-3 py-1.5 tracking-wider" style="color: var(--muted);">Recent</div>
|
|
423
|
+
<div class="px-3 py-2.5 rounded-lg flex items-center gap-3 cursor-pointer" style="background: var(--sand);">
|
|
424
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="none" style="color: var(--ink);"><rect x="2" y="4" width="12" height="9" rx="1.5" stroke="currentColor" stroke-width="1.5"/><path d="M5 4V3a1 1 0 011-1h4a1 1 0 011 1v1" stroke="currentColor" stroke-width="1.5"/></svg>
|
|
425
|
+
<span class="text-sm font-medium" style="color: var(--ink);">Create new issue</span>
|
|
426
|
+
<span class="ml-auto kbd">C</span>
|
|
427
|
+
</div>
|
|
428
|
+
<div class="px-3 py-2.5 rounded-lg flex items-center gap-3 cursor-pointer hover:bg-stone-50">
|
|
429
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="none" style="color: var(--muted);"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 5v3l2 2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
430
|
+
<span class="text-sm" style="color: var(--muted);">Start a new cycle</span>
|
|
431
|
+
<span class="ml-auto kbd">⇧C</span>
|
|
432
|
+
</div>
|
|
433
|
+
<div class="px-3 py-2.5 rounded-lg flex items-center gap-3 cursor-pointer hover:bg-stone-50">
|
|
434
|
+
<svg class="w-4 h-4" viewBox="0 0 16 16" fill="none" style="color: var(--muted);"><path d="M8 2v12M2 8h12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
435
|
+
<span class="text-sm" style="color: var(--muted);">New project</span>
|
|
436
|
+
<span class="ml-auto kbd">⇧P</span>
|
|
437
|
+
</div>
|
|
438
|
+
<div class="text-xs mono uppercase px-3 py-1.5 tracking-wider mt-1" style="color: var(--muted);">Actions on PLM-47</div>
|
|
439
|
+
<div class="px-3 py-2.5 rounded-lg flex items-center gap-3 cursor-pointer hover:bg-stone-50">
|
|
440
|
+
<span class="text-sm" style="color: var(--muted);">Change status</span>
|
|
441
|
+
<span class="ml-auto kbd">S</span>
|
|
442
|
+
</div>
|
|
443
|
+
<div class="px-3 py-2.5 rounded-lg flex items-center gap-3 cursor-pointer hover:bg-stone-50">
|
|
444
|
+
<span class="text-sm" style="color: var(--muted);">Change priority</span>
|
|
445
|
+
<span class="ml-auto kbd">P</span>
|
|
446
|
+
</div>
|
|
447
|
+
<div class="px-3 py-2.5 rounded-lg flex items-center gap-3 cursor-pointer hover:bg-stone-50">
|
|
448
|
+
<span class="text-sm" style="color: var(--muted);">Assign to member</span>
|
|
449
|
+
<span class="ml-auto kbd">A</span>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
</section>
|
|
456
|
+
|
|
457
|
+
<!-- GitHub integration deep dive -->
|
|
458
|
+
<section id="integrations" class="divider pt-16 pb-16 max-w-6xl mx-auto px-6">
|
|
459
|
+
<div class="grid md:grid-cols-2 gap-12 items-center">
|
|
460
|
+
<!-- Code block -->
|
|
461
|
+
<div class="rounded-xl overflow-hidden" style="background: #1a1816; border: 1px solid #2d2b27;">
|
|
462
|
+
<div class="px-4 py-3 flex items-center justify-between" style="border-bottom: 1px solid #2d2b27;">
|
|
463
|
+
<div class="flex gap-1.5">
|
|
464
|
+
<div class="w-3 h-3 rounded-full" style="background: #ff5f57;"></div>
|
|
465
|
+
<div class="w-3 h-3 rounded-full" style="background: #febc2e;"></div>
|
|
466
|
+
<div class="w-3 h-3 rounded-full" style="background: #28c840;"></div>
|
|
467
|
+
</div>
|
|
468
|
+
<span class="text-xs mono" style="color: #6b6560;">Terminal — git push</span>
|
|
469
|
+
<span></span>
|
|
470
|
+
</div>
|
|
471
|
+
<div class="p-5 mono text-sm leading-loose">
|
|
472
|
+
<div style="color: #6b6560;">$ git checkout -b</div>
|
|
473
|
+
<div style="color: #fbbf24; padding-left: 16px;">feat/plm-47-rate-limiting</div>
|
|
474
|
+
<div class="mt-2" style="color: #6b6560;">$ git commit -m</div>
|
|
475
|
+
<div style="color: #fbbf24; padding-left: 16px;">"fix: throttle GQL subscription events"</div>
|
|
476
|
+
<div class="mt-2" style="color: #6b6560;">$ git push origin feat/plm-47-rate-limiting</div>
|
|
477
|
+
<div class="mt-3 px-3 py-2 rounded-lg" style="background: rgba(217,119,6,0.15); border: 1px solid rgba(217,119,6,0.3);">
|
|
478
|
+
<div class="text-xs" style="color: #fbbf24;">Plume — PLM-47 updated</div>
|
|
479
|
+
<div class="text-xs mt-0.5" style="color: #a3a09c;">Status: Backlog → <span style="color: #fbbf24;">In Progress</span></div>
|
|
480
|
+
</div>
|
|
481
|
+
<div class="mt-3" style="color: #6b6560;"># After PR merge...</div>
|
|
482
|
+
<div class="mt-2 px-3 py-2 rounded-lg" style="background: rgba(34,197,94,0.1); border: 1px solid rgba(34,197,94,0.25);">
|
|
483
|
+
<div class="text-xs" style="color: #4ade80;">Plume — PLM-47 closed</div>
|
|
484
|
+
<div class="text-xs mt-0.5" style="color: #a3a09c;">Merged by @jlin · PR #238</div>
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
</div>
|
|
488
|
+
|
|
489
|
+
<div>
|
|
490
|
+
<div class="text-xs mono uppercase tracking-widest mb-3" style="color: var(--muted);">GitHub integration</div>
|
|
491
|
+
<h2 class="text-4xl font-bold serif mb-5" style="color: var(--ink);">Your code and your issues speak the same language.</h2>
|
|
492
|
+
<p class="text-base leading-relaxed mb-6" style="color: var(--muted);">Branch names, PR titles, and commit messages automatically link to Plume issues. Status changes propagate in real time — no one has to manually close what the merge already finished.</p>
|
|
493
|
+
<div class="space-y-3">
|
|
494
|
+
<div class="flex items-start gap-3">
|
|
495
|
+
<div class="w-5 h-5 rounded flex items-center justify-center flex-shrink-0 mt-0.5" style="background: var(--sand); border: 1px solid var(--border);">
|
|
496
|
+
<svg class="w-3 h-3" viewBox="0 0 12 12" fill="none" style="color: var(--ink);"><path d="M2 6l2.5 2.5L10 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
497
|
+
</div>
|
|
498
|
+
<span class="text-sm" style="color: var(--muted);">GitHub, GitLab, and Bitbucket supported</span>
|
|
499
|
+
</div>
|
|
500
|
+
<div class="flex items-start gap-3">
|
|
501
|
+
<div class="w-5 h-5 rounded flex items-center justify-center flex-shrink-0 mt-0.5" style="background: var(--sand); border: 1px solid var(--border);">
|
|
502
|
+
<svg class="w-3 h-3" viewBox="0 0 12 12" fill="none" style="color: var(--ink);"><path d="M2 6l2.5 2.5L10 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
503
|
+
</div>
|
|
504
|
+
<span class="text-sm" style="color: var(--muted);">CI/CD status shown in the issue sidebar</span>
|
|
505
|
+
</div>
|
|
506
|
+
<div class="flex items-start gap-3">
|
|
507
|
+
<div class="w-5 h-5 rounded flex items-center justify-center flex-shrink-0 mt-0.5" style="background: var(--sand); border: 1px solid var(--border);">
|
|
508
|
+
<svg class="w-3 h-3" viewBox="0 0 12 12" fill="none" style="color: var(--ink);"><path d="M2 6l2.5 2.5L10 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
509
|
+
</div>
|
|
510
|
+
<span class="text-sm" style="color: var(--muted);">Auto-close and auto-progress on merge</span>
|
|
511
|
+
</div>
|
|
512
|
+
<div class="flex items-start gap-3">
|
|
513
|
+
<div class="w-5 h-5 rounded flex items-center justify-center flex-shrink-0 mt-0.5" style="background: var(--sand); border: 1px solid var(--border);">
|
|
514
|
+
<svg class="w-3 h-3" viewBox="0 0 12 12" fill="none" style="color: var(--ink);"><path d="M2 6l2.5 2.5L10 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
|
|
515
|
+
</div>
|
|
516
|
+
<span class="text-sm" style="color: var(--muted);">Open PRs visible from any issue view</span>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
</div>
|
|
521
|
+
</section>
|
|
522
|
+
|
|
523
|
+
<!-- Pricing -->
|
|
524
|
+
<section id="pricing" class="max-w-6xl mx-auto px-6 py-16 divider">
|
|
525
|
+
<div class="grid md:grid-cols-5 gap-10 items-start">
|
|
526
|
+
<div class="md:col-span-2">
|
|
527
|
+
<div class="text-xs mono uppercase tracking-widest mb-3" style="color: var(--muted);">Pricing</div>
|
|
528
|
+
<h2 class="text-4xl font-bold serif mb-4" style="color: var(--ink);">Honest pricing.</h2>
|
|
529
|
+
<p class="text-base leading-relaxed" style="color: var(--muted);">One product. Full access. No feature tiers. Free for small teams, flat rate for growing ones.</p>
|
|
530
|
+
</div>
|
|
531
|
+
<div class="md:col-span-3 grid sm:grid-cols-3 gap-4">
|
|
532
|
+
<div class="p-5 rounded-lg" style="background: var(--surface); border: 1px solid var(--border);">
|
|
533
|
+
<div class="text-xs mono uppercase tracking-wider mb-3" style="color: var(--muted);">Free</div>
|
|
534
|
+
<div class="text-3xl font-bold serif mb-0.5" style="color: var(--ink);">$0</div>
|
|
535
|
+
<div class="text-sm mb-4" style="color: var(--muted);">Up to 10 people</div>
|
|
536
|
+
<a href="#signup" class="cta-secondary block text-center" style="padding: 10px; font-size: 13px;">Sign up</a>
|
|
537
|
+
</div>
|
|
538
|
+
<div class="p-5 rounded-lg relative" style="background: var(--ink); border: 1px solid var(--ink);">
|
|
539
|
+
<div class="text-xs mono uppercase tracking-wider mb-3" style="color: rgba(245,240,232,0.4);">Pro</div>
|
|
540
|
+
<div class="text-3xl font-bold serif mb-0.5" style="color: var(--sand);">$12<span class="text-lg font-normal" style="color: rgba(245,240,232,0.4);">/mo</span></div>
|
|
541
|
+
<div class="text-sm mb-4" style="color: rgba(245,240,232,0.4);">Per user, billed annually</div>
|
|
542
|
+
<a href="#signup" class="block text-center py-2.5 rounded font-semibold text-sm transition-colors" style="background: var(--sand); color: var(--ink);">Start trial</a>
|
|
543
|
+
</div>
|
|
544
|
+
<div class="p-5 rounded-lg" style="background: var(--surface); border: 1px solid var(--border);">
|
|
545
|
+
<div class="text-xs mono uppercase tracking-wider mb-3" style="color: var(--muted);">Enterprise</div>
|
|
546
|
+
<div class="text-3xl font-bold serif mb-0.5" style="color: var(--ink);">Custom</div>
|
|
547
|
+
<div class="text-sm mb-4" style="color: var(--muted);">100+ seats</div>
|
|
548
|
+
<a href="mailto:sales@plume.dev" class="cta-secondary block text-center" style="padding: 10px; font-size: 13px;">Contact us</a>
|
|
549
|
+
</div>
|
|
550
|
+
</div>
|
|
551
|
+
</div>
|
|
552
|
+
</section>
|
|
553
|
+
|
|
554
|
+
<!-- Final CTA -->
|
|
555
|
+
<section id="signup" class="max-w-6xl mx-auto px-6 py-20 divider">
|
|
556
|
+
<div class="grid md:grid-cols-2 gap-12 items-center">
|
|
557
|
+
<div>
|
|
558
|
+
<h2 class="text-6xl font-bold serif leading-none mb-6" style="color: var(--ink);">Ready<br/>to ship<br/><span class="italic text-amber-600">faster?</span></h2>
|
|
559
|
+
<p class="text-base leading-relaxed" style="color: var(--muted);">Set up your workspace in minutes. Free for teams under 10 — no credit card, no sales call, no onboarding call unless you want one.</p>
|
|
560
|
+
</div>
|
|
561
|
+
<div>
|
|
562
|
+
<div class="p-8 rounded-xl" style="background: var(--surface); border: 1px solid var(--border);">
|
|
563
|
+
<h3 class="text-lg font-bold serif mb-5" style="color: var(--ink);">Create your workspace</h3>
|
|
564
|
+
<div class="space-y-3">
|
|
565
|
+
<input type="text" placeholder="Your name" class="w-full text-sm px-4 py-3 rounded-lg outline-none focus:ring-2 focus:ring-amber-500/30 transition-shadow" style="background: white; border: 1px solid var(--border); color: var(--ink);" />
|
|
566
|
+
<input type="email" placeholder="Work email" class="w-full text-sm px-4 py-3 rounded-lg outline-none focus:ring-2 focus:ring-amber-500/30 transition-shadow" style="background: white; border: 1px solid var(--border); color: var(--ink);" />
|
|
567
|
+
<input type="text" placeholder="Team name (e.g. Acme Engineering)" class="w-full text-sm px-4 py-3 rounded-lg outline-none focus:ring-2 focus:ring-amber-500/30 transition-shadow" style="background: white; border: 1px solid var(--border); color: var(--ink);" />
|
|
568
|
+
<button class="w-full cta-btn justify-center" style="border-radius: 8px;">Create workspace</button>
|
|
569
|
+
</div>
|
|
570
|
+
<p class="text-xs text-center mt-3" style="color: var(--muted);">By continuing you agree to our Terms & Privacy Policy</p>
|
|
571
|
+
</div>
|
|
572
|
+
</div>
|
|
573
|
+
</div>
|
|
574
|
+
</section>
|
|
575
|
+
|
|
576
|
+
<!-- Footer -->
|
|
577
|
+
<footer style="border-top: 1px solid var(--border);" class="py-10 max-w-6xl mx-auto px-6">
|
|
578
|
+
<div class="flex flex-col md:flex-row items-start md:items-center justify-between gap-6">
|
|
579
|
+
<div>
|
|
580
|
+
<div class="font-bold serif text-lg mb-1" style="color: var(--ink);">Plume</div>
|
|
581
|
+
<div class="text-xs" style="color: var(--muted);">Issue tracking for teams who care about craft.</div>
|
|
582
|
+
</div>
|
|
583
|
+
<div class="flex flex-wrap gap-6 text-sm" style="color: var(--muted);">
|
|
584
|
+
<a href="#" class="hover:text-stone-900">Privacy</a>
|
|
585
|
+
<a href="#" class="hover:text-stone-900">Terms</a>
|
|
586
|
+
<a href="#" class="hover:text-stone-900">Changelog</a>
|
|
587
|
+
<a href="#" class="hover:text-stone-900">Docs</a>
|
|
588
|
+
<a href="#" class="hover:text-stone-900">Status</a>
|
|
589
|
+
<a href="mailto:hi@plume.dev" class="hover:text-stone-900">Contact</a>
|
|
590
|
+
</div>
|
|
591
|
+
</div>
|
|
592
|
+
</footer>
|
|
593
|
+
</body>
|
|
594
|
+
</html>
|