Next.js dashboard built on top of a GitHub Projects (v2) board — turns your issues and PRs into a Product Backlog, sprint views with real burndown charts, and a filterable Pull Requests list. Because I hate Google Sheets.
Everything lives at / as a tabbed single page (components/AppShell.jsx):
- Product Backlog — every recognized user story grouped by EPIC (EPIC ID/Name, User Story ID, User Story, Acceptance Criteria, Estimate).
- Sprint 1 / Sprint 2 / Sprint 3 — each sprint bundles three GitHub
"Iteration" values (
Sprint 1= Iterations 1-3,Sprint 2= 4-6,Sprint 3= 7-9 — seeSPRINT_GROUPSin lib/backlog.js). The backlog table here swaps Acceptance Criteria/Estimate for a per-task breakdown: Task, Status (Completed/Not completed), Assignee, Estimate — one row per GitHub sub-issue. - Each of the above also has a Burndown Chart tab — computed from every
sub-issue's real
createdAt/closedAttimestamps (no mock data). Click any day on the chart to see exactly which tasks were done/not done as of that date, with a "NEW" badge on tasks created that exact day. - Pull Requests — every PR (#60 and up) in the repo with clickable
assignee/reviewer avatars, related issue links, and a status badge
(Open/Merged/Closed, GitHub's actual merge purple). Filterable by
assignee, reviewer, sprint, and status. PR sprint is derived from when it
was opened (
PR_SPRINT_DATE_RANGESin lib/backlog.js), since PRs rarely carry the project's Iteration field themselves.
Epic names aren't a GitHub concept, so each one is editable inline and
saved to the browser's localStorage (defaults come from
DEFAULT_EPIC_NAMES in lib/backlog.js).
npm install
cp .env.example .envEdit .env:
GITHUB_TOKEN— a GitHub Personal Access Token.read:projectscope covers the backlog views; the Pull Requests view also reads repo data, so a token/gh authwithrepo(or fine-grained PR read) access works best.GITHUB_LOGIN— the org or user that owns the projectGITHUB_LOGIN_TYPE—organizationoruserGITHUB_PROJECT_NUMBER— the project's number (from its URL, e.g..../projects/3→3)
npm run dev # development
npm run build && npm start # productionOpen http://localhost:4100.
- A story is recognized from an issue title containing
US<epic>-<n>(e.g.[US1-1]) — the number before the dash is the EPIC id. Issues without that pattern are skipped from the backlog views. - Each story's body is expected to use
## User Story(As a ... I want ... so that ...) and## Acceptance Criteria(bullet list, oneGiven ... when ... then ...line per criterion) markdown headings. Parsing lives in lib/backlog.js. - Per-task Estimate is picked up automatically if the GitHub Project has a
custom field named
Estimateon the sub-issue itself; otherwise it shows—. - Export the current table as plain CSV, copy it to the clipboard, or
export a styled
.xlsx(merged cells, bold Given/When/Then, colored status) via lib/xlsx.js.