GitHub activity β Impact Score Β· live streaks Β· shareable proof
π Live Demo Β Β·Β π Docs Β Β·Β π Issues
Your GitHub profile shows a green square for the day you renamed a variable and the same green square for the day you fixed a CVE. No weighting. No context. No way to show that 50 merged PRs across Kyverno, Hyperledger, and CNCF projects represent months of serious systems work β not just commit spam.
GitPulse fixes that. It pulls your real GitHub activity, runs it through a weighted Impact Score algorithm, and produces a dashboard and shareable profile that actually reflects what you've built.
| Feature | What it does |
|---|---|
| Impact Score | Weighted formula: (PRs Γ 10) + (Reviews Γ 5) + (Issues Γ 3) + (Comments Γ 1) + (Streak Γ 2). A number that means something. |
| Live Streak Tracking | Counts every day you merged a PR or submitted a review. Calendar heatmap over 52 weeks. |
| Cross-Repo Dashboard | Aggregates contributions across all your public repos β not just one project. |
| Public Profile Page | gitpulse.dev/u/{username} β shareable, no login required to view. |
| Repository Breakdown | Per-repo stats: PR count, review count, lines contributed, first and most recent contribution. |
| Review Latency Tracker | Average time from PR open to your first review. A metric that shows you're a reliable reviewer, not just an author. |
| GitHub OAuth | One-click login. Read-only scope. We never touch your code. |
| Zero-cost infra | Built entirely on the free GitHub GraphQL API. No paid third-party services required. |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GitPulse β
β β
β βββββββββββββββββ ββββββββββββββββββββββββββββ β
β β React + Vite β βββββββΊ β Go (Fiber) REST API β β
β β TypeScript β βββββββ β β β
β β (frontend/) β JSON β GitHub OAuth handler β β
β βββββββββββββββββ β Impact Score engine β β
β β PR sync pipeline β β
β β Streak calculator β β
β ββββββββββββ¬ββββββββββββββββ β
β β β
β ββββββββββββΌββββββββββββββββ β
β β PostgreSQL 15 β β
β β pull_requests Β· users β β
β β reviews Β· sync_jobs β β
β ββββββββββββββββββββββββββββ β
β β β
β ββββββββββββΌββββββββββββββββ β
β β GitHub GraphQL API v4 β β
β β 5,000 req/hr Β· free β β
β ββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Stack breakdown:
backend/ β Go 1.22 + Fiber Β· PostgreSQL Β· GitHub GraphQL API
frontend/ β React 18 + TypeScript + Vite Β· Recharts
infra/ β Docker + docker-compose Β· Deployed on Render
- Go 1.22+
- Node.js 20+
- PostgreSQL 15+
- A GitHub OAuth App (create one here)
git clone https://github.com/atharrva01/Gitpulse.git
cd Gitpulse# backend/.env
cp backend/.env.example backend/.env# GitHub OAuth
GITHUB_CLIENT_ID=your_client_id
GITHUB_CLIENT_SECRET=your_client_secret
GITHUB_REDIRECT_URI=http://localhost:8080/auth/callback
# Database
DATABASE_URL=postgres://user:password@localhost:5432/gitpulse
# App
JWT_SECRET=your_jwt_secret
PORT=8080
FRONTEND_URL=http://localhost:5173docker-compose up --buildFrontend: http://localhost:5173
Backend: http://localhost:8080
# Terminal 1 β backend
cd backend
go mod download
go run main.go
# Terminal 2 β frontend
cd frontend
npm install
npm run devGitpulse/
βββ backend/
β βββ main.go # Entry point, route registration
β βββ handlers/ # HTTP handlers (auth, dashboard, profile)
β βββ models/ # PostgreSQL models (User, PR, Review)
β βββ services/ # GitHub API sync, Impact Score engine
β βββ middleware/ # JWT auth, CORS
β βββ db/ # Migrations, connection pool
β
βββ frontend/
β βββ src/
β β βββ pages/ # Dashboard, Profile, Landing
β β βββ components/ # ImpactScore, StreakCalendar, RepoCard
β β βββ hooks/ # useGitHubData, useStreak, useAuth
β β βββ api/ # Typed fetch wrappers
β βββ vite.config.ts
β
βββ Dockerfile
βββ docker-compose.yml
βββ .dockerignore
The score is fully transparent and versioned. No black box.
Impact Score = (PRs Merged Γ 10)
+ (Reviews Given Γ 5)
+ (Issues Closed Γ 3)
+ (PR Comments Γ 1)
+ (Current Streak Γ 2)
Max: 1000 Β· Updated: every 24 hours Β· Source: GitHub GraphQL API
Why weighted this way? Merging a PR takes more sustained effort than leaving a comment. Reviews are undervalued by every other tool, GitPulse gives them real weight. Streak multiplier rewards consistency over burst activity.
The formula lives in backend/services/impact_score.go and is open to community tuning.
All endpoints return JSON. Protected routes require Authorization: Bearer <jwt>.
GET /auth/github β Redirect to GitHub OAuth
GET /auth/callback β OAuth callback, issues JWT
GET /api/me β Full dashboard (protected)
GET /api/me/streak β Streak + heatmap data (protected)
GET /api/me/repos β Per-repo breakdown (protected)
GET /api/me/wrapped/:year β OSS Wrapped data (protected)
POST /api/sync β Trigger manual sync (protected)
GET /api/u/:username β Public profile (no auth)
GET /api/u/:username/badge.svg β Dynamic README badge (no auth)
GET /api/maintainer/repo/:owner/:name β Project health (protected)
POST /api/maintainer/repos β Watch a repository (protected)
GitPulse is deployed on Render (free tier).
Backend: Render Web Service , Go binary, auto-deploy on push to main
Database: Render PostgreSQL , 1GB free
Frontend: Vercel , static React build, CDN edge deployment
To deploy your own instance:
# Build the Docker image
docker build -t gitpulse .
# Or deploy to Render directly
# 1. Connect your fork to Render
# 2. Set environment variables in Render dashboard
# 3. Push to main β Render auto-deploysContributions are welcome. GitPulse is built for the open source community, it should be shaped by it.
# Fork and clone
git clone https://github.com/YOUR_USERNAME/Gitpulse.git
# Create a feature branch
git checkout -b feat/your-feature
# Make your changes, then open a PR
# PR description should include: what changed, why, and how to test itCheck open issues for good first contributions. If you're adding a new metric or changing the Impact Score formula, open a discussion first.
- GitPulse only requests read-only GitHub OAuth scopes (
read:user,public_repo) - We only fetch data that is already public on GitHub
- Access tokens are encrypted at rest
- No private repository data is ever accessed
- You can delete your account and all associated data at any time
MIT - use it, fork it, build on it.
Built with obsession by atharrva01
50+ merged PRs across CNCF, Hyperledger, and Linux Foundation projects Β· and counting
If GitPulse helped you prove your open source impact, star the repo.
β