forgedock 1.0.16 → 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 +54 -3
- package/bin/cross-publish.mjs +344 -0
- package/bin/forgedock.mjs +2205 -541
- package/bin/github-app-manifest.json.license +2 -0
- package/bin/hooks/session-start.mjs +4 -5
- package/bin/registry.mjs +20 -0
- package/bin/tui.mjs +172 -96
- package/commands/adopt.md +433 -0
- package/commands/analytics.md +2 -0
- package/commands/audit-agents.md +2 -0
- package/commands/audit.md +2 -0
- package/commands/autopilot.md +77 -0
- package/commands/changelog.md +354 -0
- package/commands/cleanup.md +2 -0
- package/commands/compat-audit.md +330 -0
- package/commands/deploy-info.md +6 -5
- package/commands/design-bench.md +176 -0
- package/commands/design-render-critique-loop.md +103 -0
- package/commands/design.md +259 -0
- package/commands/diagnose.md +483 -0
- package/commands/explain.md +349 -0
- package/commands/forge-stats.md +2 -0
- package/commands/forgedock-init.md +2 -0
- package/commands/geo-audit.md +2 -0
- package/commands/incident-response.md +2 -0
- package/commands/issue.md +9 -3
- package/commands/milestone.md +2 -0
- package/commands/optimize.md +411 -0
- package/commands/orchestrate.md +239 -0
- package/commands/pipeline-health.md +60 -1
- package/commands/qa-sweep.md +39 -2
- package/commands/quality-gate.md +67 -0
- package/commands/replay.md +263 -0
- package/commands/resume.md +264 -0
- package/commands/review-pr-agents.md +5 -1
- package/commands/review-pr-staging.md +160 -2
- package/commands/review-pr.md +85 -3
- package/commands/rollback.md +2 -0
- package/commands/scope.md +280 -0
- package/commands/security-audit.md +2 -0
- package/commands/status.md +262 -0
- package/commands/sync-ecosystem.md +2 -0
- package/commands/test-gate.md +929 -0
- package/commands/validate.md +2 -0
- package/commands/work-on/build/architect.md +128 -18
- package/commands/work-on/build/context.md +130 -17
- package/commands/work-on/build/implement.md +7 -3
- package/commands/work-on/build/validate.md +2 -0
- package/commands/work-on/build.md +32 -7
- package/commands/work-on/close.md +85 -0
- package/commands/work-on/decompose.md +2 -0
- package/commands/work-on/investigate.md +30 -3
- package/commands/work-on/review.md +13 -1
- package/commands/work-on-monolithic.md +2 -0
- package/commands/work-on.md +676 -38
- package/docs/BRAND.md +51 -0
- package/docs/CI.md +177 -0
- package/docs/CONFIG.md +94 -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/per-repo-adaptive-scripts-token-savings.md +174 -0
- package/docs/articles/selective-spec-loading-token-savings.md +140 -0
- package/docs/claude-breakpoints.json +47 -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/site/getting-started.md +21 -0
- package/docs/spec-graph-schema.md +397 -0
- package/package.json +3 -3
- package/scripts/bench-scorecard.mjs +239 -0
- package/scripts/build-spec-graph.mjs +509 -0
- package/scripts/classify-lane.sh +138 -0
- package/scripts/design-system-lint.mjs +993 -0
- package/scripts/graph-query.sh +486 -0
- package/scripts/transition-label.sh +169 -0
- package/scripts/validate-pr-target.sh +30 -0
- package/scripts/validate-spec-graph.sh +423 -0
- package/templates/devdocs/README.md +72 -0
- package/templates/devdocs/agent/using-forgedock.md +3 -0
- package/templates/devdocs/agent/using-github.md +3 -0
- package/templates/devdocs/index.yaml +162 -0
- package/templates/devdocs/project/architecture.md +3 -0
- package/templates/devdocs/project/conventions.md +3 -0
- package/templates/devdocs/project/custom-instructions.md +3 -0
- package/templates/devdocs/project/glossary.md +3 -0
- package/templates/devdocs/project/stack.md +3 -0
- package/templates/devdocs/templates/commit-convention.md +3 -0
- package/templates/devdocs/templates/issue.md +3 -0
- package/templates/devdocs/templates/pull-request.md +3 -0
- package/templates/devdocs/templates/review-finding.md +3 -0
- package/templates/workflows/forgedock-review.yml +96 -0
|
@@ -0,0 +1,342 @@
|
|
|
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 -- The issue tracker for teams who build</title>
|
|
7
|
+
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Space+Grotesk: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; }
|
|
11
|
+
body { font-family: 'Space Grotesk', sans-serif; background: #fafaf9; color: #1c1917; -webkit-font-smoothing: antialiased; }
|
|
12
|
+
|
|
13
|
+
/* Utilities */
|
|
14
|
+
.container { max-width: 1200px; margin: 0 auto; padding: 0 64px; }
|
|
15
|
+
.mono { font-family: 'JetBrains Mono', monospace; }
|
|
16
|
+
|
|
17
|
+
/* Nav */
|
|
18
|
+
header { padding: 24px 64px; display: flex; align-items: center; justify-content: space-between; max-width: 1200px; margin: 0 auto; }
|
|
19
|
+
.logo { font-weight: 700; font-size: 1.25rem; letter-spacing: -0.03em; }
|
|
20
|
+
.logo em { font-style: normal; color: #0d9488; }
|
|
21
|
+
header nav { display: flex; gap: 36px; align-items: center; }
|
|
22
|
+
header nav a { text-decoration: none; color: #78716c; font-size: 0.875rem; font-weight: 500; transition: color 0.15s; }
|
|
23
|
+
header nav a:hover { color: #1c1917; }
|
|
24
|
+
.header-cta { background: #0d9488; color: #fff; padding: 10px 24px; border-radius: 8px; font-weight: 600; font-size: 0.875rem; text-decoration: none; transition: background 0.15s; }
|
|
25
|
+
.header-cta:hover { background: #0f766e; }
|
|
26
|
+
|
|
27
|
+
/* Hero — asymmetric split */
|
|
28
|
+
.hero { display: grid; grid-template-columns: 1fr 1.1fr; gap: 64px; padding: 100px 64px 80px; max-width: 1200px; margin: 0 auto; align-items: center; }
|
|
29
|
+
.hero-left h1 { font-size: 3.5rem; font-weight: 700; line-height: 1.1; letter-spacing: -0.035em; margin-bottom: 24px; }
|
|
30
|
+
.hero-left h1 .accent { color: #0d9488; }
|
|
31
|
+
.hero-left p { font-size: 1.125rem; color: #57534e; line-height: 1.7; margin-bottom: 36px; max-width: 440px; }
|
|
32
|
+
.hero-left .cta-row { display: flex; gap: 12px; align-items: center; }
|
|
33
|
+
.cta-main { background: #1c1917; color: #fafaf9; padding: 14px 32px; border-radius: 10px; font-weight: 600; font-size: 0.9375rem; text-decoration: none; transition: background 0.15s; }
|
|
34
|
+
.cta-main:hover { background: #292524; }
|
|
35
|
+
.cta-ghost { color: #78716c; font-size: 0.875rem; text-decoration: none; padding: 14px 20px; }
|
|
36
|
+
.cta-ghost:hover { color: #1c1917; }
|
|
37
|
+
|
|
38
|
+
/* Hero right — Terminal card */
|
|
39
|
+
.terminal { background: #1c1917; border-radius: 14px; overflow: hidden; box-shadow: 0 24px 64px rgba(0,0,0,0.12); }
|
|
40
|
+
.terminal-bar { height: 40px; background: #292524; display: flex; align-items: center; padding: 0 16px; gap: 7px; }
|
|
41
|
+
.terminal-dot { width: 11px; height: 11px; border-radius: 50%; }
|
|
42
|
+
.terminal-dot.r { background: #ef4444; }
|
|
43
|
+
.terminal-dot.y { background: #eab308; }
|
|
44
|
+
.terminal-dot.g { background: #22c55e; }
|
|
45
|
+
.terminal-body { padding: 24px; font-family: 'JetBrains Mono', monospace; font-size: 0.8125rem; line-height: 1.9; color: #a8a29e; }
|
|
46
|
+
.terminal-body .prompt { color: #0d9488; }
|
|
47
|
+
.terminal-body .flag { color: #fbbf24; }
|
|
48
|
+
.terminal-body .str { color: #34d399; }
|
|
49
|
+
.terminal-body .comment { color: #57534e; }
|
|
50
|
+
.terminal-body .white { color: #e7e5e4; }
|
|
51
|
+
|
|
52
|
+
/* Metrics strip */
|
|
53
|
+
.metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; background: #e7e5e4; border-radius: 14px; overflow: hidden; max-width: 1200px; margin: 0 auto 0; }
|
|
54
|
+
.metric-card { background: #fafaf9; padding: 40px 32px; text-align: center; }
|
|
55
|
+
.metric-card .number { font-size: 2.5rem; font-weight: 700; letter-spacing: -0.03em; color: #1c1917; }
|
|
56
|
+
.metric-card .unit { font-size: 0.8125rem; color: #78716c; margin-top: 6px; }
|
|
57
|
+
|
|
58
|
+
/* Features — stacked horizontal sections */
|
|
59
|
+
.feature-sections { padding: 120px 64px; max-width: 1200px; margin: 0 auto; }
|
|
60
|
+
.feature-row { display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: center; margin-bottom: 100px; }
|
|
61
|
+
.feature-row:last-child { margin-bottom: 0; }
|
|
62
|
+
.feature-row.reverse .feature-text { order: 2; }
|
|
63
|
+
.feature-row.reverse .feature-visual { order: 1; }
|
|
64
|
+
.feature-text h2 { font-size: 2rem; font-weight: 700; letter-spacing: -0.03em; margin-bottom: 16px; }
|
|
65
|
+
.feature-text p { color: #57534e; font-size: 1rem; line-height: 1.7; margin-bottom: 20px; }
|
|
66
|
+
.feature-list { list-style: none; display: flex; flex-direction: column; gap: 10px; }
|
|
67
|
+
.feature-list li { display: flex; align-items: flex-start; gap: 10px; font-size: 0.9375rem; color: #44403c; }
|
|
68
|
+
.feature-list li::before { content: "->"; font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; color: #0d9488; margin-top: 3px; flex-shrink: 0; }
|
|
69
|
+
|
|
70
|
+
/* Feature visual — cards */
|
|
71
|
+
.feature-visual { background: #f5f5f4; border: 1px solid #e7e5e4; border-radius: 14px; padding: 32px; min-height: 320px; }
|
|
72
|
+
|
|
73
|
+
/* Cycle visual */
|
|
74
|
+
.cycle-bar-group { display: flex; flex-direction: column; gap: 14px; }
|
|
75
|
+
.cycle-row { display: flex; align-items: center; gap: 14px; }
|
|
76
|
+
.cycle-label { font-size: 0.75rem; color: #78716c; width: 80px; flex-shrink: 0; }
|
|
77
|
+
.cycle-track { flex: 1; height: 28px; background: #e7e5e4; border-radius: 6px; overflow: hidden; position: relative; }
|
|
78
|
+
.cycle-fill { height: 100%; border-radius: 6px; }
|
|
79
|
+
.fill-teal { background: #0d9488; }
|
|
80
|
+
.fill-amber { background: #f59e0b; }
|
|
81
|
+
.fill-rose { background: #f43f5e; }
|
|
82
|
+
.cycle-pct { font-size: 0.75rem; color: #57534e; width: 36px; text-align: right; font-family: 'JetBrains Mono', monospace; }
|
|
83
|
+
|
|
84
|
+
/* Roadmap visual */
|
|
85
|
+
.roadmap-grid { display: flex; flex-direction: column; gap: 12px; }
|
|
86
|
+
.roadmap-item { background: #fff; border: 1px solid #e7e5e4; border-radius: 8px; padding: 14px 18px; display: flex; align-items: center; justify-content: space-between; }
|
|
87
|
+
.roadmap-item-left { display: flex; align-items: center; gap: 12px; }
|
|
88
|
+
.roadmap-dot { width: 10px; height: 10px; border-radius: 50%; }
|
|
89
|
+
.dot-done { background: #0d9488; }
|
|
90
|
+
.dot-progress { background: #f59e0b; }
|
|
91
|
+
.dot-planned { background: #d6d3d1; }
|
|
92
|
+
.roadmap-name { font-size: 0.875rem; font-weight: 500; }
|
|
93
|
+
.roadmap-meta { font-size: 0.75rem; color: #a8a29e; font-family: 'JetBrains Mono', monospace; }
|
|
94
|
+
|
|
95
|
+
/* Integration logos strip */
|
|
96
|
+
.integrations { padding: 80px 64px; max-width: 1200px; margin: 0 auto; text-align: center; }
|
|
97
|
+
.integrations h3 { font-size: 0.8125rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: #a8a29e; margin-bottom: 36px; }
|
|
98
|
+
.integration-logos { display: flex; justify-content: center; gap: 48px; align-items: center; }
|
|
99
|
+
.int-logo { width: 40px; height: 40px; background: #e7e5e4; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; color: #78716c; font-weight: 600; font-family: 'JetBrains Mono', monospace; }
|
|
100
|
+
|
|
101
|
+
/* Bottom CTA */
|
|
102
|
+
.bottom-cta { background: #1c1917; padding: 100px 64px; text-align: center; }
|
|
103
|
+
.bottom-cta h2 { font-size: 2.75rem; font-weight: 700; letter-spacing: -0.035em; color: #fafaf9; margin-bottom: 16px; }
|
|
104
|
+
.bottom-cta p { color: #a8a29e; font-size: 1.0625rem; margin-bottom: 40px; }
|
|
105
|
+
.bottom-cta .cta-main { background: #0d9488; }
|
|
106
|
+
.bottom-cta .cta-main:hover { background: #0f766e; }
|
|
107
|
+
|
|
108
|
+
/* Footer */
|
|
109
|
+
footer { padding: 40px 64px; max-width: 1200px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; border-top: 1px solid #e7e5e4; }
|
|
110
|
+
footer span { font-size: 0.8125rem; color: #a8a29e; }
|
|
111
|
+
footer nav { display: flex; gap: 24px; }
|
|
112
|
+
footer nav a { font-size: 0.8125rem; color: #78716c; text-decoration: none; }
|
|
113
|
+
footer nav a:hover { color: #1c1917; }
|
|
114
|
+
</style>
|
|
115
|
+
</head>
|
|
116
|
+
<body>
|
|
117
|
+
|
|
118
|
+
<header>
|
|
119
|
+
<div class="logo"><em>~</em> Plume</div>
|
|
120
|
+
<nav>
|
|
121
|
+
<a href="#">Product</a>
|
|
122
|
+
<a href="#">Integrations</a>
|
|
123
|
+
<a href="#">Pricing</a>
|
|
124
|
+
<a href="#">Changelog</a>
|
|
125
|
+
<a href="#" class="header-cta">Sign up</a>
|
|
126
|
+
</nav>
|
|
127
|
+
</header>
|
|
128
|
+
|
|
129
|
+
<section class="hero">
|
|
130
|
+
<div class="hero-left">
|
|
131
|
+
<h1>Issue tracking at the <span class="accent">speed of thought</span></h1>
|
|
132
|
+
<p>Plume gives your team a single place to plan, prioritize, and ship -- without the process tax. Keyboard-driven, developer-native, ruthlessly lean.</p>
|
|
133
|
+
<div class="cta-row">
|
|
134
|
+
<a href="#" class="cta-main">Get started free</a>
|
|
135
|
+
<a href="#" class="cta-ghost">Read the docs →</a>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="hero-right">
|
|
139
|
+
<div class="terminal">
|
|
140
|
+
<div class="terminal-bar">
|
|
141
|
+
<div class="terminal-dot r"></div>
|
|
142
|
+
<div class="terminal-dot y"></div>
|
|
143
|
+
<div class="terminal-dot g"></div>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="terminal-body">
|
|
146
|
+
<div><span class="comment"># create an issue from your terminal</span></div>
|
|
147
|
+
<div><span class="prompt">$</span> <span class="white">plume issue create</span> <span class="flag">--title</span> <span class="str">"Add rate limiting to /api/v2"</span> \</div>
|
|
148
|
+
<div> <span class="flag">--priority</span> <span class="str">urgent</span> <span class="flag">--assign</span> <span class="str">@sarah</span> <span class="flag">--cycle</span> <span class="str">current</span></div>
|
|
149
|
+
<br>
|
|
150
|
+
<div><span class="white">Created PLM-284</span> <span class="comment">in 42ms</span></div>
|
|
151
|
+
<br>
|
|
152
|
+
<div><span class="comment"># list your active work</span></div>
|
|
153
|
+
<div><span class="prompt">$</span> <span class="white">plume issues</span> <span class="flag">--mine</span> <span class="flag">--status</span> <span class="str">in-progress</span></div>
|
|
154
|
+
<br>
|
|
155
|
+
<div><span class="white">PLM-284</span> <span class="str">Add rate limiting</span> urgent in-progress</div>
|
|
156
|
+
<div><span class="white">PLM-271</span> <span class="str">Fix WS reconnect</span> high in-progress</div>
|
|
157
|
+
<div><span class="white">PLM-265</span> <span class="str">SCIM provisioning</span> medium in-progress</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</section>
|
|
162
|
+
|
|
163
|
+
<section class="container">
|
|
164
|
+
<div class="metrics">
|
|
165
|
+
<div class="metric-card">
|
|
166
|
+
<div class="number">48ms</div>
|
|
167
|
+
<div class="unit">median interaction latency</div>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="metric-card">
|
|
170
|
+
<div class="number">200+</div>
|
|
171
|
+
<div class="unit">keyboard shortcuts</div>
|
|
172
|
+
</div>
|
|
173
|
+
<div class="metric-card">
|
|
174
|
+
<div class="number">0</div>
|
|
175
|
+
<div class="unit">mandatory fields on issue creation</div>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="metric-card">
|
|
178
|
+
<div class="number">12s</div>
|
|
179
|
+
<div class="unit">average time to file a bug</div>
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
</section>
|
|
183
|
+
|
|
184
|
+
<section class="feature-sections">
|
|
185
|
+
|
|
186
|
+
<div class="feature-row">
|
|
187
|
+
<div class="feature-text">
|
|
188
|
+
<h2>Cycles that match how you actually sprint</h2>
|
|
189
|
+
<p>Group work into time-boxed cycles. See progress in real time. Roll incomplete work forward automatically at cycle end.</p>
|
|
190
|
+
<ul class="feature-list">
|
|
191
|
+
<li>Automated scope tracking and burndown</li>
|
|
192
|
+
<li>One-click rollover for unfinished issues</li>
|
|
193
|
+
<li>Velocity trends across cycles for honest retros</li>
|
|
194
|
+
</ul>
|
|
195
|
+
</div>
|
|
196
|
+
<div class="feature-visual">
|
|
197
|
+
<div class="cycle-bar-group">
|
|
198
|
+
<div style="font-size:0.8125rem;font-weight:600;margin-bottom:8px;color:#44403c">Cycle 14 — Week 3 of 3</div>
|
|
199
|
+
<div class="cycle-row">
|
|
200
|
+
<div class="cycle-label">Completed</div>
|
|
201
|
+
<div class="cycle-track"><div class="cycle-fill fill-teal" style="width:68%"></div></div>
|
|
202
|
+
<div class="cycle-pct">68%</div>
|
|
203
|
+
</div>
|
|
204
|
+
<div class="cycle-row">
|
|
205
|
+
<div class="cycle-label">In progress</div>
|
|
206
|
+
<div class="cycle-track"><div class="cycle-fill fill-amber" style="width:22%"></div></div>
|
|
207
|
+
<div class="cycle-pct">22%</div>
|
|
208
|
+
</div>
|
|
209
|
+
<div class="cycle-row">
|
|
210
|
+
<div class="cycle-label">Not started</div>
|
|
211
|
+
<div class="cycle-track"><div class="cycle-fill fill-rose" style="width:10%"></div></div>
|
|
212
|
+
<div class="cycle-pct">10%</div>
|
|
213
|
+
</div>
|
|
214
|
+
<div style="border-top:1px solid #d6d3d1;margin-top:16px;padding-top:16px;font-size:0.75rem;color:#78716c">24 of 35 issues closed · 3 days remaining</div>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<div class="feature-row reverse">
|
|
220
|
+
<div class="feature-text">
|
|
221
|
+
<h2>Projects and roadmaps, without the gantt charts</h2>
|
|
222
|
+
<p>Longer-running initiatives get their own project view. Track progress across multiple cycles and see the big picture at a glance.</p>
|
|
223
|
+
<ul class="feature-list">
|
|
224
|
+
<li>Projects span cycles -- work flows naturally</li>
|
|
225
|
+
<li>Progress rolls up from issue status automatically</li>
|
|
226
|
+
<li>Target dates, not deadlines. Soft guidance, not hard gates.</li>
|
|
227
|
+
</ul>
|
|
228
|
+
</div>
|
|
229
|
+
<div class="feature-visual">
|
|
230
|
+
<div class="roadmap-grid">
|
|
231
|
+
<div class="roadmap-item">
|
|
232
|
+
<div class="roadmap-item-left">
|
|
233
|
+
<div class="roadmap-dot dot-done"></div>
|
|
234
|
+
<div class="roadmap-name">Auth v2</div>
|
|
235
|
+
</div>
|
|
236
|
+
<div class="roadmap-meta">32/32</div>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="roadmap-item">
|
|
239
|
+
<div class="roadmap-item-left">
|
|
240
|
+
<div class="roadmap-dot dot-progress"></div>
|
|
241
|
+
<div class="roadmap-name">Billing rewrite</div>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="roadmap-meta">18/27</div>
|
|
244
|
+
</div>
|
|
245
|
+
<div class="roadmap-item">
|
|
246
|
+
<div class="roadmap-item-left">
|
|
247
|
+
<div class="roadmap-dot dot-progress"></div>
|
|
248
|
+
<div class="roadmap-name">API platform</div>
|
|
249
|
+
</div>
|
|
250
|
+
<div class="roadmap-meta">9/41</div>
|
|
251
|
+
</div>
|
|
252
|
+
<div class="roadmap-item">
|
|
253
|
+
<div class="roadmap-item-left">
|
|
254
|
+
<div class="roadmap-dot dot-planned"></div>
|
|
255
|
+
<div class="roadmap-name">Mobile SDK</div>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="roadmap-meta">0/16</div>
|
|
258
|
+
</div>
|
|
259
|
+
<div class="roadmap-item">
|
|
260
|
+
<div class="roadmap-item-left">
|
|
261
|
+
<div class="roadmap-dot dot-planned"></div>
|
|
262
|
+
<div class="roadmap-name">SOC 2 compliance</div>
|
|
263
|
+
</div>
|
|
264
|
+
<div class="roadmap-meta">0/23</div>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
|
|
270
|
+
<div class="feature-row">
|
|
271
|
+
<div class="feature-text">
|
|
272
|
+
<h2>Your codebase, connected</h2>
|
|
273
|
+
<p>Plume integrates deeply with GitHub and GitLab. Issues update when branches are created, PRs are opened, and deployments land.</p>
|
|
274
|
+
<ul class="feature-list">
|
|
275
|
+
<li>Auto-link PRs to issues via branch naming</li>
|
|
276
|
+
<li>Close issues when PRs merge to main</li>
|
|
277
|
+
<li>See deployment status directly on the issue</li>
|
|
278
|
+
<li>Slack and Discord notifications on state changes</li>
|
|
279
|
+
</ul>
|
|
280
|
+
</div>
|
|
281
|
+
<div class="feature-visual" style="display:flex;flex-direction:column;gap:16px;justify-content:center">
|
|
282
|
+
<div style="background:#fff;border:1px solid #e7e5e4;border-radius:8px;padding:14px 18px;font-size:0.8125rem">
|
|
283
|
+
<div style="display:flex;align-items:center;gap:8px;margin-bottom:8px">
|
|
284
|
+
<span style="color:#0d9488;font-weight:600">PLM-284</span>
|
|
285
|
+
<span style="color:#78716c">→</span>
|
|
286
|
+
<span class="mono" style="font-size:0.75rem;color:#57534e">sarah/plm-284-rate-limiting</span>
|
|
287
|
+
</div>
|
|
288
|
+
<div style="color:#78716c;font-size:0.75rem">Branch created 2 min ago</div>
|
|
289
|
+
</div>
|
|
290
|
+
<div style="background:#fff;border:1px solid #e7e5e4;border-radius:8px;padding:14px 18px;font-size:0.8125rem">
|
|
291
|
+
<div style="display:flex;align-items:center;gap:8px;margin-bottom:8px">
|
|
292
|
+
<span style="color:#0d9488;font-weight:600">PLM-284</span>
|
|
293
|
+
<span style="color:#78716c">→</span>
|
|
294
|
+
<span class="mono" style="font-size:0.75rem;color:#57534e">PR #412 opened</span>
|
|
295
|
+
</div>
|
|
296
|
+
<div style="color:#78716c;font-size:0.75rem">Status changed to In Review</div>
|
|
297
|
+
</div>
|
|
298
|
+
<div style="background:#fff;border:1px solid #e7e5e4;border-radius:8px;padding:14px 18px;font-size:0.8125rem">
|
|
299
|
+
<div style="display:flex;align-items:center;gap:8px;margin-bottom:8px">
|
|
300
|
+
<span style="color:#0d9488;font-weight:600">PLM-284</span>
|
|
301
|
+
<span style="color:#78716c">→</span>
|
|
302
|
+
<span class="mono" style="font-size:0.75rem;color:#57534e">Deployed to production</span>
|
|
303
|
+
</div>
|
|
304
|
+
<div style="color:#78716c;font-size:0.75rem">Issue closed automatically</div>
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
</section>
|
|
310
|
+
|
|
311
|
+
<section class="integrations">
|
|
312
|
+
<h3>Works with your stack</h3>
|
|
313
|
+
<div class="integration-logos">
|
|
314
|
+
<div class="int-logo">GH</div>
|
|
315
|
+
<div class="int-logo">GL</div>
|
|
316
|
+
<div class="int-logo">SL</div>
|
|
317
|
+
<div class="int-logo">FG</div>
|
|
318
|
+
<div class="int-logo">SE</div>
|
|
319
|
+
<div class="int-logo">ZP</div>
|
|
320
|
+
<div class="int-logo">DS</div>
|
|
321
|
+
</div>
|
|
322
|
+
</section>
|
|
323
|
+
|
|
324
|
+
<section class="bottom-cta">
|
|
325
|
+
<h2>Your team deserves better tools</h2>
|
|
326
|
+
<p>Free for small teams. Upgrade when you're ready.</p>
|
|
327
|
+
<a href="#" class="cta-main">Get started</a>
|
|
328
|
+
</section>
|
|
329
|
+
|
|
330
|
+
<footer>
|
|
331
|
+
<span>© 2026 Plume Technologies</span>
|
|
332
|
+
<nav>
|
|
333
|
+
<a href="#">Privacy</a>
|
|
334
|
+
<a href="#">Terms</a>
|
|
335
|
+
<a href="#">Security</a>
|
|
336
|
+
<a href="#">Changelog</a>
|
|
337
|
+
<a href="#">Twitter</a>
|
|
338
|
+
</nav>
|
|
339
|
+
</footer>
|
|
340
|
+
|
|
341
|
+
</body>
|
|
342
|
+
</html>
|