Skip to content

feat(web): dashboard and tabbed status page with per-instance themes - #8

Merged
matthewtsmith merged 19 commits into
mainfrom
feat/web-redesign
Oct 27, 2026
Merged

matthewtsmith merged 19 commits into
mainfrom
feat/web-redesign

Conversation

@matthewtsmith

Copy link
Copy Markdown
Member

Summary

Redesigns the status page. The one-screen page with a right-hand column of six cards becomes a Dashboard plus four tabs behind a left navigation sidebar, with per-instance color themes and a card layout with more room per item.

  • Dashboard — controls, a banner for every reason the foreman is not taking work (STOP, failed preflight, daily cap, paused phase, stalled session, orphaned child, unfinished bookkeeping, stopped daemon, page offline), the running session, the in-flight pipeline as a five-dot track, and a compact live feed.
  • Needs you — owner decisions grouped by action: Approve a plan, Sign off a phase, Ready to plan, Unblock, Answer or close. Wait time per row; a phase review issue shows on its epic's Sign off row. The sidebar badge counts them (Ready to plan excepted).
  • Waiting on — what the foreman resolves by itself (CI, review rounds, dependencies, another Mac, phase gate) plus setup problems to fix on GitHub; waits already on Needs you are not repeated.
  • Board — every open issue, on the project board or not, grouped under its phase epic, with progress, Pause/Resume, and a model and an effort picker per issue.
  • Session — spend and sessions from sessions.log by range (today, 7 days, 30 days, all, custom): daily chart, spend by role, cost per task with each session's feed, and the daemon's model, daily cap, GitHub budget and tick.
  • Themes — indigo, violet, teal and mono, each with light and dark sets. A new instance takes the theme the other instances on the Mac use least; the sidebar swatches change it.

Server side, all computed from the snapshot the tick already has or from local logs (no new GitHub reads):

  • SessionLogEntry.title (optional) so closed tasks keep a name in the cost history.
  • Board.issues / Board.groups (src/board-issues.ts).
  • Phase review pairing (src/review-pairing.ts), OwnerItem.since / review, NeedsYouItem.reviewOf / phaseReview.
  • StatusReport.attention — badge counts, banners and de-duplicated waiting rows (src/attention.ts).
  • StatusReport.instance / theme, ForemanState.theme, POST /api/theme (src/theme.ts).
  • GET /api/sessions?from=&to= (src/session-history.ts), years 2000–2099, one-pass daily buckets.
  • The model/effort picker allowlist is every issue the Board lists (pickerTasks), still never an arbitrary issue number.

Every new field is optional or defaulted, so an older state.json and sessions.log keep parsing. Every write keeps its confirm text and server-side allowlist.

Design: docs/superpowers/specs/2026-10-26-web-redesign-design.md. Plan: docs/superpowers/plans/2026-10-26-web-redesign.md.

Test plan

  • pnpm lint && pnpm typecheck && pnpm test && pnpm build — 689 tests pass
  • Rendered against live status data from two instances at laptop and phone width (read-only proxy)
  • Whole-branch review; findings fixed with failing tests first
  • Live check on a running instance: every tab, Pause then Resume on a Board epic, typing a Custom date range

🤖 Generated with Claude Code

https://claude.ai/code/session_01JrFSqqtqyx8Kvf6u5pbAUf

matthewtsmith and others added 19 commits October 26, 2026 18:13
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrFSqqtqyx8Kvf6u5pbAUf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrFSqqtqyx8Kvf6u5pbAUf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrFSqqtqyx8Kvf6u5pbAUf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrFSqqtqyx8Kvf6u5pbAUf
Bound the session history range (years 2000-2099, one-pass daily buckets,
no zero-fill past ten years) so a typed custom date cannot stall the daemon,
and drop stale responses on the page. Pair a phase review only with an epic
waiting on its sign-off, one review per epic, by exact title. Flip the Board
group's paused flag with the owner action. Keep the daemon state visible at
phone width and when the page is offline. Keep a long daily chart inside its
card (weekly bars past 120 days). Escape clock times. Neutral titles in tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrFSqqtqyx8Kvf6u5pbAUf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrFSqqtqyx8Kvf6u5pbAUf
@matthewtsmith
matthewtsmith merged commit c9a5a17 into main Oct 27, 2026
1 check passed
@matthewtsmith
matthewtsmith deleted the feat/web-redesign branch October 27, 2026 03:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant