Skip to content

Commit e7659de

Browse files
committed
feat: Claude Code usage dashboard with 19 analytics panels
Local observability dashboard for Claude Code sessions. Track tokens, costs, models, tool usage, agent dispatches, skills, streaks, and coding velocity - all offline, all private. npx @versoxbt/claude-code-dashboard
0 parents  commit e7659de

169 files changed

Lines changed: 35408 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Code Owners
2+
# This file defines who will be automatically requested for review when PRs are opened.
3+
4+
# Default owner for everything
5+
* @dlupiak
6+
7+
# CI/CD workflows need extra review
8+
.github/ @dlupiak
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Bug Report
2+
description: Report a bug or unexpected behavior
3+
labels: ["bug"]
4+
body:
5+
- type: textarea
6+
id: description
7+
attributes:
8+
label: Description
9+
description: What happened?
10+
validations:
11+
required: true
12+
13+
- type: textarea
14+
id: steps
15+
attributes:
16+
label: Steps to Reproduce
17+
description: Please provide numbered steps to reproduce the issue
18+
placeholder: |
19+
1. Start the application with...
20+
2. Navigate to...
21+
3. Click on...
22+
4. See error
23+
validations:
24+
required: true
25+
26+
- type: textarea
27+
id: expected
28+
attributes:
29+
label: Expected Behavior
30+
description: What should have happened?
31+
validations:
32+
required: true
33+
34+
- type: dropdown
35+
id: environment
36+
attributes:
37+
label: Environment
38+
description: How are you running the application?
39+
options:
40+
- npx (latest)
41+
- npm global install
42+
- Docker
43+
- From source
44+
validations:
45+
required: true
46+
47+
- type: input
48+
id: node-version
49+
attributes:
50+
label: Node.js Version
51+
description: What version of Node.js are you using?
52+
placeholder: "22.x"
53+
validations:
54+
required: true
55+
56+
- type: dropdown
57+
id: os
58+
attributes:
59+
label: Operating System
60+
description: What OS are you running on?
61+
options:
62+
- macOS
63+
- Linux
64+
- Windows
65+
- Other
66+
validations:
67+
required: true
68+
69+
- type: textarea
70+
id: additional-context
71+
attributes:
72+
label: Additional Context
73+
description: Add any other context about the problem here, such as logs, screenshots, or error messages
74+
validations:
75+
required: false

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Questions & Discussions
4+
url: https://github.com/dlupiak/claude-session-dashboard/discussions
5+
about: Ask questions and discuss features in GitHub Discussions
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
name: Feature Request
2+
description: Suggest a new feature or improvement
3+
labels: ["enhancement"]
4+
body:
5+
- type: textarea
6+
id: description
7+
attributes:
8+
label: Description
9+
description: What feature would you like?
10+
placeholder: A clear and concise description of the feature you'd like to see
11+
validations:
12+
required: true
13+
14+
- type: textarea
15+
id: use-case
16+
attributes:
17+
label: Use Case
18+
description: Why do you need this?
19+
placeholder: Describe the problem this feature would solve or the workflow it would improve
20+
validations:
21+
required: true
22+
23+
- type: textarea
24+
id: proposed-solution
25+
attributes:
26+
label: Proposed Solution
27+
description: How would you implement it?
28+
placeholder: If you have ideas about how this feature could be implemented, please share them here
29+
validations:
30+
required: false
31+
32+
- type: textarea
33+
id: alternatives
34+
attributes:
35+
label: Alternatives Considered
36+
description: Other approaches you've thought about
37+
placeholder: Describe any alternative solutions or features you've considered
38+
validations:
39+
required: false

.github/dependabot.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
version: 2
2+
updates:
3+
# Enable version updates for npm (apps/web)
4+
- package-ecosystem: "npm"
5+
directory: "/apps/web"
6+
schedule:
7+
interval: "weekly"
8+
day: "monday"
9+
open-pull-requests-limit: 10
10+
ignore:
11+
- dependency-name: "eslint"
12+
update-types: ["version-update:semver-major"]
13+
groups:
14+
# Group minor and patch updates together
15+
production-dependencies:
16+
dependency-type: "production"
17+
update-types:
18+
- "minor"
19+
- "patch"
20+
development-dependencies:
21+
dependency-type: "development"
22+
update-types:
23+
- "minor"
24+
- "patch"
25+
26+
# Check for GitHub Actions updates
27+
- package-ecosystem: "github-actions"
28+
directory: "/"
29+
schedule:
30+
interval: "weekly"
31+
day: "monday"
32+
open-pull-requests-limit: 5

.github/pull_request_template.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## Description
2+
3+
<!-- Brief description of changes -->
4+
5+
## Type of Change
6+
7+
- [ ] Bug fix
8+
- [ ] New feature
9+
- [ ] Breaking change
10+
- [ ] Documentation update
11+
- [ ] Refactoring
12+
13+
## Related Issues
14+
15+
<!-- Link to related issues: Fixes #123 -->
16+
17+
## Checklist
18+
19+
- [ ] Code follows project style guidelines
20+
- [ ] Self-review completed
21+
- [ ] Tests added/updated
22+
- [ ] Documentation updated (if needed)
23+
- [ ] No new warnings or errors
24+
25+
## Testing
26+
27+
<!-- How was this tested? -->
28+
29+
## Screenshots (if applicable)
30+
31+
<!-- Add screenshots for UI changes -->

.github/workflows/ci.yml

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
permissions: {}
10+
11+
jobs:
12+
typecheck:
13+
name: Type Check
14+
runs-on: ubuntu-latest
15+
defaults:
16+
run:
17+
working-directory: ./apps/web
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
21+
22+
- name: Setup Node.js
23+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
24+
with:
25+
node-version: '22'
26+
cache: 'npm'
27+
cache-dependency-path: ./apps/web/package-lock.json
28+
29+
- name: Install dependencies
30+
run: npm ci
31+
32+
- name: Run type check
33+
run: npm run typecheck
34+
35+
test:
36+
name: Unit Tests
37+
runs-on: ubuntu-latest
38+
defaults:
39+
run:
40+
working-directory: ./apps/web
41+
steps:
42+
- name: Checkout code
43+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
44+
45+
- name: Setup Node.js
46+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
47+
with:
48+
node-version: '22'
49+
cache: 'npm'
50+
cache-dependency-path: ./apps/web/package-lock.json
51+
52+
- name: Install dependencies
53+
run: npm ci
54+
55+
- name: Run tests
56+
run: npx vitest run --coverage
57+
58+
- name: Upload coverage to Codecov
59+
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
60+
with:
61+
files: ./apps/web/coverage/lcov.info
62+
fail_ci_if_error: false
63+
env:
64+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
65+
66+
build:
67+
name: Production Build
68+
runs-on: ubuntu-latest
69+
defaults:
70+
run:
71+
working-directory: ./apps/web
72+
steps:
73+
- name: Checkout code
74+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
75+
76+
- name: Setup Node.js
77+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
78+
with:
79+
node-version: '22'
80+
cache: 'npm'
81+
cache-dependency-path: ./apps/web/package-lock.json
82+
83+
- name: Install dependencies
84+
run: npm ci
85+
86+
- name: Build project
87+
run: npm run build
88+
89+
lint:
90+
name: Lint
91+
runs-on: ubuntu-latest
92+
defaults:
93+
run:
94+
working-directory: ./apps/web
95+
steps:
96+
- name: Checkout code
97+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
98+
99+
- name: Setup Node.js
100+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
101+
with:
102+
node-version: '22'
103+
cache: 'npm'
104+
cache-dependency-path: ./apps/web/package-lock.json
105+
106+
- name: Install dependencies
107+
run: npm ci
108+
109+
- name: Run lint
110+
run: npm run lint
111+
112+
e2e:
113+
name: E2E Tests
114+
needs: [typecheck, test, lint]
115+
runs-on: ubuntu-latest
116+
defaults:
117+
run:
118+
working-directory: ./apps/web
119+
steps:
120+
- name: Checkout code
121+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
122+
123+
- name: Setup Node.js
124+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
125+
with:
126+
node-version: '22'
127+
cache: 'npm'
128+
cache-dependency-path: ./apps/web/package-lock.json
129+
130+
- name: Install dependencies
131+
run: npm ci
132+
133+
- name: Install Playwright browsers
134+
run: npx playwright install --with-deps chromium
135+
136+
- name: Run E2E tests
137+
run: npm run e2e
138+
139+
- name: Upload Playwright report
140+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
141+
if: ${{ !cancelled() }}
142+
with:
143+
name: playwright-report
144+
path: apps/web/playwright-report/
145+
retention-days: 14
146+
147+
- name: Upload E2E screenshots
148+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
149+
if: ${{ !cancelled() }}
150+
with:
151+
name: e2e-screenshots
152+
path: apps/web/e2e/screenshots/
153+
retention-days: 14

.github/workflows/codeql.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: "CodeQL Analysis"
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
schedule:
9+
# Run weekly on Sunday at midnight UTC
10+
- cron: '0 0 * * 0'
11+
12+
permissions: {}
13+
14+
jobs:
15+
analyze:
16+
name: Analyze
17+
runs-on: ubuntu-latest
18+
if: github.actor != 'dependabot[bot]'
19+
permissions:
20+
actions: read
21+
contents: read
22+
security-events: write
23+
24+
strategy:
25+
fail-fast: false
26+
matrix:
27+
language: [ 'javascript-typescript' ]
28+
29+
steps:
30+
- name: Checkout repository
31+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
32+
33+
- name: Initialize CodeQL
34+
uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4
35+
with:
36+
languages: ${{ matrix.language }}
37+
# Optionally specify CodeQL query suites
38+
# queries: security-and-quality
39+
40+
- name: Autobuild
41+
uses: github/codeql-action/autobuild@0d579ffd059c29b07949a3cce3983f0780820c98 # v4
42+
43+
- name: Perform CodeQL Analysis
44+
uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4
45+
with:
46+
category: "/language:${{matrix.language}}"

0 commit comments

Comments
 (0)