From da511fcc9f86d3c8f39390384b4d2ab07e9593d0 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Wed, 10 Jun 2026 11:04:23 -0400 Subject: [PATCH] feat(ui): declutter dashboard done-recently + MCP-access, add per-project stats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dashboard: - 'Done recently' chip-cloud -> compact uniform list (Active-now row style), showing 5 with inline expand to the rest (backend already returns up to 8). - New 'Projects' rail card: each active project with 'N open · M done'. Backend already computed done_count (dashboard.py) — now surfaced in the /api/dashboard payload per active project. MCP Access (Connect Claude / Claude Code): - Progressive disclosure: lead with the pre-filled plugin-install snippet; fold server name, scope, marketplace URL, and the MCP-only path into a single 'Customize' expander. Desktop tab keeps its own server-name field. - Marketplace URL now defaults to this instance's own repo via config.PLUGIN_MARKETPLACE_URL (env-overridable); /api/plugin/marketplace-url falls back to it, so the field + install snippet are pre-filled out of the box instead of showing a generic placeholder. Refs #761 Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/views/DashboardView.vue | 56 +++++++++-- frontend/src/views/SettingsView.vue | 145 +++++++++++++-------------- src/scribe/config.py | 10 ++ src/scribe/routes/plugin.py | 7 +- src/scribe/services/dashboard.py | 3 +- 5 files changed, 134 insertions(+), 87 deletions(-) diff --git a/frontend/src/views/DashboardView.vue b/frontend/src/views/DashboardView.vue index bdd9bee..f71eb9a 100644 --- a/frontend/src/views/DashboardView.vue +++ b/frontend/src/views/DashboardView.vue @@ -7,7 +7,7 @@ interface TaskRow { id: number; title: string; status: string; priority: string interface MilestoneBlock { id: number; title: string; progress_pct: number; open_tasks: TaskRow[] } interface ActiveProject { id: number; title: string; color: string | null; last_activity: string; - open_count: number; progress_pct: number; + open_count: number; done_count: number; progress_pct: number; milestones: MilestoneBlock[]; no_milestone: TaskRow[]; } interface DoneItem { id: number; title: string; project_title: string | null; completed_at: string } @@ -22,6 +22,8 @@ interface DashboardData { const data = ref(null); const loading = ref(true); +const showAllDone = ref(false); +const DONE_VISIBLE = 5; onMounted(async () => { try { @@ -53,17 +55,25 @@ function fmtEvent(e: UpcomingEvent): string {