{"id":51410530,"url":"https://github.com/momenbasel/gitpulse","last_synced_at":"2026-07-04T14:32:28.811Z","repository":{"id":363229671,"uuid":"1262427058","full_name":"momenbasel/gitpulse","owner":"momenbasel","description":"Animated GitHub PR triage dashboard - replaces messy notifications with a prioritized action center. Pull your own data locally via gh CLI.","archived":false,"fork":false,"pushed_at":"2026-06-08T02:10:44.000Z","size":1879,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T03:18:55.079Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/momenbasel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-08T01:22:35.000Z","updated_at":"2026-06-08T02:10:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/momenbasel/gitpulse","commit_stats":null,"previous_names":["momenbasel/gitpulse"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/momenbasel/gitpulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momenbasel%2Fgitpulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momenbasel%2Fgitpulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momenbasel%2Fgitpulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momenbasel%2Fgitpulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/momenbasel","download_url":"https://codeload.github.com/momenbasel/gitpulse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/momenbasel%2Fgitpulse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35125718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-04T14:32:27.606Z","updated_at":"2026-07-04T14:32:28.803Z","avatar_url":"https://github.com/momenbasel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitPulse\n\n**An animated GitHub pull-request triage dashboard. Replaces messy GitHub notifications with a prioritized action center.**\n\n![GitPulse dashboard](docs/cover.png)\n\nEvery stat card is clickable - drill into the exact pull requests behind it (mergeable, merged, open, closed) or a per-repository breakdown, with live search:\n\n![Drill-down modal](docs/modal.png)\n\nGitHub notifications are noise. GitPulse pulls *your* PR activity with the `gh` CLI and turns it into one calm, motion-rich view: what needs **you**, what's **waiting on others**, what's **ready to merge**, and what's gone **stale** - plus the analytics (merge rate, contribution heatmap, top repos, languages, activity timeline).\n\nNo account data ships in this repo. You run one script locally with your own GitHub auth; the generated data file is gitignored and never leaves your machine. A synthetic demo dataset is committed so a fresh clone renders instantly.\n\n---\n\n## Quick start\n\n```bash\n# 1. install\npnpm install            # or: npm install\n\n# 2. load YOUR github activity (uses your gh CLI login)\n./scripts/fetch.sh              # current gh account\n# ./scripts/fetch.sh octocat    # or any public username\n\n# 3. run\npnpm dev                # http://localhost:3000\n```\n\nWithout step 2 the app shows the committed **demo** dataset with a banner.\n\n### Requirements\n- [GitHub CLI](https://cli.github.com) authenticated: `gh auth login`\n- Node 18+\n- pnpm (or npm)\n\n---\n\n## How triage works\n\nEach open PR is sorted into one actionable bucket - this is the \"notification replacement\":\n\n| Bucket | Meaning | Driven by |\n| --- | --- | --- |\n| **Ready to merge** | Approved, ship it | `reviewDecision == APPROVED` |\n| **Needs you** | Changes requested, drafts, or stale | `CHANGES_REQUESTED` / draft / idle ≥ 21d |\n| **Waiting on others** | Out for review | `REVIEW_REQUIRED` / no review yet |\n| **Stale** | Idle ≥ 21 days | any active PR |\n\nThe action feed is ranked by priority, then by how long the PR has sat idle.\n\n---\n\n## Privacy\n\n- `./scripts/fetch.sh` writes **`public/dashboard.json`**, which is **gitignored**.\n- Raw API pulls land in **`data/`**, also gitignored.\n- Only **`public/demo.json`** (synthetic) is committed.\n- Everything runs locally against your own `gh` token. Nothing is uploaded.\n\n---\n\n## Refresh\n\n```bash\npnpm refresh            # re-runs ./scripts/fetch.sh\n```\n\n## Deploy\n\nDeploys to any static-friendly host (Vercel, Netlify). The build serves the\ncommitted demo data; for a private deploy with real data, generate\n`public/dashboard.json` before building (it will not be committed).\n\n```bash\npnpm build \u0026\u0026 pnpm start\n```\n\n---\n\n## Stack\n\nNext.js 15 (App Router) · React 19 · TypeScript · Tailwind CSS v4 · Motion (Framer Motion) · hand-rolled SVG charts · GitHub Primer-flavored design tokens.\n\nBuilt with zero runtime dependencies beyond Next + Motion - charts and the\ncontribution heatmap are custom SVG so every transition is seek-deterministic.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmomenbasel%2Fgitpulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmomenbasel%2Fgitpulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmomenbasel%2Fgitpulse/lists"}