Skip to content

feat: frontend redesign (Direction E) + scoring protocol + new skills - #42

Merged
mariuspruvot merged 28 commits into
mainfrom
staging
Apr 22, 2026
Merged

feat: frontend redesign (Direction E) + scoring protocol + new skills#42
mariuspruvot merged 28 commits into
mainfrom
staging

Conversation

@mariuspruvot

Copy link
Copy Markdown
Owner

Summary

Complete frontend redesign implementing the Direction E design system (warm dark, amber accent, monospace-first), plus backend scoring protocol and 4 new interactive skills.

Design System

  • New color palette, typography (JetBrains Mono + Inter), and shared component library (Button, Card, Chip, Dot, Overline, StatCard, TerminalBlock, GrainOverlay)
  • AppShell layout with Topbar and ErrorBoundary

Pages Rebuilt

  • Landing: hero + stats bar + example card + how-it-works + self-hosted + get-started
  • Dashboard: welcome header, stat strip, SVG activity chart (30-day), installation cards with avatar + status grid + action buttons
  • Installation Detail: completion bar, grid session table with sticky header/scrollable rows, status filter buttons, delete session with confirmation modal
  • Skill Selector: challenge-me (active), eli5/pair-debug/hot-seat/test-me (coming soon)
  • Setup Wizard: 3-step wizard with step indicator, shared components
  • Settings: token section, suppression labels, repository access, danger zone
  • Session: split layout (transcript + 260px right rail with progress tracker, scorecard, meta)

Backend

  • GET /api/v1/auth/me/stats — user-level session stats (daily counts + status totals)
  • GET /api/v1/containers/sessions/{id}/scorecard — parsed scorecard for completed sessions
  • DELETE /api/v1/containers/sessions/{id} — session deletion with CASCADE
  • scorecard JSONB column on container_sessions (migration included)
  • Scorecard extraction module (container/scorecard.py)

Skills

  • Updated challenge-me to emit helprs-scorecard JSON block (dimensions: depth/clarity/rigor)
  • 4 new skills: eli5, pair-debug, hot-seat, test-me (each with config.yaml, CLAUDE.md, prompt.md)

Test plan

  • Landing page renders all sections, sign-in redirects to GitHub OAuth
  • Dashboard shows stats, activity chart, installation cards
  • Installation detail: filters work, completion bar accurate, table scrolls internally, delete modal works
  • Session replay loads without crash, scorecard displays if available
  • Setup wizard flows through all 3 steps
  • Settings CRUD operations (token, labels) still functional
  • make lint passes (ruff + eslint)
  • make test passes (pytest + vitest)

Verifies health, TLS, frontend, API routes, admin panel, CORS headers,
and claude-runner image in a single pass. Exit code = number of failures.
Replace the existing color palette with the warm dark Direction E theme
(#14110e bg, #e2a039 amber accent, #f2ede4 bone text). Swap primary mono
font to JetBrains Mono, add grain overlay utility, and overline class.
Old token names kept as deprecated aliases for backward compat.
Reusable UI primitives matching Direction E design spec:
Button (primary/secondary/ghost/danger), Card, Chip (status variants),
StatCard, TerminalBlock (macOS chrome), GrainOverlay, Overline, Dot.
All components use the new design tokens and Tailwind classes.
Shared layout wrapping all protected routes: 56px sticky topbar
(logo, live dot, user avatar, sign out) + max-width centered content
+ warm grain overlay. Landing and auth callback remain full-bleed.
Complete rewrite using shared components (Card, StatCard, TerminalBlock,
GrainOverlay, Overline, Button). New hero headline, example session card,
stats strip, and updated copy positioning helPRs as a learning companion.
Replace code-review/security-audit (passive, removed from product) with
interactive skills: eli5, pair-debug, hot-seat, test-me (all coming soon).
Uses shared Card/Chip/Button components with Direction E styling.
Add helprs-scorecard JSON block extraction from Claude session output.
New scorecard.py module parses the fenced code block, validates structure
(3 dimensions, 0-10 range). Scorecard is persisted to container_sessions
table after mark_completed. New GET /sessions/{id}/scorecard endpoint.
Replace inline styles with shared components (Card, Chip, Dot, StatCard,
Overline). Add greeting header, stat strip, dashed add-installation card.
Remove duplicate topbar (now provided by AppShell).
Restyle session history table with Direction E tokens. StatusBadge now
uses shared Chip component with semantic variants. Add breadcrumb nav,
overline copy, pagination with Button component.
Apply shared components (Card, Button, Chip, Overline, Dot) and
Direction E design tokens to SetupView and SettingsView. Add step
indicator, repository access link, and danger zone section.
Split the session view into a two-column layout: transcript left,
right rail (260px) with progress tracker, scorecard display, session
meta, and privacy note. Apply Direction E styling to all message
blocks (amber border for assistant, ruleStr border for user, //
comment ornament for system). Add post-session CTAs and scorecard
fetch on completion.
Add GET /api/v1/auth/me/stats endpoint returning daily session counts
(last 30 days) and status totals across all accessible installations.
Add SVG-based ActivityChart component (no external deps). Wire stats
into dashboard stat strip and display chart above installation cards.
Update challenge-me CLAUDE.md to emit helprs-scorecard JSON block
alongside the existing markdown results. Align dimensions to
depth/clarity/rigor per the redesign spec.

Add 4 new interactive skills: eli5 (explain your code simply),
pair-debug (find the injected bug), hot-seat (defend your design),
test-me (predict test outcomes). Each skill has config.yaml,
CLAUDE.md, and prompt.md per SKILL_SPEC.md.
Fixes:
- Session replay crash: extract nested scorecard from API wrapper
- Topbar logo: use React Router Link instead of <a href>
- Sign-out: navigate to / before logout to avoid OAuth redirect
- SkillSelector: remove nested <button> (use <span> for Run)
- Add ErrorBoundary wrapping the entire app

Design alignment:
- ActivityChart: div-based flex bars matching mockup (3px gap, 120px
  height, accent color with active highlight, 30-day fill, axis labels)
- InstallationList: avatar + 2-column status grid + action buttons
- InstallationDetail: completion bar with stacked segments + legend,
  grid-based session table with proper columns, filter buttons
…ail header

- Set html/body/#root background to #14110e (no more white on scroll)
- Remove AppShell from session replay and live session routes (full page)
- Make installation detail header/completion bar sticky with scrollable table
Restructure installation detail so the table header row stays sticky
at the top, only the data rows scroll, and pagination stays at the
bottom outside the scroll area.
Add DELETE /api/v1/containers/sessions/{id} endpoint with access
control. CASCADE deletes associated session events. Add delete
button (x) on each session row in installation detail, visible on
hover. Optimistic removal from the list on click.
- Add modal with danger styling for session deletion confirmation
- Reduce per_page to 10, tighten row/header padding
- Fix height calc to account for AppShell padding (120px total)
- Smaller filter buttons and completion bar
@helprs-prod

helprs-prod Bot commented Apr 22, 2026

Copy link
Copy Markdown

helPRs session created for this PR.

Skill: challenge-me | Open session

- test_scorecard.py: fix import block formatting (I001)
- test_byok_router.py: rename validate_anthropic_api_key mock to
  validate_claude_key (function was renamed, test mock wasn't)
- ContainerSession: wrap Chip in span for data-testid forwarding
- ConversationOutput.test: update text assertions for new // prefix
  on system messages and empty state
@mariuspruvot
mariuspruvot merged commit 0c6ecf5 into main Apr 22, 2026
10 checks passed
mariuspruvot added a commit that referenced this pull request Jul 30, 2026
* chore: remove stale scaffolding, dead config, and BMAD leftovers

- Untrack the two BMAD skill files left behind under .claude/ (missed by 70483d7)
- Remove mkdocs.yml and docs/assets/: mkdocs is wired to no build step and its nav references seven files pruned in #52
- Remove docs/.archive/ (internal debug note + project scan report) from the public repo
- Remove empty features/demo scaffolding and redundant .gitkeep placeholders
- Drop dead Berkeley Mono @font-face declarations: the woff2 files were never shipped, every visitor 404s then falls back to JetBrains Mono
- Prune .gitignore entries for tooling that no longer exists (site/, _bmad, redisign scratchpads)
- Update CLAUDE.md and docs to match

* docs: note recoverable stats tests lost in #42 squash
mariuspruvot added a commit that referenced this pull request Jul 30, 2026
…#42)

* feat: add production smoke test script

Verifies health, TLS, frontend, API routes, admin panel, CORS headers,
and claude-runner image in a single pass. Exit code = number of failures.

* feat(web): implement Direction E design system tokens

Replace the existing color palette with the warm dark Direction E theme
(#14110e bg, #e2a039 amber accent, #f2ede4 bone text). Swap primary mono
font to JetBrains Mono, add grain overlay utility, and overline class.
Old token names kept as deprecated aliases for backward compat.

* feat(web): add shared component library

Reusable UI primitives matching Direction E design spec:
Button (primary/secondary/ghost/danger), Card, Chip (status variants),
StatCard, TerminalBlock (macOS chrome), GrainOverlay, Overline, Dot.
All components use the new design tokens and Tailwind classes.

* feat(web): add AppShell layout with topbar and grain overlay

Shared layout wrapping all protected routes: 56px sticky topbar
(logo, live dot, user avatar, sign out) + max-width centered content
+ warm grain overlay. Landing and auth callback remain full-bleed.

* feat(web): rebuild landing page with Direction E design

Complete rewrite using shared components (Card, StatCard, TerminalBlock,
GrainOverlay, Overline, Button). New hero headline, example session card,
stats strip, and updated copy positioning helPRs as a learning companion.

* feat(web): rebuild skill selector with new skills lineup

Replace code-review/security-audit (passive, removed from product) with
interactive skills: eli5, pair-debug, hot-seat, test-me (all coming soon).
Uses shared Card/Chip/Button components with Direction E styling.

* feat(api): add scorecard extraction and persistence

Add helprs-scorecard JSON block extraction from Claude session output.
New scorecard.py module parses the fenced code block, validates structure
(3 dimensions, 0-10 range). Scorecard is persisted to container_sessions
table after mark_completed. New GET /sessions/{id}/scorecard endpoint.

* feat(web): rebuild dashboard with Direction E design

Replace inline styles with shared components (Card, Chip, Dot, StatCard,
Overline). Add greeting header, stat strip, dashed add-installation card.
Remove duplicate topbar (now provided by AppShell).

* feat(web): rebuild installation detail and StatusBadge

Restyle session history table with Direction E tokens. StatusBadge now
uses shared Chip component with semantic variants. Add breadcrumb nav,
overline copy, pagination with Button component.

* feat(web): restyle setup wizard and settings with Direction E design

Apply shared components (Card, Button, Chip, Overline, Dot) and
Direction E design tokens to SetupView and SettingsView. Add step
indicator, repository access link, and danger zone section.

* feat(web): redesign session UI with split layout and scorecard rail

Split the session view into a two-column layout: transcript left,
right rail (260px) with progress tracker, scorecard display, session
meta, and privacy note. Apply Direction E styling to all message
blocks (amber border for assistant, ruleStr border for user, //
comment ornament for system). Add post-session CTAs and scorecard
fetch on completion.

* feat: add dashboard activity chart and user stats endpoint

Add GET /api/v1/auth/me/stats endpoint returning daily session counts
(last 30 days) and status totals across all accessible installations.
Add SVG-based ActivityChart component (no external deps). Wire stats
into dashboard stat strip and display chart above installation cards.

* feat: update challenge-me scoring and add 4 new skills

Update challenge-me CLAUDE.md to emit helprs-scorecard JSON block
alongside the existing markdown results. Align dimensions to
depth/clarity/rigor per the redesign spec.

Add 4 new interactive skills: eli5 (explain your code simply),
pair-debug (find the injected bug), hot-seat (defend your design),
test-me (predict test outcomes). Each skill has config.yaml,
CLAUDE.md, and prompt.md per SKILL_SPEC.md.

* fix(web): fix QA bugs and align dashboard/detail with R2 mockup

Fixes:
- Session replay crash: extract nested scorecard from API wrapper
- Topbar logo: use React Router Link instead of <a href>
- Sign-out: navigate to / before logout to avoid OAuth redirect
- SkillSelector: remove nested <button> (use <span> for Run)
- Add ErrorBoundary wrapping the entire app

Design alignment:
- ActivityChart: div-based flex bars matching mockup (3px gap, 120px
  height, accent color with active highlight, 30-day fill, axis labels)
- InstallationList: avatar + 2-column status grid + action buttons
- InstallationDetail: completion bar with stacked segments + legend,
  grid-based session table with proper columns, filter buttons

* fix(web): dark background on html/body, full-page session, sticky detail header

- Set html/body/#root background to #14110e (no more white on scroll)
- Remove AppShell from session replay and live session routes (full page)
- Make installation detail header/completion bar sticky with scrollable table

* fix(web): only table rows scroll, header and pagination stay fixed

Restructure installation detail so the table header row stays sticky
at the top, only the data rows scroll, and pagination stays at the
bottom outside the scroll area.

* feat: add session delete endpoint and UI button

Add DELETE /api/v1/containers/sessions/{id} endpoint with access
control. CASCADE deletes associated session events. Add delete
button (x) on each session row in installation detail, visible on
hover. Optimistic removal from the list on click.

* fix(web): add delete confirmation modal and fit table to viewport

- Add modal with danger styling for session deletion confirmation
- Reduce per_page to 10, tighten row/header padding
- Fix height calc to account for AppShell padding (120px total)
- Smaller filter buttons and completion bar

* fix: fix CI failures — lint, test mocks, and updated assertions

- test_scorecard.py: fix import block formatting (I001)
- test_byok_router.py: rename validate_anthropic_api_key mock to
  validate_claude_key (function was renamed, test mock wasn't)
- ContainerSession: wrap Chip in span for data-testid forwarding
- ConversationOutput.test: update text assertions for new // prefix
  on system messages and empty state
mariuspruvot added a commit that referenced this pull request Jul 30, 2026
* chore: remove stale scaffolding, dead config, and planning leftovers

- Untrack the two stale skill files left behind under .claude/ (missed by 1006a1f)
- Remove mkdocs.yml and docs/assets/: mkdocs is wired to no build step and its nav references seven files pruned in #52
- Remove docs/.archive/ (internal debug note + project scan report) from the public repo
- Remove empty features/demo scaffolding and redundant .gitkeep placeholders
- Drop dead Berkeley Mono @font-face declarations: the woff2 files were never shipped, every visitor 404s then falls back to JetBrains Mono
- Prune .gitignore entries for tooling that no longer exists (site/, _planning, redisign scratchpads)
- Update CLAUDE.md and docs to match

* docs: note recoverable stats tests lost in #42 squash
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