A live dashboard that shows each protocol team member's pending PR review queue, with color-coded wait times. Designed to be displayed during team stand-ups.
Live site: https://celestiaorg.github.io/pr-review-dashboard/
- Card grid showing each team member's pending reviews
- Wait times color-coded: green (≤12h), yellow (12-24h), red (>24h)
- Toggle buttons to show/hide members (e.g., when they're on another project), listed alphabetically
- Each queue is ordered by PR author — coworkers (org members and repo collaborators) first, then bots like dependabot, then external contributors — and by longest wait within each group
- Cards with more than 4 pending reviews collapse to the first 3 with a "+N more" expander
- Auto-refreshes every 5 minutes
- Only shows open, non-draft PRs in protocol repos
- Reviews completed section at the top of the page with per-teammate bar charts for this week, this month, and YTD
- Node.js 18 or later (for built-in
fetchsupport) - A GitHub personal access token with
reposcope, or theghCLI authenticated
-
Clone the repo and install dependencies:
git clone git@github.com:celestiaorg/pr-review-dashboard.git cd pr-review-dashboard npm install -
Create a
.envfile with your GitHub token:echo "GITHUB_TOKEN=$(gh auth token)" > .env
Or set it manually:
echo "GITHUB_TOKEN=ghp_your_token_here" > .env
-
Fetch data and start the local server:
npm start
This runs
npm run fetch(writespublic/data.json) thennpm run dev(servespublic/at http://localhost:3000). -
Open http://localhost:3000 in your browser.
Team members, repos, and color thresholds are defined in config.js. Edit that file to add/remove members or repos, or adjust the color thresholds.
To change the default-hidden members, set defaultHidden: true on their entry. Users can override visibility via toggle buttons in the UI (state is persisted in localStorage).
The dashboard is deployed to GitHub Pages via .github/workflows/deploy.yml:
- Runs every 5 minutes on a cron (plus on every push to
mainand on manual dispatch). - Fetches PR data using
REVIEW_DASHBOARD_TOKENif that secret is set, otherwise the defaultGITHUB_TOKENprovided to the Actions runner. - Pushes
public/(including the freshly-generateddata.json) to thegh-pagesbranch.
To trigger a manual redeploy: gh workflow run deploy.yml.
The default GITHUB_TOKEN is scoped to this repository only, so it cannot read
private repos elsewhere in the org — infrastructure and da-proxy are both
private, and their PRs silently drop out of the dashboard when the fetch runs on
the default token.
To include them, set a REVIEW_DASHBOARD_TOKEN repository secret to a token
that can read those repos (a classic PAT with repo scope, or a fine-grained
PAT granting Pull requests: read and Metadata: read on every repo in
config.js):
gh secret set REVIEW_DASHBOARD_TOKEN -R celestiaorg/pr-review-dashboardAny repo the token cannot read is reported as a warning annotation on the Actions run rather than failing the deploy, so the rest of the dashboard keeps updating. Fine-grained PATs expire — if private repos vanish from the dashboard, check the deploy run's annotations first.
A second workflow (.github/workflows/fetch-review-counts.yml) runs daily at 00:00 UTC to regenerate public/review-counts.json (committed to the repo). The regeneration commit triggers the deploy workflow's push trigger so the updated file goes live without further coordination.
Every pull request automatically gets a live preview. The pr-preview.yml workflow builds the site from the PR branch and deploys it to a subdirectory on the gh-pages branch. A bot comment on the PR links to the preview (e.g. https://celestiaorg.github.io/pr-review-dashboard/pr-preview/pr-42/). The preview is cleaned up when the PR is closed or merged.
npm test