Add comprehensive development intelligence system that tracks: - Development sessions with automatic start/stop - Full conversation history with semantic search - Tool usage and file operation analytics - Think time and engagement analysis - Git activity correlation - Learning pattern recognition - Productivity insights and metrics Features: - FastAPI backend with SQLite database - Modern web dashboard with interactive charts - Claude Code hook integration for automatic tracking - Comprehensive test suite with 100+ tests - Complete API documentation (OpenAPI/Swagger) - Privacy-first design with local data storage 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
207 lines
7.1 KiB
HTML
207 lines
7.1 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Dashboard - Claude Code Project Tracker{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<h1>
|
|
<i class="fas fa-tachometer-alt me-2"></i>
|
|
Development Dashboard
|
|
</h1>
|
|
<div class="btn-group" role="group">
|
|
<button type="button" class="btn btn-outline-primary" onclick="refreshDashboard()">
|
|
<i class="fas fa-sync-alt me-1"></i>
|
|
Refresh
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Status Cards -->
|
|
<div class="row mb-4">
|
|
<div class="col-md-3">
|
|
<div class="card bg-primary text-white">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div class="flex-grow-1">
|
|
<h5 class="card-title mb-0">Total Sessions</h5>
|
|
<h2 class="mb-0" id="total-sessions">-</h2>
|
|
</div>
|
|
<i class="fas fa-play-circle fa-2x opacity-75"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-3">
|
|
<div class="card bg-success text-white">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div class="flex-grow-1">
|
|
<h5 class="card-title mb-0">Development Time</h5>
|
|
<h2 class="mb-0" id="total-time">-</h2>
|
|
<small class="opacity-75">hours</small>
|
|
</div>
|
|
<i class="fas fa-clock fa-2x opacity-75"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-3">
|
|
<div class="card bg-info text-white">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div class="flex-grow-1">
|
|
<h5 class="card-title mb-0">Active Projects</h5>
|
|
<h2 class="mb-0" id="active-projects">-</h2>
|
|
</div>
|
|
<i class="fas fa-folder-open fa-2x opacity-75"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-3">
|
|
<div class="card bg-warning text-white">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div class="flex-grow-1">
|
|
<h5 class="card-title mb-0">Productivity Score</h5>
|
|
<h2 class="mb-0" id="productivity-score">-</h2>
|
|
<small class="opacity-75">out of 100</small>
|
|
</div>
|
|
<i class="fas fa-chart-line fa-2x opacity-75"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Charts Row -->
|
|
<div class="row mb-4">
|
|
<div class="col-md-8">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-chart-area me-2"></i>
|
|
Productivity Trends (Last 30 Days)
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<canvas id="productivityChart" height="100"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-4">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-tools me-2"></i>
|
|
Top Tools Used
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<canvas id="toolsChart" height="200"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Recent Activity -->
|
|
<div class="row mb-4">
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-history me-2"></i>
|
|
Recent Projects
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div id="recent-projects">
|
|
<div class="text-center py-3">
|
|
<div class="spinner-border text-primary" role="status">
|
|
<span class="visually-hidden">Loading...</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-bolt me-2"></i>
|
|
Quick Stats
|
|
</h5>
|
|
<small class="text-muted">Last 7 days</small>
|
|
</div>
|
|
<div class="card-body">
|
|
<div id="quick-stats">
|
|
<div class="text-center py-3">
|
|
<div class="spinner-border text-primary" role="status">
|
|
<span class="visually-hidden">Loading...</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Engagement Insights -->
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-brain me-2"></i>
|
|
Engagement & Flow Analysis
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<div class="text-center">
|
|
<div class="display-4 text-primary mb-2" id="engagement-score">-</div>
|
|
<h6>Engagement Score</h6>
|
|
<p class="text-muted small">Based on think times and response patterns</p>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="text-center">
|
|
<div class="display-4 text-success mb-2" id="avg-session-length">-</div>
|
|
<h6>Avg Session Length</h6>
|
|
<p class="text-muted small">minutes per development session</p>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="text-center">
|
|
<div class="display-4 text-info mb-2" id="think-time">-</div>
|
|
<h6>Think Time</h6>
|
|
<p class="text-muted small">average seconds between interactions</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block scripts %}
|
|
<script src="/static/js/dashboard.js"></script>
|
|
<script>
|
|
// Initialize dashboard on page load
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
loadDashboardData();
|
|
});
|
|
</script>
|
|
{% endblock %} |