UI map
Papercup ships as a Next.js app at apps/web/app/papercup/ and is also rendered, in readOnly form, by apps/public-site/. Both render the same components from libs/papercup-shared/, so any visible change ships to both.
It’s the operator’s surface — directors run autonomously, you observe and intervene.
Top-level routes (admin: /papercup/...)
Section titled “Top-level routes (admin: /papercup/...)”| Route | What’s there |
|---|---|
/papercup | 307 redirect → /papercup/harnesses |
/papercup/documentation | These docs (iframe of apps/papercup-docs) — leftmost tab |
/papercup/harnesses | Embedded coding/department harness dashboard with project picker |
/papercup/organization | Department reference: 5 dept lanes with mandates + inbox/outbox kind chips |
/papercup/directives | Directive index — list, expand, route, status, summaries, ”+ New directive” modal |
/papercup/projects | Project portfolio grouped by vertical — ”+ New project” |
/papercup/timeline | Cross-department activity feed with filters |
/papercup/briefings | Investor briefing summaries |
The tab strip lives in libs/papercup-shared/src/PapercupTabs.tsx. Tab order is deliberate: Documentation first (so new operators learn the model before acting), Harnesses second (the daily-use surface), then reference tabs.
Public site mirror (/...)
Section titled “Public site mirror (/...)”The same tabs exist on the public site mounted with basePath="":
| Route | Notes |
|---|---|
/ | 307 redirect → /organization (the most representative public landing) |
/harnesses | Public render shows only fallback “Live harness console is admin-only” |
/organization | Same component as admin, no edit affordances |
/directives / /projects / /timeline / /briefings / /documentation | Read-only versions |
Public-site reads from snapshot files in apps/public-site/app/_lib/snapshot.ts rather than calling /api/org/* live.
Detail pages (deep-linkable)
Section titled “Detail pages (deep-linkable)”| Route | What’s there |
|---|---|
/papercup/directives/:id | Body, status, metadata, action buttons, linked projects grid, summary log + add form, linked messages |
/papercup/projects/:slug | Multi-section detail: Overview (with sourceDirective linkback + scope + capabilities counts), Timeline, Build (links to harness), Capabilities, Spinouts, Campaigns, Settings (with delete Danger zone) |
/papercup/messages/:id | Single message body, metadata, status, in-response-to, responses, comments + add form |
/harness/:slug | Smart router: opens the Department Harness Dashboard for org-* slugs, the coding harness for everything else |
The Harnesses page
Section titled “The Harnesses page”/papercup/harnesses is intentionally minimal — just the embedded HarnessDashboard (the live in-browser coding-harness console) with its project dropdown.
The dropdown lists every project registered in ~/.restart-harness-projects.json:
- Department harnesses —
org-business,org-rd,org-technology,org-management,org-marketing(harness_kind: "department") - Coding harnesses —
sheets,restart, etc. (harness_kind: "coding")
Selecting a department slug routes you to its Department Harness Dashboard. Selecting a coding-harness slug opens the standard planner/worker/validator console for that project.
The previous incarnation of /papercup/harnesses had a top-cockpit (KPI strip, per-dept ops cards with Run-now/Auto-toggle/View-latest-run, Active Runs, Backlog by status, Recent Audit feed) — judged redundant with per-dept controls accessible via the project dropdown. The cockpit code is preserved at libs/papercup-shared/src/_discarded/HarnessOpsCockpit.tsx and can be re-exported in one line if reconsidered.
Department Harness Dashboard (/harness/org-{dept})
Section titled “Department Harness Dashboard (/harness/org-{dept})”When /harness/org-{dept} resolves, you see the per-director surface with 8 tabs:
- Inbox — pending messages with kind badge, status, click to open detail
- Outbox — messages this dept has emitted
- Compose — kind selector (limited to dept’s allowed
outboxKinds), multi-select recipients, project picker (required), subject, body - Decisions —
decision-log.mdviewer - Charter — canonical charter markdown (read-only; edit via
PUT /api/org/charter) - Director notes — editable textarea + Save (writes
~/org-{dept}/.harness/director-notes.md) - Memory — synthesized table of the last N director runs (when / decision keyword / first action / final outcome). The same synthesized text is injected into every director prompt so directors notice their own patterns. Limit selector (6/12/24/50). Collapsible “Raw text injected into prompt” inspector.
- Director agent — prompt resolver (role/mode selectors), ”▶ Run director” + “Show prompt only”, live result panel, recent-runs disclosure with inline expansion, run controls (auto-loop toggle, interval, scheduler countdown, Run-now / Stop, stats strip)
Organization page
Section titled “Organization page”/papercup/organization is intentionally a reference page — “what does each director do, what messages do they emit and consume.” No live operations controls (those live in each dept’s Director Agent tab inside the harness console).
It renders just:
- 1-line hero linking to Harnesses for live ops
- The 5 dept lane grid: each card shows mandate text, inbox/outbox kind chips, pending pressure bar, last activity, and links into
/harness/org-{slug}
Earlier versions had a hero metric grid, pulse cards, workload-matrix table, and handoff-map flow — all stripped because each duplicated information available on other tabs.
Navigation
Section titled “Navigation”- The Restart app’s left-side nav (
apps/web/components/Nav.tsx) includesPapercupunder theAgentsgroup, between Meridian and Harness. - Inside Papercup, the tab strip from
libs/papercup-shared/src/PapercupTabs.tsxshows the 8 tabs on every Papercup route.