devpulse

Developer productivity dashboard β€” unified commits, PRs, issues and coding metrics across GitHub, GitLab and Bitbucket (self-hosted)

GitHubTypeScriptJavaScriptCSSHTMLDockerfile
πŸ‘ 52 vuesSync GitHub: 10/9/2026
analyticsbitbucketdashboarddeveloper-toolsgithub-apigitlabreactself-hosted

DevPulse

Developer Productivity Dashboard β€” Track commits, PRs, issues, and coding metrics across GitHub, GitLab, and Bitbucket

CI License: MIT React TypeScript

Features

  • Multi-provider support β€” GitHub, GitLab, and Bitbucket
  • Unified dashboard β€” Commits, PRs, issues, and code changes in one view
  • Activity charts β€” Visualize your coding activity over time
  • Language breakdown β€” See your language distribution across repos
  • Top repositories β€” Track your most active and popular repos
  • Productivity metrics β€” PR merge rate, avg PR size, commit streak
  • Time range filters β€” 7 days, 30 days, 90 days, 1 year, all time
  • Token security β€” Tokens stored locally in browser, sent only to your self-hosted server
  • Dark theme β€” Easy on the eyes for those late-night coding sessions
  • Docker-ready β€” Full containerized deployment with docker-compose

Architecture

Browser (React + Vite)
  β”‚
  β”œβ”€β”€ Zustand store (persisted settings)
  β”‚
  β–Ό
DevPulse API Server (Express)
  β”‚
  β”œβ”€β”€ GitHub Provider β†’ GitHub REST API
  β”œβ”€β”€ GitLab Provider β†’ GitLab REST API
  β”‚
  β–Ό
Aggregator β†’ Merged DashboardData

Quick Start

Development

npm install
npm run dev          # Frontend on :5175
npm run dev:server   # API server on :3002

Docker

docker-compose up

Usage

  1. Add a provider β€” Go to Settings, select GitHub/GitLab, enter your username and access token
  2. Select time range β€” Use the sidebar to filter by 7d, 30d, 90d, 1y, or all time
  3. View your dashboard β€” See commits, PRs, issues, charts, and metrics
  4. Refresh β€” Click refresh to fetch latest data from your providers

Creating Access Tokens

  • GitHub: Settings β†’ Developer settings β†’ Personal access tokens (needs repo scope)
  • GitLab: Preferences β†’ Access Tokens (needs read_api scope)
  • Bitbucket: Personal settings β†’ App passwords (needs read permissions)

Project Structure

devpulse/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ Sidebar.tsx
β”‚   β”‚   β”œβ”€β”€ Dashboard.tsx
β”‚   β”‚   β”œβ”€β”€ StatCard.tsx
β”‚   β”‚   β”œβ”€β”€ ActivityChart.tsx
β”‚   β”‚   β”œβ”€β”€ LanguageBreakdown.tsx
β”‚   β”‚   β”œβ”€β”€ RecentActivity.tsx
β”‚   β”‚   β”œβ”€β”€ TopRepos.tsx
β”‚   β”‚   β”œβ”€β”€ Settings.tsx
β”‚   β”‚   └── EmptyState.tsx
β”‚   β”œβ”€β”€ types.ts
β”‚   β”œβ”€β”€ store.ts
β”‚   β”œβ”€β”€ api.ts
β”‚   β”œβ”€β”€ App.tsx
β”‚   β”œβ”€β”€ main.tsx
β”‚   └── index.css
β”œβ”€β”€ server/
β”‚   β”œβ”€β”€ providers/
β”‚   β”‚   β”œβ”€β”€ github.ts
β”‚   β”‚   └── gitlab.ts
β”‚   β”œβ”€β”€ aggregator.ts
β”‚   β”œβ”€β”€ utils.ts
β”‚   └── index.ts
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ utils.test.ts
β”‚   └── aggregator.test.ts
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ Dockerfile.api
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ nginx.conf
└── package.json

Development

npm install
npm run dev          # Start frontend dev server
npm run dev:server   # Start API server
npm test             # Run tests
npm run typecheck    # Type checking
npm run lint         # Lint
npm run build        # Build for production

Tech Stack

  • Frontend: React 18, Vite, TailwindCSS, Recharts, Zustand, Lucide icons
  • Backend: Express, TypeScript, node-fetch
  • Testing: Vitest
  • Deployment: Docker, Nginx

License

MIT