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,315 @@
|
|
|
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 — Issue tracking for teams who ship</title>
|
|
7
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
8
|
+
<style>
|
|
9
|
+
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
10
|
+
html { font-size: 16px; scroll-behavior: smooth; }
|
|
11
|
+
body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #09090b; color: #fafafa; line-height: 1.6; -webkit-font-smoothing: antialiased; }
|
|
12
|
+
|
|
13
|
+
/* Nav */
|
|
14
|
+
nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; padding: 0 48px; height: 64px; display: flex; align-items: center; justify-content: space-between; background: rgba(9,9,11,0.8); backdrop-filter: blur(12px); border-bottom: 1px solid rgba(255,255,255,0.06); }
|
|
15
|
+
.nav-logo { font-size: 1.125rem; font-weight: 700; letter-spacing: -0.02em; color: #fff; }
|
|
16
|
+
.nav-links { display: flex; gap: 32px; align-items: center; }
|
|
17
|
+
.nav-links a { color: #a1a1aa; font-size: 0.875rem; text-decoration: none; transition: color 0.15s; }
|
|
18
|
+
.nav-links a:hover { color: #fff; }
|
|
19
|
+
.nav-cta { background: #fff; color: #09090b; padding: 8px 20px; border-radius: 8px; font-size: 0.875rem; font-weight: 600; text-decoration: none; transition: opacity 0.15s; }
|
|
20
|
+
.nav-cta:hover { opacity: 0.88; }
|
|
21
|
+
|
|
22
|
+
/* Hero */
|
|
23
|
+
.hero { padding: 180px 48px 120px; max-width: 900px; margin: 0 auto; text-align: center; }
|
|
24
|
+
.hero-badge { display: inline-block; font-size: 0.75rem; font-weight: 500; color: #a78bfa; border: 1px solid rgba(167,139,250,0.3); padding: 4px 14px; border-radius: 999px; margin-bottom: 28px; letter-spacing: 0.02em; }
|
|
25
|
+
.hero h1 { font-size: 4rem; font-weight: 700; line-height: 1.08; letter-spacing: -0.04em; margin-bottom: 24px; }
|
|
26
|
+
.hero h1 span { background: linear-gradient(135deg, #a78bfa 0%, #818cf8 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
|
|
27
|
+
.hero p { font-size: 1.25rem; color: #a1a1aa; max-width: 560px; margin: 0 auto 40px; line-height: 1.7; }
|
|
28
|
+
.hero-actions { display: flex; gap: 16px; justify-content: center; }
|
|
29
|
+
.btn-primary { background: #fff; color: #09090b; padding: 14px 32px; border-radius: 10px; font-size: 0.9375rem; font-weight: 600; text-decoration: none; transition: transform 0.15s, box-shadow 0.15s; }
|
|
30
|
+
.btn-primary:hover { transform: translateY(-1px); box-shadow: 0 8px 30px rgba(255,255,255,0.1); }
|
|
31
|
+
.btn-secondary { background: transparent; color: #d4d4d8; padding: 14px 32px; border-radius: 10px; font-size: 0.9375rem; font-weight: 500; text-decoration: none; border: 1px solid rgba(255,255,255,0.12); transition: border-color 0.15s; }
|
|
32
|
+
.btn-secondary:hover { border-color: rgba(255,255,255,0.3); }
|
|
33
|
+
|
|
34
|
+
/* Interface mockup */
|
|
35
|
+
.mockup-section { padding: 0 48px 120px; max-width: 1100px; margin: 0 auto; }
|
|
36
|
+
.mockup { background: #111113; border: 1px solid rgba(255,255,255,0.08); border-radius: 16px; overflow: hidden; box-shadow: 0 40px 80px rgba(0,0,0,0.5); }
|
|
37
|
+
.mockup-bar { height: 44px; background: #18181b; border-bottom: 1px solid rgba(255,255,255,0.06); display: flex; align-items: center; padding: 0 16px; gap: 8px; }
|
|
38
|
+
.mockup-dot { width: 12px; height: 12px; border-radius: 50%; background: #27272a; }
|
|
39
|
+
.mockup-body { display: grid; grid-template-columns: 220px 1fr; min-height: 420px; }
|
|
40
|
+
.mockup-sidebar { background: #0f0f11; border-right: 1px solid rgba(255,255,255,0.06); padding: 20px 0; }
|
|
41
|
+
.sidebar-item { padding: 8px 20px; font-size: 0.8125rem; color: #71717a; display: flex; align-items: center; gap: 10px; cursor: default; }
|
|
42
|
+
.sidebar-item.active { color: #e4e4e7; background: rgba(255,255,255,0.04); }
|
|
43
|
+
.sidebar-icon { width: 16px; height: 16px; border-radius: 3px; background: #27272a; flex-shrink: 0; }
|
|
44
|
+
.sidebar-item.active .sidebar-icon { background: #a78bfa; }
|
|
45
|
+
.sidebar-label { font-size: 0.6875rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: #3f3f46; padding: 20px 20px 8px; }
|
|
46
|
+
.mockup-content { padding: 20px 24px; }
|
|
47
|
+
.content-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
|
|
48
|
+
.content-title { font-size: 0.9375rem; font-weight: 600; color: #e4e4e7; }
|
|
49
|
+
.content-filter { font-size: 0.75rem; color: #52525b; background: #18181b; padding: 5px 12px; border-radius: 6px; border: 1px solid rgba(255,255,255,0.06); }
|
|
50
|
+
.issue-row { display: grid; grid-template-columns: 20px 60px 1fr 80px 80px 32px; align-items: center; gap: 12px; padding: 10px 0; border-bottom: 1px solid rgba(255,255,255,0.04); font-size: 0.8125rem; }
|
|
51
|
+
.issue-check { width: 16px; height: 16px; border: 1.5px solid #3f3f46; border-radius: 4px; }
|
|
52
|
+
.issue-id { color: #52525b; font-family: 'SF Mono', 'Fira Code', monospace; font-size: 0.75rem; }
|
|
53
|
+
.issue-title { color: #d4d4d8; }
|
|
54
|
+
.issue-label { font-size: 0.6875rem; padding: 2px 8px; border-radius: 4px; font-weight: 500; }
|
|
55
|
+
.label-bug { background: rgba(239,68,68,0.15); color: #f87171; }
|
|
56
|
+
.label-feat { background: rgba(59,130,246,0.15); color: #60a5fa; }
|
|
57
|
+
.label-perf { background: rgba(168,85,247,0.15); color: #c084fc; }
|
|
58
|
+
.issue-priority { display: flex; gap: 2px; }
|
|
59
|
+
.priority-bar { width: 3px; height: 12px; border-radius: 1px; background: #27272a; }
|
|
60
|
+
.priority-bar.on { background: #f59e0b; }
|
|
61
|
+
.issue-avatar { width: 24px; height: 24px; border-radius: 50%; background: #27272a; }
|
|
62
|
+
|
|
63
|
+
/* Features */
|
|
64
|
+
.features { padding: 120px 48px; max-width: 1100px; margin: 0 auto; }
|
|
65
|
+
.features-header { text-align: center; margin-bottom: 72px; }
|
|
66
|
+
.features-header h2 { font-size: 2.5rem; font-weight: 700; letter-spacing: -0.03em; margin-bottom: 16px; }
|
|
67
|
+
.features-header p { color: #71717a; font-size: 1.125rem; max-width: 480px; margin: 0 auto; }
|
|
68
|
+
.features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
|
|
69
|
+
.feature-card { background: #111113; border: 1px solid rgba(255,255,255,0.06); border-radius: 14px; padding: 36px 32px; transition: border-color 0.2s; }
|
|
70
|
+
.feature-card:hover { border-color: rgba(255,255,255,0.12); }
|
|
71
|
+
.feature-icon { width: 40px; height: 40px; border-radius: 10px; background: rgba(167,139,250,0.1); display: flex; align-items: center; justify-content: center; margin-bottom: 20px; font-size: 1.125rem; }
|
|
72
|
+
.feature-card h3 { font-size: 1.0625rem; font-weight: 600; margin-bottom: 10px; letter-spacing: -0.01em; }
|
|
73
|
+
.feature-card p { font-size: 0.875rem; color: #71717a; line-height: 1.65; }
|
|
74
|
+
|
|
75
|
+
/* Keyboard section */
|
|
76
|
+
.keyboard-section { padding: 120px 48px; max-width: 1100px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: center; }
|
|
77
|
+
.keyboard-text h2 { font-size: 2.5rem; font-weight: 700; letter-spacing: -0.03em; margin-bottom: 20px; }
|
|
78
|
+
.keyboard-text p { color: #71717a; font-size: 1.0625rem; line-height: 1.7; margin-bottom: 28px; }
|
|
79
|
+
.shortcut-list { display: flex; flex-direction: column; gap: 12px; }
|
|
80
|
+
.shortcut { display: flex; align-items: center; gap: 16px; }
|
|
81
|
+
.shortcut kbd { background: #18181b; border: 1px solid rgba(255,255,255,0.1); border-radius: 6px; padding: 4px 10px; font-family: 'SF Mono', 'Fira Code', monospace; font-size: 0.8125rem; color: #a1a1aa; min-width: 40px; text-align: center; }
|
|
82
|
+
.shortcut span { font-size: 0.875rem; color: #71717a; }
|
|
83
|
+
.keyboard-visual { background: #111113; border: 1px solid rgba(255,255,255,0.06); border-radius: 14px; padding: 36px; }
|
|
84
|
+
.cmd-palette { background: #18181b; border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; overflow: hidden; }
|
|
85
|
+
.cmd-input { padding: 14px 18px; font-size: 0.875rem; color: #71717a; border-bottom: 1px solid rgba(255,255,255,0.06); display: flex; align-items: center; gap: 10px; }
|
|
86
|
+
.cmd-input-icon { color: #52525b; }
|
|
87
|
+
.cmd-result { padding: 8px; }
|
|
88
|
+
.cmd-item { padding: 10px 14px; border-radius: 6px; font-size: 0.8125rem; color: #a1a1aa; display: flex; align-items: center; gap: 12px; cursor: default; }
|
|
89
|
+
.cmd-item.selected { background: rgba(167,139,250,0.1); color: #e4e4e7; }
|
|
90
|
+
.cmd-item-key { font-size: 0.6875rem; color: #52525b; margin-left: auto; font-family: 'SF Mono', monospace; }
|
|
91
|
+
|
|
92
|
+
/* Social proof */
|
|
93
|
+
.social { padding: 120px 48px; text-align: center; max-width: 800px; margin: 0 auto; border-top: 1px solid rgba(255,255,255,0.06); }
|
|
94
|
+
.social p { font-size: 1.5rem; font-weight: 500; line-height: 1.6; letter-spacing: -0.02em; color: #d4d4d8; margin-bottom: 24px; }
|
|
95
|
+
.social cite { font-style: normal; font-size: 0.875rem; color: #52525b; }
|
|
96
|
+
.social cite strong { color: #71717a; }
|
|
97
|
+
.logos { display: flex; justify-content: center; gap: 48px; margin-top: 64px; opacity: 0.3; }
|
|
98
|
+
.logo-placeholder { width: 100px; height: 28px; background: #fff; border-radius: 4px; }
|
|
99
|
+
|
|
100
|
+
/* CTA */
|
|
101
|
+
.cta-section { padding: 140px 48px; text-align: center; }
|
|
102
|
+
.cta-section h2 { font-size: 3rem; font-weight: 700; letter-spacing: -0.04em; margin-bottom: 16px; }
|
|
103
|
+
.cta-section p { color: #71717a; font-size: 1.125rem; margin-bottom: 40px; }
|
|
104
|
+
|
|
105
|
+
/* Footer */
|
|
106
|
+
footer { padding: 48px; border-top: 1px solid rgba(255,255,255,0.06); display: flex; justify-content: space-between; align-items: center; max-width: 1200px; margin: 0 auto; }
|
|
107
|
+
.footer-left { font-size: 0.8125rem; color: #3f3f46; }
|
|
108
|
+
.footer-links { display: flex; gap: 24px; }
|
|
109
|
+
.footer-links a { font-size: 0.8125rem; color: #52525b; text-decoration: none; }
|
|
110
|
+
.footer-links a:hover { color: #a1a1aa; }
|
|
111
|
+
</style>
|
|
112
|
+
</head>
|
|
113
|
+
<body>
|
|
114
|
+
|
|
115
|
+
<nav>
|
|
116
|
+
<div class="nav-logo">Plume</div>
|
|
117
|
+
<div class="nav-links">
|
|
118
|
+
<a href="#features">Features</a>
|
|
119
|
+
<a href="#workflow">Workflow</a>
|
|
120
|
+
<a href="#pricing">Pricing</a>
|
|
121
|
+
<a href="#docs">Docs</a>
|
|
122
|
+
<a href="#" class="nav-cta">Get started</a>
|
|
123
|
+
</div>
|
|
124
|
+
</nav>
|
|
125
|
+
|
|
126
|
+
<section class="hero">
|
|
127
|
+
<div class="hero-badge">Now in public beta</div>
|
|
128
|
+
<h1>Plan, track, and <span>ship software</span></h1>
|
|
129
|
+
<p>Plume is issue tracking rebuilt for teams who care about velocity. Keyboard-driven, zero ceremony, ruthlessly fast.</p>
|
|
130
|
+
<div class="hero-actions">
|
|
131
|
+
<a href="#" class="btn-primary">Get started free</a>
|
|
132
|
+
<a href="#" class="btn-secondary">See it in action</a>
|
|
133
|
+
</div>
|
|
134
|
+
</section>
|
|
135
|
+
|
|
136
|
+
<section class="mockup-section">
|
|
137
|
+
<div class="mockup">
|
|
138
|
+
<div class="mockup-bar">
|
|
139
|
+
<div class="mockup-dot"></div>
|
|
140
|
+
<div class="mockup-dot"></div>
|
|
141
|
+
<div class="mockup-dot"></div>
|
|
142
|
+
</div>
|
|
143
|
+
<div class="mockup-body">
|
|
144
|
+
<div class="mockup-sidebar">
|
|
145
|
+
<div class="sidebar-label">Workspace</div>
|
|
146
|
+
<div class="sidebar-item active"><div class="sidebar-icon"></div> My Issues</div>
|
|
147
|
+
<div class="sidebar-item"><div class="sidebar-icon"></div> All Issues</div>
|
|
148
|
+
<div class="sidebar-item"><div class="sidebar-icon"></div> Active Cycle</div>
|
|
149
|
+
<div class="sidebar-item"><div class="sidebar-icon"></div> Roadmap</div>
|
|
150
|
+
<div class="sidebar-label">Projects</div>
|
|
151
|
+
<div class="sidebar-item"><div class="sidebar-icon"></div> Auth v2</div>
|
|
152
|
+
<div class="sidebar-item"><div class="sidebar-icon"></div> Billing rewrite</div>
|
|
153
|
+
<div class="sidebar-item"><div class="sidebar-icon"></div> API platform</div>
|
|
154
|
+
</div>
|
|
155
|
+
<div class="mockup-content">
|
|
156
|
+
<div class="content-header">
|
|
157
|
+
<div class="content-title">My Issues</div>
|
|
158
|
+
<div class="content-filter">Filter: Active</div>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="issue-row">
|
|
161
|
+
<div class="issue-check"></div>
|
|
162
|
+
<div class="issue-id">PLM-142</div>
|
|
163
|
+
<div class="issue-title">Add rate limiting to public API endpoints</div>
|
|
164
|
+
<div><span class="issue-label label-feat">Feature</span></div>
|
|
165
|
+
<div class="issue-priority"><div class="priority-bar on"></div><div class="priority-bar on"></div><div class="priority-bar on"></div><div class="priority-bar"></div></div>
|
|
166
|
+
<div class="issue-avatar"></div>
|
|
167
|
+
</div>
|
|
168
|
+
<div class="issue-row">
|
|
169
|
+
<div class="issue-check"></div>
|
|
170
|
+
<div class="issue-id">PLM-139</div>
|
|
171
|
+
<div class="issue-title">WebSocket reconnection drops events in Firefox</div>
|
|
172
|
+
<div><span class="issue-label label-bug">Bug</span></div>
|
|
173
|
+
<div class="issue-priority"><div class="priority-bar on"></div><div class="priority-bar on"></div><div class="priority-bar on"></div><div class="priority-bar on"></div></div>
|
|
174
|
+
<div class="issue-avatar"></div>
|
|
175
|
+
</div>
|
|
176
|
+
<div class="issue-row">
|
|
177
|
+
<div class="issue-check"></div>
|
|
178
|
+
<div class="issue-id">PLM-137</div>
|
|
179
|
+
<div class="issue-title">Optimize query planner for filtered list views</div>
|
|
180
|
+
<div><span class="issue-label label-perf">Perf</span></div>
|
|
181
|
+
<div class="issue-priority"><div class="priority-bar on"></div><div class="priority-bar on"></div><div class="priority-bar"></div><div class="priority-bar"></div></div>
|
|
182
|
+
<div class="issue-avatar"></div>
|
|
183
|
+
</div>
|
|
184
|
+
<div class="issue-row">
|
|
185
|
+
<div class="issue-check"></div>
|
|
186
|
+
<div class="issue-id">PLM-134</div>
|
|
187
|
+
<div class="issue-title">Implement SCIM provisioning for enterprise SSO</div>
|
|
188
|
+
<div><span class="issue-label label-feat">Feature</span></div>
|
|
189
|
+
<div class="issue-priority"><div class="priority-bar on"></div><div class="priority-bar on"></div><div class="priority-bar"></div><div class="priority-bar"></div></div>
|
|
190
|
+
<div class="issue-avatar"></div>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="issue-row">
|
|
193
|
+
<div class="issue-check"></div>
|
|
194
|
+
<div class="issue-id">PLM-131</div>
|
|
195
|
+
<div class="issue-title">Branch auto-linking misses hyphenated repo names</div>
|
|
196
|
+
<div><span class="issue-label label-bug">Bug</span></div>
|
|
197
|
+
<div class="issue-priority"><div class="priority-bar on"></div><div class="priority-bar"></div><div class="priority-bar"></div><div class="priority-bar"></div></div>
|
|
198
|
+
<div class="issue-avatar"></div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</section>
|
|
204
|
+
|
|
205
|
+
<section class="features" id="features">
|
|
206
|
+
<div class="features-header">
|
|
207
|
+
<h2>Everything you need. Nothing you don't.</h2>
|
|
208
|
+
<p>Built for the way engineering teams actually work, not the way PMs draw process diagrams.</p>
|
|
209
|
+
</div>
|
|
210
|
+
<div class="features-grid">
|
|
211
|
+
<div class="feature-card">
|
|
212
|
+
<div class="feature-icon">⚡</div>
|
|
213
|
+
<h3>Sub-50ms interactions</h3>
|
|
214
|
+
<p>Every view loads instantly. Optimistic updates mean the UI never waits for your backend. You feel the difference in the first ten seconds.</p>
|
|
215
|
+
</div>
|
|
216
|
+
<div class="feature-card">
|
|
217
|
+
<div class="feature-icon">↻</div>
|
|
218
|
+
<h3>Cycles and projects</h3>
|
|
219
|
+
<p>Time-box work into cycles for cadence. Group related issues into projects for longer arcs. See both on a single roadmap view.</p>
|
|
220
|
+
</div>
|
|
221
|
+
<div class="feature-card">
|
|
222
|
+
<div class="feature-icon">🔗</div>
|
|
223
|
+
<h3>Git-native integrations</h3>
|
|
224
|
+
<p>Issues move when your code moves. Branch creation, PR linking, and deployment tracking happen automatically from GitHub or GitLab.</p>
|
|
225
|
+
</div>
|
|
226
|
+
<div class="feature-card">
|
|
227
|
+
<div class="feature-icon">⌨</div>
|
|
228
|
+
<h3>Keyboard-first</h3>
|
|
229
|
+
<p>Navigate, triage, assign, and close without leaving the home row. A command palette and full shortcut coverage mean your hands never touch the mouse.</p>
|
|
230
|
+
</div>
|
|
231
|
+
<div class="feature-card">
|
|
232
|
+
<div class="feature-icon">📈</div>
|
|
233
|
+
<h3>Progress and insights</h3>
|
|
234
|
+
<p>Cycle burndowns, project completion rates, and scope-change tracking. Clear visibility for leads, no status meetings required.</p>
|
|
235
|
+
</div>
|
|
236
|
+
<div class="feature-card">
|
|
237
|
+
<div class="feature-icon">🔒</div>
|
|
238
|
+
<h3>Teams and permissions</h3>
|
|
239
|
+
<p>Organize by squad with fine-grained visibility controls. Each team owns their triage, backlog, and active cycle independently.</p>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</section>
|
|
243
|
+
|
|
244
|
+
<section class="keyboard-section" id="workflow">
|
|
245
|
+
<div class="keyboard-text">
|
|
246
|
+
<h2>Your hands stay on the keyboard</h2>
|
|
247
|
+
<p>Plume is built for flow state. The command palette gives you instant access to every action, and single-key shortcuts handle the rest.</p>
|
|
248
|
+
<div class="shortcut-list">
|
|
249
|
+
<div class="shortcut"><kbd>C</kbd> <span>Create a new issue</span></div>
|
|
250
|
+
<div class="shortcut"><kbd>S</kbd> <span>Set status</span></div>
|
|
251
|
+
<div class="shortcut"><kbd>P</kbd> <span>Set priority</span></div>
|
|
252
|
+
<div class="shortcut"><kbd>A</kbd> <span>Assign to teammate</span></div>
|
|
253
|
+
<div class="shortcut"><kbd>/</kbd> <span>Search everything</span></div>
|
|
254
|
+
<div class="shortcut"><kbd>⌘K</kbd> <span>Command palette</span></div>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="keyboard-visual">
|
|
258
|
+
<div class="cmd-palette">
|
|
259
|
+
<div class="cmd-input">
|
|
260
|
+
<span class="cmd-input-icon">⌘K</span>
|
|
261
|
+
<span>assign to...</span>
|
|
262
|
+
</div>
|
|
263
|
+
<div class="cmd-result">
|
|
264
|
+
<div class="cmd-item selected">
|
|
265
|
+
<span>●</span> Sarah Chen
|
|
266
|
+
<span class="cmd-item-key">Engineering</span>
|
|
267
|
+
</div>
|
|
268
|
+
<div class="cmd-item">
|
|
269
|
+
<span>●</span> Marcus Rivera
|
|
270
|
+
<span class="cmd-item-key">Engineering</span>
|
|
271
|
+
</div>
|
|
272
|
+
<div class="cmd-item">
|
|
273
|
+
<span>●</span> Jun Tanaka
|
|
274
|
+
<span class="cmd-item-key">Design</span>
|
|
275
|
+
</div>
|
|
276
|
+
<div class="cmd-item">
|
|
277
|
+
<span>●</span> Aisha Patel
|
|
278
|
+
<span class="cmd-item-key">Product</span>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
</div>
|
|
283
|
+
</section>
|
|
284
|
+
|
|
285
|
+
<section class="social">
|
|
286
|
+
<p>"We moved from Jira to Plume in a week. Three months later, not a single engineer has asked to go back. It's the fastest tool we've ever used."</p>
|
|
287
|
+
<cite><strong>Elena Marchetti</strong>, Engineering Lead at Vantage</cite>
|
|
288
|
+
<div class="logos">
|
|
289
|
+
<div class="logo-placeholder"></div>
|
|
290
|
+
<div class="logo-placeholder"></div>
|
|
291
|
+
<div class="logo-placeholder"></div>
|
|
292
|
+
<div class="logo-placeholder"></div>
|
|
293
|
+
<div class="logo-placeholder"></div>
|
|
294
|
+
</div>
|
|
295
|
+
</section>
|
|
296
|
+
|
|
297
|
+
<section class="cta-section">
|
|
298
|
+
<h2>Start shipping with less friction</h2>
|
|
299
|
+
<p>Free for teams up to 10. No credit card required.</p>
|
|
300
|
+
<a href="#" class="btn-primary">Get started</a>
|
|
301
|
+
</section>
|
|
302
|
+
|
|
303
|
+
<footer>
|
|
304
|
+
<div class="footer-left">© 2026 Plume Inc.</div>
|
|
305
|
+
<div class="footer-links">
|
|
306
|
+
<a href="#">Privacy</a>
|
|
307
|
+
<a href="#">Terms</a>
|
|
308
|
+
<a href="#">Status</a>
|
|
309
|
+
<a href="#">Twitter</a>
|
|
310
|
+
<a href="#">GitHub</a>
|
|
311
|
+
</div>
|
|
312
|
+
</footer>
|
|
313
|
+
|
|
314
|
+
</body>
|
|
315
|
+
</html>
|