Files
so-many-crows/ui/index.html
T
SmokeyandClaude Opus 5.5 2d85cab716 Nests: team rooms with core crows and borrowing
- Server: nests API, persistence, core-first picking, borrowed flag
  (built by the backend agent against EVENTS.md; tests pass with -race)
- UI: nests in the sidebar, one feed per nest, header shows the core
  team, New nest dialog, borrowed crows labeled, per-nest waiting count
- start.command: one-click local server in controlled mode (mock crows,
  localhost only, state in .crows/)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 13:45:04 -06:00

64 lines
3.0 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>So Many Crows</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,500;0,700;1,500&family=IM+Fell+English+SC&display=swap" rel="stylesheet" />
</head>
<body>
<div class="app" id="app" data-view="room">
<nav class="tabs" aria-label="Views">
<span class="brand">So Many Crows</span>
<button class="tab" id="tab-room" type="button" aria-pressed="true"># todo</button>
<button class="tab" id="tab-flock" type="button" aria-pressed="false">Flock</button>
</nav>
<aside class="side" aria-label="The flock">
<div class="brand">So Many Crows</div>
<h2>Nests</h2>
<nav class="nests" id="nests" aria-label="Nests"></nav>
<button class="new-nest" id="new-nest" type="button">+ New nest</button>
<h2>The flock</h2>
<div class="roster" id="roster"></div>
<label class="who">You are <input id="requester" maxlength="40" autocomplete="off" /></label>
</aside>
<section class="room">
<header class="room-head">
<h1 id="room-title"># todo</h1>
<p class="room-sub" id="room-sub">The whole flock roosts here. Hand it a list: the Sentry sorts it, crows fly, you judge.</p>
</header>
<div class="feeds" id="feeds"></div>
<p class="typing" id="typing" aria-live="polite"></p>
<form class="composer" id="composer">
<label class="sr-only" for="list">Your todo list, one item per line</label>
<div class="field inked"><textarea id="list" rows="3" placeholder="One item per line, e.g.&#10;What is the difference between a crow and a raven"></textarea></div>
<button class="btn btn-go inked" id="send" type="submit">Send</button>
<p class="hint">Ctrl or ⌘ + Enter to send</p>
</form>
</section>
</div>
<dialog class="nest-dialog inked" id="nest-dialog">
<form method="dialog" id="nest-form">
<h2>New nest</h2>
<p class="dialog-sub">A room where a team of crows works together. The Sentry can borrow other crows when a job needs more hands.</p>
<label class="dialog-field">Name <input id="nest-name" maxlength="40" required autocomplete="off" placeholder="Launch copy" /></label>
<fieldset class="pick">
<legend>Core crows</legend>
<div class="pick-grid" id="nest-crows"></div>
</fieldset>
<p class="err" id="nest-err"></p>
<div class="dialog-actions">
<button class="btn btn-no inked" value="cancel" formnovalidate>Cancel</button>
<button class="btn btn-go inked" id="nest-create" value="create">Build the nest</button>
</div>
</form>
</dialog>
<script type="module" src="/src/main.ts"></script>
</body>
</html>