Files
rank/public/index.html
T
2026-05-22 23:28:15 +02:00

158 lines
8.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#061B33" />
<title>Prioritix — Feature Prioritization</title>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="stylesheet" href="/styles.css?v=prioritix-20260522-2" />
</head>
<body>
<div class="app-shell">
<aside class="sidebar" aria-label="Main navigation">
<div class="brand-mark" aria-label="Prioritix">P</div>
<nav>
<a class="active" href="#prioritize"><span></span><b>Prioritize</b></a>
<a href="#backlog"><span></span><b>Backlog</b></a>
<a href="#roadmap"><span></span><b>Roadmap</b></a>
<a href="#reports"><span></span><b>Reports</b></a>
</nav>
<button class="collapse" type="button" title="Collapse sidebar"></button>
</aside>
<main class="workspace">
<header class="topbar">
<button class="menu-button" type="button" aria-label="Menu"></button>
<div class="project-title">
<h1>Rank Prioritization Studio</h1>
<p><strong>Project goal:</strong> capture, sort, and turn rough feature ideas into a visible roadmap.</p>
</div>
<div class="profile-card">
<span>Sorting profile</span>
<strong>MVP (2x2)</strong>
<button type="button" id="profileToggle" aria-label="Change sorting profile"></button>
<div class="profile-menu" id="profileMenu" hidden>
<button type="button" class="selected" data-profile="mvp">MVP (2x2) ✓</button>
<button type="button" data-profile="rice">RICE Score</button>
<button type="button" data-profile="value">Value vs Effort</button>
<button type="button" data-profile="kano">Kano Model</button>
<button type="button" data-profile="custom">Custom</button>
</div>
</div>
<div class="progress-card" id="progressCard"></div>
</header>
<section class="capture-strip" aria-label="Quick capture">
<form id="ideaForm" autocomplete="off">
<label class="capture-title">New feature
<input id="title" name="title" maxlength="180" placeholder="Smart requirement sorting, mobile dark mode, dependency warnings…" required />
</label>
<label>Brief
<input id="description" name="description" maxlength="500" placeholder="One sentence. Keep sorting focused." />
</label>
<label>Category
<input id="labels" name="labels" placeholder="UI / UX" />
</label>
<input type="hidden" name="milestoneId" value="inbox" />
<input type="hidden" name="impact" value="7" />
<input type="hidden" name="effort" value="4" />
<input type="hidden" name="confidence" value="6" />
<input type="hidden" name="urgency" value="5" />
<button type="submit">Capture ↵</button>
</form>
</section>
<section class="feature-set-panel" id="feature-sets" aria-label="Feature set import and export">
<div class="feature-set-copy">
<div class="section-label">Feature set import / export</div>
<h2>Upload or paste a whole feature set.</h2>
<p>Use <strong>Prioritix Feature Set v1</strong>: JSON with a top-level <code>features</code> array. Required: <code>title</code>. Optional: <code>description</code>, <code>labels</code>, <code>impact</code>, <code>effort</code>, <code>confidence</code>, <code>urgency</code>, <code>status</code>, <code>milestoneId</code>, <code>rank</code>, <code>notes</code>. Export uses the same format, including the sorted setup.</p>
</div>
<div class="feature-set-actions">
<textarea id="featureSetInput" spellcheck="false" placeholder='{
"format": "prioritix-feature-set-v1",
"name": "Launch plan",
"features": [
{ "title": "Smart requirement sorting", "description": "Cluster pasted requirements into delivery slices.", "labels": ["AI", "Planning"], "impact": 8, "effort": 5, "confidence": 7, "urgency": 6 }
]
}'></textarea>
<div class="feature-set-toolbar">
<label class="file-pick">Upload .json<input id="featureSetFile" type="file" accept="application/json,.json" /></label>
<button type="button" id="importFeatureSet">Import features</button>
<button type="button" id="exportFeatureSet">Export sorted setup</button>
</div>
</div>
</section>
<section class="sorting-layout" id="prioritize">
<section class="active-column" aria-label="Active feature">
<div class="section-label">Active feature</div>
<div class="feature-deck" id="featureDeck"></div>
<div class="deck-actions">
<button type="button" id="skipFeature">▷ Skip</button>
<button type="button" id="postponeFeature">↓ Postpone</button>
</div>
</section>
<section class="grid-column" aria-label="Sorting grid">
<div class="section-label" id="gridLabel">Sorting grid (MVP - 2x2)</div>
<div class="sorting-grid" id="sortingGrid"></div>
<p class="shortcut-hint">Shortcuts: <kbd>1</kbd>-<kbd>4</kbd> place active card · <kbd>P</kbd> park · <kbd>I</kbd> investigate · <kbd>U</kbd> undo · <kbd>/</kbd> capture</p>
</section>
</section>
<section class="utility-row" aria-label="Feature card actions">
<button type="button" data-utility="park"><span></span><strong>Park</strong><small>Valid idea, not relevant now. Revisit later.</small></button>
<button type="button" data-utility="investigate"><span></span><strong>Investigate</strong><small>Needs more research or validation.</small></button>
<button type="button" data-utility="remove"><span></span><strong>Remove</strong><small>Not a good fit. Remove from project.</small></button>
</section>
<section class="timeline-panel" id="roadmap" aria-label="Timeline view">
<div class="timeline-head">
<div>
<h2>Timeline view</h2>
<p>Sorted features become nodes. Drag nodes horizontally to reorder the roadmap; click a node to inspect details.</p>
</div>
<div class="zoom-controls"><button type="button"></button><button type="button"></button><button type="button"></button></div>
</div>
<div class="timeline" id="timeline"></div>
</section>
<section class="backlog-panel" id="backlog">
<div class="section-label">Backlog / utility states</div>
<div id="backlogList" class="backlog-list"></div>
</section>
</main>
</div>
<aside class="detail" id="detail" aria-hidden="true">
<form id="detailForm">
<div class="detail-head">
<div><span class="category-dot"></span><span id="detailCategory">UI / UX</span></div>
<span class="chip">MVP</span>
<button type="button" id="closeDetail" aria-label="Close">×</button>
</div>
<input name="title" class="detail-title" />
<label>Brief<textarea name="description" rows="4" placeholder="What this feature changes for the product"></textarea></label>
<label>Categories / chips<input name="labels" placeholder="UI / UX, Dependencies, Growth" /></label>
<div class="detail-grid">
<label>User value<input type="number" min="0" max="10" name="impact" /></label>
<label>Effort<input type="number" min="1" max="10" name="effort" /></label>
<label>Confidence<input type="number" min="0" max="10" name="confidence" /></label>
<label>Urgency<input type="number" min="0" max="10" name="urgency" /></label>
</div>
<label>Links, dependencies, notes<textarea name="notes" rows="5" placeholder="Decision notes, source links, dependency risks, acceptance details…"></textarea></label>
<div class="detail-actions">
<button type="button" id="parkDetail">Park</button>
<button type="submit">Save</button>
<button type="button" id="archiveIdea" class="danger">Delete</button>
</div>
</form>
</aside>
<div class="toast" id="toast" hidden></div>
<script src="/app.js?v=prioritix-20260522-4" type="module"></script>
</body>
</html>