Skip to content

feat(dashboard): search, sort, and live stage progress on project cards - #56

Closed
PeerapolSelanon wants to merge 7 commits into
crisng95:mainfrom
PeerapolSelanon:claude/sawasdee-krap-c5c9c1
Closed

PeerapolSelanon wants to merge 7 commits into
crisng95:mainfrom
PeerapolSelanon:claude/sawasdee-krap-c5c9c1

Conversation

@PeerapolSelanon

Copy link
Copy Markdown

Summary

The Projects page did not scale past a handful of projects: no search, no sort, and cards gave no hint of pipeline progress. The home Dashboard also refetched everything (N+1) on every WebSocket event.

  • Search + sort: search box (name / description / id prefix), list sorted by updated_at desc.
  • Progress on cards: img 8/8 · vid 5/8 · up 0/8, green when a stage is complete. Backed by new GET /api/projects/progress: one GROUP BY query, mirroring stageStats.sceneStageStatus (vertical wins unless PENDING).
  • useReloadOnEvent hook: replaces the same request_update / urls_refreshed effect copied in DashboardPage, PipelineView and LogViewer, with a 400ms trailing debounce so an event burst during a pipeline run triggers one reload. Project cards refresh progress through the same hook.
  • .claude/launch.json for the api + vite dev servers.

Test plan

  • tests/unit/test_project_progress.py covers the SQL vs the dashboard status rule (vertical FAILED beats horizontal COMPLETED; vertical PENDING falls back to horizontal)
  • tsc -b and eslint clean
  • Manually verified against a seeded DB of 12 projects: search narrows to 1, Archived tab shows 2, progress lines render, home Dashboard loads, no console errors
  • Live debounce path not exercised: events are only emitted by the worker, which needs the extension + Flow tab

Pre-existing failures in test_setup.py / test_cli_providers.py are unrelated (same before this branch).

🤖 Generated with Claude Code

PeerapolSelanon and others added 7 commits September 21, 2026 13:20
…ct cards

Projects page gets a search box (name/description/id) and sorts by
updated_at desc. Cards show img/vid/up done-counts from a new
GET /api/projects/progress endpoint: one GROUP BY query instead of
N+1 fetches, mirroring stageStats.sceneStageStatus.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ject cards

One useReloadOnEvent hook replaces the same request_update/urls_refreshed
effect copied in DashboardPage, PipelineView and LogViewer, with a 400ms
trailing debounce so a burst of events during a pipeline run becomes one
reload instead of one N+1 fetch per event. Project cards now refresh
their stage progress through the same hook.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Starts whichever of :8100 / :5173 is not already listening, waits for
/health, and reports extension_connected so the agent can begin work.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
scripts/control_center.pyw: stdlib tkinter, no extra installs. One row per
server with a live status dot, Start/Stop/Restart/Open, an extension-connected
line polled from /health, and a logs folder. Stop uses taskkill /T on the
port's pid so it also kills servers started elsewhere and the npm->node tree.
scripts/control-center.bat is the double-click launcher.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…shboard

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@PeerapolSelanon

Copy link
Copy Markdown
Author

Closing: continuing this work in my own fork.

@PeerapolSelanon
PeerapolSelanon deleted the claude/sawasdee-krap-c5c9c1 branch September 21, 2026 07:00
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