90 lines
4.1 KiB
HTML
90 lines
4.1 KiB
HTML
<!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="#050712" />
|
||
<title>Rank — Feature Priorities</title>
|
||
<link rel="stylesheet" href="/styles.css?v=rank-1" />
|
||
</head>
|
||
<body>
|
||
<div class="noise"></div>
|
||
<main class="shell">
|
||
<header class="hero">
|
||
<div>
|
||
<p class="eyebrow">rank.friborg.uk · feature triage</p>
|
||
<h1>Drop ideas. Score fast. Drag into reality.</h1>
|
||
<p class="subcopy">A sharp prioritization board for humans and agents. No ceremony, no rounded-corner startup soup.</p>
|
||
</div>
|
||
<div class="stats" id="stats"></div>
|
||
</header>
|
||
|
||
<section class="capture-panel" aria-label="Quick capture">
|
||
<form id="ideaForm" autocomplete="off">
|
||
<div class="capture-main">
|
||
<label for="title">Idea</label>
|
||
<input id="title" name="title" maxlength="180" placeholder="Press / then type the feature that keeps nagging at you" required />
|
||
</div>
|
||
<div class="capture-grid">
|
||
<label>Description<textarea id="description" name="description" rows="2" placeholder="Optional: what it does, why it matters, ugly constraints…"></textarea></label>
|
||
<label>Labels<input id="labels" name="labels" placeholder="scattermind, revenue, ux" /></label>
|
||
<label>Source<input id="sourceName" name="sourceName" placeholder="Jimmi, Rook, Iris…" /></label>
|
||
<label>Milestone<select id="milestoneSelect" name="milestoneId"></select></label>
|
||
</div>
|
||
<div class="score-row">
|
||
<label>Impact <input type="range" min="0" max="10" value="7" name="impact" /></label>
|
||
<label>Effort <input type="range" min="1" max="10" value="4" name="effort" /></label>
|
||
<label>Confidence <input type="range" min="0" max="10" value="6" name="confidence" /></label>
|
||
<label>Urgency <input type="range" min="0" max="10" value="5" name="urgency" /></label>
|
||
<button type="submit">Capture ↵</button>
|
||
</div>
|
||
</form>
|
||
</section>
|
||
|
||
<section class="toolbar">
|
||
<div class="tabs" id="filters">
|
||
<button data-filter="all" class="active">All</button>
|
||
<button data-filter="human">Human</button>
|
||
<button data-filter="agent">Agent</button>
|
||
<button data-filter="high">High score</button>
|
||
</div>
|
||
<div class="tools">
|
||
<input id="search" placeholder="Filter ideas" />
|
||
<button id="addMilestone">+ Milestone</button>
|
||
<button id="refresh">Refresh</button>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="board" class="board" aria-label="Priority board"></section>
|
||
|
||
<aside class="detail" id="detail" aria-hidden="true">
|
||
<form id="detailForm">
|
||
<div class="detail-head">
|
||
<p class="eyebrow">selected idea</p>
|
||
<button type="button" id="closeDetail">×</button>
|
||
</div>
|
||
<input name="title" class="detail-title" />
|
||
<textarea name="description" rows="8" placeholder="Description"></textarea>
|
||
<div class="detail-sliders">
|
||
<label>Impact <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>Notes<textarea name="notes" rows="5" placeholder="Decision notes, objections, cut lines…"></textarea></label>
|
||
<div class="detail-actions">
|
||
<button type="submit">Save</button>
|
||
<button type="button" id="archiveIdea">Archive</button>
|
||
</div>
|
||
</form>
|
||
</aside>
|
||
|
||
<footer>
|
||
<div id="activity"></div>
|
||
<p>Keyboard: <kbd>/</kbd> capture · <kbd>Esc</kbd> close · drag cards between milestones.</p>
|
||
</footer>
|
||
</main>
|
||
<script src="/app.js?v=rank-1" type="module"></script>
|
||
</body>
|
||
</html>
|