Skip to content

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.

RouteWhat’s there
/papercup307 redirect → /papercup/harnesses
/papercup/documentationThese docs (iframe of apps/papercup-docs) — leftmost tab
/papercup/harnessesEmbedded coding/department harness dashboard with project picker
/papercup/organizationDepartment reference: 5 dept lanes with mandates + inbox/outbox kind chips
/papercup/directivesDirective index — list, expand, route, status, summaries, ”+ New directive” modal
/papercup/projectsProject portfolio grouped by vertical — ”+ New project”
/papercup/timelineCross-department activity feed with filters
/papercup/briefingsInvestor 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.

The same tabs exist on the public site mounted with basePath="":

RouteNotes
/307 redirect → /organization (the most representative public landing)
/harnessesPublic render shows only fallback “Live harness console is admin-only”
/organizationSame component as admin, no edit affordances
/directives / /projects / /timeline / /briefings / /documentationRead-only versions

Public-site reads from snapshot files in apps/public-site/app/_lib/snapshot.ts rather than calling /api/org/* live.

RouteWhat’s there
/papercup/directives/:idBody, status, metadata, action buttons, linked projects grid, summary log + add form, linked messages
/papercup/projects/:slugMulti-section detail: Overview (with sourceDirective linkback + scope + capabilities counts), Timeline, Build (links to harness), Capabilities, Spinouts, Campaigns, Settings (with delete Danger zone)
/papercup/messages/:idSingle message body, metadata, status, in-response-to, responses, comments + add form
/harness/:slugSmart router: opens the Department Harness Dashboard for org-* slugs, the coding harness for everything else

/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 harnessesorg-business, org-rd, org-technology, org-management, org-marketing (harness_kind: "department")
  • Coding harnessessheets, 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:

  1. Inbox — pending messages with kind badge, status, click to open detail
  2. Outbox — messages this dept has emitted
  3. Compose — kind selector (limited to dept’s allowed outboxKinds), multi-select recipients, project picker (required), subject, body
  4. Decisionsdecision-log.md viewer
  5. Charter — canonical charter markdown (read-only; edit via PUT /api/org/charter)
  6. Director notes — editable textarea + Save (writes ~/org-{dept}/.harness/director-notes.md)
  7. 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.
  8. 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)

/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.

  • The Restart app’s left-side nav (apps/web/components/Nav.tsx) includes Papercup under the Agents group, between Meridian and Harness.
  • Inside Papercup, the tab strip from libs/papercup-shared/src/PapercupTabs.tsx shows the 8 tabs on every Papercup route.