A lightweight dashboard that tracks merge request and pull request activity across one or more GitLab and GitHub repositories. Repositories can be organized by teams for filtered analysis. The dashboard provides team-level aggregate metrics to help managers understand team health, with individual contributor activity available for coaching conversations.
pip install -r requirements.txtexport GITLAB_TOKEN="glpat-..."export GITHUB_TOKEN="ghp_..."export JIRA_API_TOKEN="..."repos.yamlpython fetch_data.pycd frontend && python -m http.server 8080
fetch_data.py calls the GitLab and GitHub APIs to collect merge requests
and pull requests, including diffs, comments, and approvals. If JIRA_API_TOKEN
is set, it also extracts Jira ticket IDs from MR/PR titles and fetches their priority.
Output is written to frontend/data/data.json.
python fetch_data.py -n 50 # fetch the 50 most recent MRs per repo (default: 20)
| Variable | Required | Description |
|---|---|---|
GITLAB_TOKEN | If GitLab repos configured | GitLab PAT with read_api scope |
GITHUB_TOKEN | If GitHub repos configured | GitHub PAT with repo scope (or fine-grained with read access) |
JIRA_API_TOKEN | No | Jira PAT for bug priority lookup (issues.redhat.com) |
Repositories are organized by team in repos.yaml at the project root.
repositories:
backend-team:
- url: https://gitlab.com/org/api-service
- url: https://github.com/org/user-service
frontend-team:
- url: https://github.com/org/web-app
docs-team:
- url: https://gitlab.com/org/documentation
Both GitLab (https://gitlab.com/...) and GitHub
(https://github.com/...) URLs are supported and can be
mixed freely. The forge is detected automatically from the URL prefix.
The team-based format allows filtering contributors by team in the UI.
When repositories are organized by team, a team dropdown filter appears in the dashboard. Selecting a team filters both the repository list and contributor activity to show only data from that team's repositories.
The "Show All Teams" option can be enabled in Settings to add an "All Teams" option to the dropdown, allowing you to view cross-team activity.
The dashboard displays 8 team-level aggregate metrics with trend indicators comparing the current period to the previous period:
| Metric | Description |
|---|---|
| Merged MRs | Total count of merged merge requests in the period |
| Median Lead Time | Median number of days from MR creation to merge |
| Median Turnaround | Median hours from MR creation to first non-author comment |
| AI Co-Author Rate | Percentage of MRs that were co-authored with AI tools |
| AI Adoption | Percentage of contributors with AI usage at or above the configured threshold |
| Review Coverage | Percentage of merged MRs that received at least one approval |
| Active Contributors | Count of contributors with any activity (MRs, comments, or reviews) |
| Lines Changed | Total lines added plus deleted across all MRs |
Trend arrows indicate whether each metric improved or worsened compared to the previous period. For lead time and turnaround, a decrease (faster) is shown as positive.
The collapsible "Individual Contributors" section lists all active contributors alphabetically with activity mini-badges showing merged MRs, open/closed MRs, reviews, and comments. Click a contributor to open their detail view with:
MR descriptions are scanned for trailers that indicate collaboration with AI tools. When a match is found the MR is flagged as AI co-authored.
Recognized trailers:
Co-Authored-By:Generated-By: / Assisted-By: / AI-Agent:Generated with: / Created with: / Built with: / Powered by:The value after the trailer is checked against known AI tool names: Claude, ChatGPT, Copilot, Gemini, Cursor, Codeium, Tabnine, Windsurf, and others. Only trailers that reference an AI tool are counted — human co-authors are ignored.
Example MR description line:
Co-Authored-By: Claude <noreply@anthropic.com>
The timeline chart shows MR activity over time. The granularity buttons (Day / Week / Month / Year / Custom) control the chart grouping. Clicking a bar in the chart filters the aggregate metrics and contributor list to that specific period. Click the same bar again to clear the filter.
The Settings modal provides two options:
Click the PDF button in the header to generate a Team Activity Report with the timeline chart, aggregate metrics table, and alphabetical contributor list.
From a contributor's detail view, click PDF to generate an Individual Activity Report with their metrics, charts, repository breakdown, and recent merge requests.