# rtarun3606k/takatime architecture

> Architecture diagram of the GitHub repository rtarun3606k/takatime, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rtarun3606k/takatime
- Repository: https://github.com/rtarun3606k/takatime

## Overview

TakaTime is a self-hosted coding-activity tracker: editor integrations capture activity and share core Go binaries, while Go commands provide dashboards, profile-stat images, reports, and data export. The documented primary workflow is editor heartbeat collection, asynchronous sync, MongoDB persistence, then dashboard/statistical results. The excerpts directly establish selected dashboard, query, export, and VS Code dispatch paths; other README capabilities and editor integrations are represented from documentation/tree evidence, with uncertain links marked dashed.

Main entry points: [`vscodePlugin/Takatime/extension.js`](https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/extension.js) (VS Code Extension), [`cmd/upload/main.go`](https://github.com/rtarun3606k/takatime/blob/main/cmd/upload/main.go) (Upload Command), [`cmd/dashboard/database.go`](https://github.com/rtarun3606k/takatime/blob/main/cmd/dashboard/database.go) (Dashboard Data Fetch), [`vscodePlugin/Takatime/Plugin/HeartBeat.js`](https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/HeartBeat.js) (Heartbeat Capture)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editors["Editor Integrations"]
  node_vscode["VS Code Extension<br/>[extension.js]"]
  node_heartbeat["Heartbeat Capture<br/>[HeartBeat.js]"]
  node_vscode_setup["Plugin Setup<br/>[Setup.js]"]
  node_vscode_status["Status Bar<br/>[StatusBarUpdate.js]"]
  node_vscode_dashboard["Dashboard Launch<br/>[showDashboard.js]"]
  node_jetbrains["JetBrains Plugin"]
  node_binary_manager["Binary Manager"]
end

subgraph group_capture["Activity and Storage"]
  node_go_upload["Upload Command<br/>[main.go]"]
  node_offline_queue[("Offline Queue<br/>[localDB.go]")]
  node_mongo[("MongoDB Logs<br/>[mongo.go]")]
  node_language_detection["Language Detection<br/>[GetLanguage.go]"]
end

subgraph group_insights["Insights and Dashboard"]
  node_dashboard_cli["Terminal Dashboard<br/>[main.go]"]
  node_dashboard_fetch["Dashboard Data Fetch<br/>[database.go]"]
  node_aggregations["Usage Aggregations<br/>[aggration.go]"]
  node_dashboard_aggregations["Activity and Streaks"]
  node_persona["Coder Persona<br/>[coderPersona.go]"]
  node_dashboard_views["Dashboard Views<br/>[home.go]"]
end

subgraph group_outputs["Reports and Profile Stats"]
  node_export_cli["Data Export<br/>[main.go]"]
  node_exporter["Log Exporter<br/>[exporter.go]"]
  node_report_cli["Report Generator<br/>[main.go]"]
  node_stats_image["Profile Stats Images<br/>[StatsImg.go]"]
  node_stat_cards["Stats Cards<br/>[Card.go]"]
  node_gist_upload["GitHub Gist Upload<br/>[UploadImg.go]"]
end

node_developer(("Developer"))
node_github(("GitHub"))

node_developer -->|"uses"| node_vscode
node_vscode -->|"dispatches"| node_heartbeat
node_vscode -->|"invokes"| node_vscode_setup
node_vscode -->|"updates"| node_vscode_status
node_vscode -->|"opens"| node_vscode_dashboard
node_heartbeat -.->|"queues offline"| node_offline_queue
node_heartbeat -.->|"syncs activity"| node_go_upload
node_developer -->|"uses"| node_jetbrains
node_jetbrains -.->|"manages binary"| node_binary_manager
node_jetbrains -.->|"syncs activity"| node_go_upload
node_go_upload -.->|"classifies files"| node_language_detection
node_go_upload -.->|"buffers logs"| node_offline_queue
node_go_upload -.->|"persists logs"| node_mongo
node_developer -->|"views stats"| node_dashboard_cli
node_dashboard_cli -->|"fetches asynchronously"| node_dashboard_fetch
node_dashboard_fetch -->|"connects"| node_mongo
node_dashboard_fetch -->|"requests lists"| node_aggregations
node_dashboard_fetch -->|"requests activity"| node_dashboard_aggregations
node_dashboard_cli -.->|"renders"| node_dashboard_views
node_dashboard_views -.->|"renders persona"| node_persona
node_developer -->|"exports data"| node_export_cli
node_export_cli -->|"connects"| node_mongo
node_export_cli -->|"fetches filtered logs"| node_exporter
node_developer -->|"generates report"| node_report_cli
node_report_cli -.->|"generates charts"| node_stats_image
node_stats_image -.->|"shares rendering"| node_stat_cards
node_stat_cards -->|"uploads image"| node_gist_upload
node_gist_upload -.->|"publishes stats"| node_github

click node_vscode "https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/extension.js"
click node_heartbeat "https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/HeartBeat.js"
click node_vscode_setup "https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/Setup.js"
click node_vscode_status "https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/StatusBarUpdate.js"
click node_vscode_dashboard "https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/showDashboard.js"
click node_jetbrains "https://github.com/rtarun3606k/takatime/blob/main/jetbrains/Takatime/src/main/kotlin/com/takatime/jetbrains/TakaTimeListeners.kt"
click node_binary_manager "https://github.com/rtarun3606k/takatime/blob/main/jetbrains/Takatime/src/main/kotlin/com/takatime/jetbrains/TakaTimeBinaryManager.kt"
click node_go_upload "https://github.com/rtarun3606k/takatime/blob/main/cmd/upload/main.go"
click node_offline_queue "https://github.com/rtarun3606k/takatime/blob/main/internal/db/localDB.go"
click node_mongo "https://github.com/rtarun3606k/takatime/blob/main/internal/db/mongo.go"
click node_language_detection "https://github.com/rtarun3606k/takatime/blob/main/internal/Utils/GetLanguage.go"
click node_dashboard_cli "https://github.com/rtarun3606k/takatime/blob/main/cmd/dashboard/main.go"
click node_dashboard_fetch "https://github.com/rtarun3606k/takatime/blob/main/cmd/dashboard/database.go"
click node_aggregations "https://github.com/rtarun3606k/takatime/blob/main/internal/DBQueryV2/aggration.go"
click node_dashboard_aggregations "https://github.com/rtarun3606k/takatime/blob/main/internal/DBQueryV2/dashboardAggreations.go"
click node_persona "https://github.com/rtarun3606k/takatime/blob/main/internal/Persnalization/coderPersona.go"
click node_dashboard_views "https://github.com/rtarun3606k/takatime/blob/main/cmd/dashboard/home.go"
click node_export_cli "https://github.com/rtarun3606k/takatime/blob/main/cmd/export/main.go"
click node_exporter "https://github.com/rtarun3606k/takatime/blob/main/internal/Exporter/exporter.go"
click node_report_cli "https://github.com/rtarun3606k/takatime/blob/main/cmd/report/main.go"
click node_stats_image "https://github.com/rtarun3606k/takatime/blob/main/internal/BuildImg/StatsImg.go"
click node_stat_cards "https://github.com/rtarun3606k/takatime/blob/main/internal/BuildImg/Card.go"
click node_gist_upload "https://github.com/rtarun3606k/takatime/blob/main/internal/GoGist/UploadImg.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_vscode,node_heartbeat,node_vscode_setup,node_vscode_status,node_vscode_dashboard,node_jetbrains,node_binary_manager toneBlue
class node_go_upload,node_offline_queue,node_mongo,node_language_detection toneAmber
class node_dashboard_cli,node_dashboard_fetch,node_aggregations,node_dashboard_aggregations,node_persona,node_dashboard_views toneMint
class node_export_cli,node_exporter,node_report_cli,node_stats_image,node_stat_cards,node_gist_upload toneRose
class node_developer,node_github toneIndigo
```

## Components

### Editor Integrations

- [VS Code Extension](https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/extension.js): `vscodePlugin/Takatime/extension.js`
- [Heartbeat Capture](https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/HeartBeat.js): `vscodePlugin/Takatime/Plugin/HeartBeat.js`
- [Plugin Setup](https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/Setup.js): `vscodePlugin/Takatime/Plugin/Setup.js`
- [Status Bar](https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/StatusBarUpdate.js): `vscodePlugin/Takatime/Plugin/StatusBarUpdate.js`
- [Dashboard Launch](https://github.com/rtarun3606k/takatime/blob/main/vscodePlugin/Takatime/Plugin/showDashboard.js): `vscodePlugin/Takatime/Plugin/showDashboard.js`
- [JetBrains Plugin](https://github.com/rtarun3606k/takatime/blob/main/jetbrains/Takatime/src/main/kotlin/com/takatime/jetbrains/TakaTimeListeners.kt): `jetbrains/Takatime/src/main/kotlin/com/takatime/jetbrains/TakaTimeListeners.kt`
- [Binary Manager](https://github.com/rtarun3606k/takatime/blob/main/jetbrains/Takatime/src/main/kotlin/com/takatime/jetbrains/TakaTimeBinaryManager.kt): `jetbrains/Takatime/src/main/kotlin/com/takatime/jetbrains/TakaTimeBinaryManager.kt`

### Activity and Storage

- [Upload Command](https://github.com/rtarun3606k/takatime/blob/main/cmd/upload/main.go): `cmd/upload/main.go`
- [Offline Queue](https://github.com/rtarun3606k/takatime/blob/main/internal/db/localDB.go): `internal/db/localDB.go`
- [MongoDB Logs](https://github.com/rtarun3606k/takatime/blob/main/internal/db/mongo.go): `internal/db/mongo.go`
- [Language Detection](https://github.com/rtarun3606k/takatime/blob/main/internal/Utils/GetLanguage.go): `internal/Utils/GetLanguage.go`

### Insights and Dashboard

- [Terminal Dashboard](https://github.com/rtarun3606k/takatime/blob/main/cmd/dashboard/main.go): `cmd/dashboard/main.go`
- [Dashboard Data Fetch](https://github.com/rtarun3606k/takatime/blob/main/cmd/dashboard/database.go): `cmd/dashboard/database.go`
- [Usage Aggregations](https://github.com/rtarun3606k/takatime/blob/main/internal/DBQueryV2/aggration.go): `internal/DBQueryV2/aggration.go`
- [Activity and Streaks](https://github.com/rtarun3606k/takatime/blob/main/internal/DBQueryV2/dashboardAggreations.go): `internal/DBQueryV2/dashboardAggreations.go`
- [Coder Persona](https://github.com/rtarun3606k/takatime/blob/main/internal/Persnalization/coderPersona.go): `internal/Persnalization/coderPersona.go`
- [Dashboard Views](https://github.com/rtarun3606k/takatime/blob/main/cmd/dashboard/home.go): `cmd/dashboard/home.go`

### Reports and Profile Stats

- [Data Export](https://github.com/rtarun3606k/takatime/blob/main/cmd/export/main.go): `cmd/export/main.go`
- [Log Exporter](https://github.com/rtarun3606k/takatime/blob/main/internal/Exporter/exporter.go): `internal/Exporter/exporter.go`
- [Report Generator](https://github.com/rtarun3606k/takatime/blob/main/cmd/report/main.go): `cmd/report/main.go`
- [Profile Stats Images](https://github.com/rtarun3606k/takatime/blob/main/internal/BuildImg/StatsImg.go): `internal/BuildImg/StatsImg.go`
- [Stats Cards](https://github.com/rtarun3606k/takatime/blob/main/internal/BuildImg/Card.go): `internal/BuildImg/Card.go`
- [GitHub Gist Upload](https://github.com/rtarun3606k/takatime/blob/main/internal/GoGist/UploadImg.go): `internal/GoGist/UploadImg.go`

### Other components

- **Developer**
- **GitHub**

## Connections

- Developer → VS Code Extension: uses
- VS Code Extension → Heartbeat Capture: dispatches (evidence: `vscodePlugin/Takatime/extension.js`)
- VS Code Extension → Plugin Setup: invokes (evidence: `vscodePlugin/Takatime/extension.js`)
- VS Code Extension → Status Bar: updates (evidence: `vscodePlugin/Takatime/extension.js`)
- VS Code Extension → Dashboard Launch: opens (evidence: `vscodePlugin/Takatime/extension.js`)
- Heartbeat Capture → Offline Queue: queues offline
- Heartbeat Capture → Upload Command: syncs activity
- Developer → JetBrains Plugin: uses
- JetBrains Plugin → Binary Manager: manages binary
- JetBrains Plugin → Upload Command: syncs activity
- Upload Command → Language Detection: classifies files
- Upload Command → Offline Queue: buffers logs
- Upload Command → MongoDB Logs: persists logs
- Developer → Terminal Dashboard: views stats
- Terminal Dashboard → Dashboard Data Fetch: fetches asynchronously (evidence: `cmd/dashboard/main.go`)
- Dashboard Data Fetch → MongoDB Logs: connects (evidence: `cmd/dashboard/database.go`)
- Dashboard Data Fetch → Usage Aggregations: requests lists (evidence: `cmd/dashboard/database.go`)
- Dashboard Data Fetch → Activity and Streaks: requests activity (evidence: `cmd/dashboard/database.go`)
- Terminal Dashboard → Dashboard Views: renders
- Dashboard Views → Coder Persona: renders persona
- Developer → Data Export: exports data (evidence: `cmd/export/main.go`)
- Data Export → MongoDB Logs: connects (evidence: `cmd/export/main.go`)
- Data Export → Log Exporter: fetches filtered logs (evidence: `cmd/export/main.go`)
- Developer → Report Generator: generates report
- Report Generator → Profile Stats Images: generates charts
- Profile Stats Images → Stats Cards: shares rendering
- Stats Cards → GitHub Gist Upload: uploads image (evidence: `internal/BuildImg/Card.go`)
- GitHub Gist Upload → GitHub: publishes stats
