This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Developer activity transparency dashboard that scans local git repositories and displays commit/PR activity. Can be hosted locally, on GitHub Pages, or Cloudflare Pages.
# Generate report (scans ~/Projects and ~/Local Sites by default)
npm run generate
# Use cached data for faster re-renders
npm run generate:cached
# Serve locally
npm start
# Run smoke test (generates into temp dir, cleans up)
npm testnode generate-rich-report.mjs \
--paths ~/Projects,~/code \ # Comma-separated scan roots
--hours 48 \ # Time window (default: 168 = 7 days)
--max-depth 4 \ # Repo scan depth
--author you@example.com,work@example.com \ # Filter commits by email (comma-separated)
--gh-author someuser \ # GitHub PR author filter
--exclude "vendor,archive" \ # Exclude repos matching patterns
--no-prs # Skip PR fetching (no gh CLI needed)Settings can also be persisted in config.json (see config.json.example).
Environment variables: ACTIVITY_REPORT_AUTHOR_EMAIL, ACTIVITY_REPORT_GH_AUTHOR, GH_TOKEN
Data Flow:
generate-rich-report.mjsrecursively scans repo roots for.gitdirectories- Extracts commits using
git logwith author filtering - Optionally fetches PRs via
ghCLI (requires authentication) - Loads categories from
categories.json/CATEGORIES_CONFIGenv /config.json - Outputs
activity-data.jsonwith embedded categories (self-contained) index.htmlreads categories from the data file (falls back to separatecategories.json)
Key Files:
generate-rich-report.mjs- Node.js generator script (ES modules), readsconfig.jsonfor defaultsindex.html- Static dashboard with vanilla JS, loads data at runtimeactivity-data.json- Generated cache file (gitignored, created by generator)categories.json- Optional repo grouping config (gitignored, user-created from example).github/workflows/daily-update.yml- Self-hosted runner workflow (Cloudflare deploy).github/workflows/github-pages.yml- GitHub Pages workflow (GitHub-hosted runner)
Repo Exclusions:
Configured via --exclude flag or config.json exclude array. No hardcoded exclusions.
Category Configuration:
Categories are resolved at generation time and embedded in activity-data.json. Priority order:
categories.jsonfile (standalone, gitignored)CATEGORIES_CONFIGenvironment variable (JSON string, used in CI)categorieskey inconfig.json(inline)
The frontend reads embedded categories from the data. Falls back to fetching categories.json separately for backward compat. See categories.json.example for the format.
Three options:
- Local:
npm run generate && npm start - GitHub Pages: Enable the
github-pages.ymlworkflow - Cloudflare Pages: Self-hosted runner +
daily-update.ymlworkflow with repo variables