Skip to main content

Activity Dashboard Design Specification

------------------------------ Point A , Point B Route + Obstacles Speed Aggregated + Gas/Charge count Engine RPM HIDE - count Field Calculation...

Activity Dashboard Design Specification

Coditect Platform | UX Architecture Document
Version: 2.0
Date: November 27, 2025
Status: Design Phase


Executive Summary

This document captures the design principles and specifications for the Coditect Activity Dashboard, derived from stakeholder analysis. The core insight: users need to see the journey, not the engine.

Current implementation shows "how the machinery works" (conversations, messages, sessions). Users need "what has it made" (features, deliverables, milestones).


Data Sources Overview

The Activity Dashboard synthesizes data from four primary sources:


Data Model

Entity Relationship Diagram

Task Status State Machine


The Navigation Metaphor

The dashboard should function like a car's GPS navigation system, not its engine diagnostics panel.

Translation Matrix

Navigation ConceptDashboard EquivalentData Source
Point AProject start / Sprint baselinePROJECT.created_at, TASK_LIST
Point BTarget tasks checked offTASK.checked = true
RouteTask progression with commitsTASK.status + GIT_COMMIT
ObstaclesBlocked tasksTASK.status = 'blocked'
SpeedTasks completed / time periodAggregated TASK + GIT_COMMIT
Gas/ChargeSession counts (secondary)LLM_SESSION count
Engine RPMMessage countsHIDE - MESSAGE count

Multi-Project Architecture

Portfolio View Structure

Project Drill-Down Hierarchy


Information Architecture


Core Design Principles

Principle 1: Task-Centric, Not Session-Centric

Principle 2: Checkbox as Source of Truth

Principle 4: Assumptive Baseline - Exception-Only Display

"If it's 40, 40, 40, 40, 40 every time, don't show it."


UI Layout Specification

Primary Dashboard View

┌─────────────────────────────────────────────────────────────────────────────┐
│ CODITECT [All Projects ▼] [⚙ Settings] │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─ PROJECT SUMMARY ───────────────────────────────────────────────────┐ │
│ │ Auth System ████████████░░░░░░░░ 58% (7/12 tasks) 3 commits │ │
│ │ Payment Gateway ████████░░░░░░░░░░░░ 40% (4/10 tasks) 1 commit │ │
│ │ User Dashboard ██████████████░░░░░░ 70% (14/20 tasks) 5 commits │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ TASK JOURNEY (Auth System) ────────────────────────────────────────┐ │
│ │ │ │
│ │ PENDING IN PROGRESS REVIEW DONE │ │
│ │ ┌───────────┐ ┌─────────────┐ ┌─────────┐ ┌─────────────┐ │ │
│ │ │ Rate │ │ Refresh │ │ │ │ ☑ JWT │ │ │
│ │ │ Limiting │ → │ Token Logic │ │ │ │ Tokens │ │ │
│ │ │ │ │ ████░░ 60% │ │ │ ├─────────────┤ │ │
│ │ └───────────┘ └─────────────┘ └─────────┘ │ ☑ Auth │ │ │
│ │ ┌─────────────┐ │ Schema │ │ │
│ │ │ MFA Setup │ ├─────────────┤ │ │
│ │ │ ⚠️ BLOCKED │ │ ☑ Login │ │ │
│ │ └─────────────┘ │ Form │ │ │
│ │ └─────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ RECENT ACTIVITY ───────────────┐ ┌─ ATTENTION REQUIRED ────────────┐ │
│ │ │ │ │ │
│ │ • ☑ JWT tokens complete │ │ ⚠️ MFA Setup │ │
│ │ └ 3 commits, 2 sessions │ │ Blocked: Awaiting API spec │ │
│ │ • Refresh token at 60% │ │ Task List: Backend │ │
│ │ └ abc123: Add refresh logic │ │ Project: Auth System │ │
│ │ • ☑ Login form merged │ │ │ │
│ │ └ PR #42 approved │ │ ───────────────────────────── │ │
│ │ • New session: Rate limiting │ │ 1 blocked task across projects │ │
│ │ │ │ │ │
│ └─────────────────────────────────┘ └──────────────────────────────────┘ │
│ │
│ ┌─ WORK DISTRIBUTION (This Week) ──────────────────────────────────────┐ │
│ │ │ │
│ │ Auth System ████████████████████████░░░░░░░░░░ 45% │ 12 commits│
│ │ Payment Gateway ██████████░░░░░░░░░░░░░░░░░░░░░░░░ 25% │ 4 commits│
│ │ User Dashboard ████████░░░░░░░░░░░░░░░░░░░░░░░░░░ 20% │ 6 commits│
│ │ Documentation ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 10% │ 2 commits│
│ │ │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘

Data Transformation Architecture

Complete Data Pipeline

Session-to-Task Matching

Commit-to-Task Matching

Progress Calculation


Component Specifications

1. Project Summary Bar

Data Requirements:

FieldSourceCalculation
progress_pctTASK.checkedCOUNT(checked=true) / COUNT(*)
task_summaryTASK"N/M tasks"
commit_countGIT_COMMITCOUNT(last 7 days)
has_blockersTASK.statusEXISTS(status='blocked')

2. Task Kanban Board

Data Requirements:

ColumnFilterSort
PENDINGstatus='pending' AND checked=falseorder ASC
IN PROGRESSstatus='in_progress'updated_at DESC
REVIEWstatus='review'updated_at DESC
DONEchecked=trueupdated_at DESC
BLOCKEDstatus='blocked'created_at ASC

3. Recent Activity Feed

Activity Prioritization:

PriorityEvent TypeDisplay Format
1Task completed (checked)"☑ {task.title} complete"
2Task blocked"⚠️ {task.title} blocked"
3Commit merged"{sha}: {message}"
4Session with task context"Session: {inferred_topic}"
5Status change"{task.title} → {status}"

4. Blocker Panel

Query:

SELECT 
t.id,
t.title,
t.description AS blocked_reason,
p.name AS project_name,
tl.name AS task_list_name,
DATEDIFF(NOW(), t.updated_at) AS days_blocked
FROM tasks t
JOIN task_lists tl ON t.list_id = tl.id
JOIN project_plans pp ON tl.plan_id = pp.id
JOIN projects p ON pp.project_id = p.id
WHERE t.status = 'blocked'
ORDER BY t.updated_at ASC

5. Work Distribution Chart

Data Aggregation:


Technical Specifications

TypeScript Interfaces

// ============================================
// CORE ENTITIES
// ============================================

interface Project {
id: string;
name: string;
description?: string;
status: 'active' | 'archived' | 'paused';
created_at: Date;
updated_at: Date;

// Relations
git_repos: GitRepo[];
project_plan: ProjectPlan;
sessions: LLMSession[];
}

interface GitRepo {
id: string;
project_id: string;
url: string;
default_branch: string;
current_commit: string;

// Derived
recent_commits: GitCommit[];
}

interface GitCommit {
sha: string;
repo_id: string;
author: string;
message: string;
timestamp: Date;
additions: number;
deletions: number;
files_changed: string[];

// Linked
linked_tasks: TaskLink[];
}

interface ProjectPlan {
id: string;
project_id: string;
name: string;
description?: string;
target_date?: Date;

// Relations
task_lists: TaskList[];
}

interface TaskList {
id: string;
plan_id: string;
name: string;
order: number;
category?: string; // e.g., 'backend', 'frontend', 'testing'

// Relations
tasks: Task[];

// Derived
progress: number; // 0-100
total_tasks: number;
completed_tasks: number;
}

interface Task {
id: string;
list_id: string;
title: string;
description?: string;
checked: boolean; // ☑ or ☐
status: TaskStatus;
complexity?: 'S' | 'M' | 'L' | 'XL';
due_date?: Date;
created_at: Date;
updated_at: Date;

// Linked evidence
linked_sessions: SessionLink[];
linked_commits: CommitLink[];
}

type TaskStatus =
| 'pending' // Not started
| 'in_progress' // Being worked on
| 'review' // Awaiting review
| 'blocked' // Has obstacle
| 'done'; // Completed (checked=true)

interface LLMSession {
id: string;
project_id: string;
started_at: Date;
ended_at?: Date;
message_count: number;
summary?: string; // AI-generated, concise

// Links
linked_tasks: TaskLink[];

// Hidden from primary view
messages: Message[];
}

// ============================================
// LINKING TYPES
// ============================================

interface TaskLink {
task_id: string;
confidence: number; // 0-1
link_type: 'explicit' | 'inferred';
evidence?: string; // Why linked
}

interface SessionLink extends TaskLink {
session_id: string;
}

interface CommitLink extends TaskLink {
commit_sha: string;
}

// ============================================
// DASHBOARD TYPES
// ============================================

interface ProjectSummary {
project: Project;
progress_pct: number;
tasks_completed: number;
tasks_total: number;
commits_this_week: number;
sessions_this_week: number;
blocked_count: number;
has_blockers: boolean;
}

interface ActivityHighlight {
id: string;
type: 'task_completed' | 'commit' | 'session' | 'status_change' | 'blocked';
title: string; // Max 50 chars
subtitle?: string; // Max 30 chars
project_id: string;
task_id?: string;
timestamp: Date;
icon: 'check' | 'git' | 'chat' | 'alert';
}

interface BlockedTask {
task: Task;
project_name: string;
task_list_name: string;
blocked_reason?: string;
days_blocked: number;
}

interface WorkDistribution {
project_id: string;
project_name: string;
percentage: number;
commit_count: number;
session_count: number;
tasks_completed: number;
weighted_score: number;
}

// ============================================
// API RESPONSE TYPES
// ============================================

interface DashboardResponse {
portfolio_summary: ProjectSummary[];
selected_project?: {
project: Project;
kanban: KanbanBoard;
};
recent_activity: ActivityHighlight[]; // Max 5
blocked_tasks: BlockedTask[];
work_distribution: WorkDistribution[];
last_updated: Date;
}

interface KanbanBoard {
columns: KanbanColumn[];
}

interface KanbanColumn {
status: TaskStatus;
label: string;
tasks: Task[];
count: number;
}

Data Flow Diagram


What to Remove vs Keep

Content Classification

Detailed Classification

CategoryItemsRationale
✅ KEEPTask checkboxes, statusSource of truth for progress
✅ KEEPProject progress barsHigh-level navigation
✅ KEEPBlocked tasksException-only display
✅ KEEPRecent commits (linked)Evidence of progress
✅ KEEP5 activity highlightsConcise summary
⬇️ DRILL-DOWNSession message historyNeuron-level detail
⬇️ DRILL-DOWNCommit diffsCode-level detail
⬇️ DRILL-DOWNFull task historyAudit trail
⬇️ DRILL-DOWNToken usage metricsEngine diagnostics
❌ REMOVEMessage countsNo signal
❌ REMOVEWord countsNo signal
❌ REMOVEUniform QA scoresOnly show exceptions
❌ REMOVESession durationEngine metric

Implementation Priorities

Priority Matrix

PriorityComponentData SourceEffort
P0Multi-Project Data ModelAll sourcesM
P0Task Kanban BoardTASK, TASK_LISTM
P0Checkbox-Based ProgressTASK.checkedS
P0Blocked Task PanelTASK.status='blocked'S
P1Project Summary BarAggregated PROJECTM
P1Activity Feed (5 items)TASK, GIT_COMMIT, SESSIONM
P1Session→Task LinkingLLM_SESSION + TASKL
P1Commit→Task LinkingGIT_COMMIT + TASKM
P2Work DistributionAggregated by projectM
P2Commit TimelineGIT_COMMIT by timeS
P3Drill-Down ViewsAll sourcesL

Success Criteria

The 5-Second Test

The dashboard succeeds when a user can answer these questions in < 5 seconds without scrolling:

Failure Indicators

The dashboard fails if it requires the user to:

  • Scroll to see any project's progress
  • Count messages to understand progress
  • Mentally map sessions to tasks
  • See tasks without clear status
  • Read verbose AI summaries
  • Navigate away to find blockers

Appendix: Key Stakeholder Quotes

"The gold isn't in how is it doing it... the real stuff is features, deliverables, targets reached."

"What you want is: How do I get from A to B? What are my obstacles? And what's my route?"

"If it's 40, 40, 40, 40, 40 every time, don't show it."

"5 things that happened and a simple definition of these things."

"Sessions are segments of the journey... we need to connect them into the map."

"The thing you don't want to see [is] the neurons firing. We want to see what we're thinking about."

"A Kanban board has value because you can see features moving from left to right."


Document History

VersionDateAuthorChanges
1.02025-11-27Design TeamInitial specification
2.02025-11-27Design TeamAdded multi-project data model, task lists with checkboxes, git commit linking, session-to-task mapping, complete TypeScript interfaces

This document defines the UX architecture for the Coditect Activity Dashboard, emphasizing task-centric views with checkbox-based progress tracking, multi-project portfolio management, and evidence linking from LLM sessions and git commits.