Ryan Malloy 44ed9936b7 Initial commit: Claude Code Project Tracker
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>
2025-08-11 02:59:21 -06:00

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 %}