From dadd97a5c544afde6ed6c3592d4cdbf25f941ef5 Mon Sep 17 00:00:00 2001 From: Gros Frumos Date: Sat, 21 Mar 2026 08:52:40 +0200 Subject: [PATCH 1/2] kin: KIN-138-frontend_dev --- web/frontend/src/views/Dashboard.vue | 55 ++++++++++++++++++++------ web/frontend/src/views/ProjectView.vue | 30 ++++++++++++++ web/frontend/src/views/TaskDetail.vue | 10 ++++- 3 files changed, 80 insertions(+), 15 deletions(-) diff --git a/web/frontend/src/views/Dashboard.vue b/web/frontend/src/views/Dashboard.vue index ef9d54b..9fe26ad 100644 --- a/web/frontend/src/views/Dashboard.vue +++ b/web/frontend/src/views/Dashboard.vue @@ -11,6 +11,16 @@ const projects = ref([]) const costs = ref([]) const loading = ref(true) const error = ref('') +const projectSearch = ref('') +const showNewMenu = ref(false) + +const filteredProjects = computed(() => { + const q = projectSearch.value.trim().toLowerCase() + if (!q) return projects.value + return projects.value.filter(p => + p.id.toLowerCase().includes(q) || p.name.toLowerCase().includes(q) + ) +}) // Add project modal const showAdd = ref(false) @@ -194,27 +204,39 @@ async function createNewProject() {

{{ t('dashboard.title') }}

{{ t('dashboard.cost_this_week') }}: ${{ totalCost.toFixed(2) }}

-
- - - +
+ + + +
+
+ +
+

{{ t('dashboard.loading') }}

{{ error }}

-
+
@@ -272,6 +294,13 @@ async function createNewProject() { {{ p.total_tasks - p.done_tasks - p.active_tasks - p.blocked_tasks - (p.review_tasks || 0) }} pending
+
+
+
+
+ {{ Math.round((p.done_tasks || 0) / p.total_tasks * 100) }}% +
diff --git a/web/frontend/src/views/ProjectView.vue b/web/frontend/src/views/ProjectView.vue index 143bc98..cbb1e99 100644 --- a/web/frontend/src/views/ProjectView.vue +++ b/web/frontend/src/views/ProjectView.vue @@ -646,6 +646,18 @@ const taskCategories = computed(() => { return Array.from(cats).sort() }) +const taskStats = computed(() => { + const tasks = project.value?.tasks || [] + const total = tasks.length + if (!total) return null + const done = tasks.filter(t => t.status === 'done').length + const running = tasks.filter(t => t.status === 'in_progress').length + const review = tasks.filter(t => t.status === 'review').length + const blocked = tasks.filter(t => t.status === 'blocked').length + const pending = tasks.filter(t => t.status === 'pending').length + return { total, done, running, review, blocked, pending, pct: Math.round(done / total * 100) } +}) + const searchFilteredTasks = computed(() => { if (!project.value) return [] const q = taskSearch.value.trim().toLowerCase() @@ -1079,6 +1091,24 @@ async function addDecision() {
+ +
+
+
+
+
+
+ {{ taskStats.done }}/{{ taskStats.total }} ({{ taskStats.pct }}%) +
+
+ ● {{ taskStats.running }} running + ⚠ {{ taskStats.review }} review + ✕ {{ taskStats.blocked }} blocked + ○ {{ taskStats.pending }} pending +
+
diff --git a/web/frontend/src/views/TaskDetail.vue b/web/frontend/src/views/TaskDetail.vue index 359d9ad..1fd783f 100644 --- a/web/frontend/src/views/TaskDetail.vue +++ b/web/frontend/src/views/TaskDetail.vue @@ -461,8 +461,14 @@ async function saveEdit() {
-
- Brief: {{ JSON.stringify(task.brief) }} +
+ Brief: + {{ (task.brief as Record).text }} + {{ (task.brief as Record).description }} +
+ raw +
{{ JSON.stringify(task.brief, null, 2) }}
+
{{ t('taskDetail.acceptance_criteria') }}
From 23c715727480a90d57748fc7231c699c08152df7 Mon Sep 17 00:00:00 2001 From: Gros Frumos Date: Sat, 21 Mar 2026 08:54:59 +0200 Subject: [PATCH 2/2] kin: auto-commit after pipeline