{"id":47732972,"url":"https://github.com/mrdkoz/gh-insight","last_synced_at":"2026-04-05T09:01:37.504Z","repository":{"id":348576811,"uuid":"1187567307","full_name":"MrDKOz/gh-insight","owner":"MrDKOz","description":"A browser-based dashboard for analysing GitHub milestone progress. Point it at any public or private repository, select one or more milestones, and explore the data across seven interactive views — then export what you need in the format you need it.","archived":false,"fork":false,"pushed_at":"2026-04-02T21:56:08.000Z","size":9463,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T06:49:39.579Z","etag":null,"topics":["data-visualisation","github"],"latest_commit_sha":null,"homepage":"https://dkoz.me/gh-insight/","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/MrDKOz.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-03-20T21:57:11.000Z","updated_at":"2026-04-02T21:55:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/MrDKOz/gh-insight","commit_stats":null,"previous_names":["mrdkoz/gh-insight"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/MrDKOz/gh-insight","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrDKOz%2Fgh-insight","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrDKOz%2Fgh-insight/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrDKOz%2Fgh-insight/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrDKOz%2Fgh-insight/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MrDKOz","download_url":"https://codeload.github.com/MrDKOz/gh-insight/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MrDKOz%2Fgh-insight/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31430011,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T08:13:15.228Z","status":"ssl_error","status_checked_at":"2026-04-05T08:13:11.839Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["data-visualisation","github"],"created_at":"2026-04-02T21:59:09.525Z","updated_at":"2026-04-05T09:01:37.497Z","avatar_url":"https://github.com/MrDKOz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GH Insight\n\n**Live:** [dkoz.me/gh-insight](https://dkoz.me/gh-insight/)\n\n\u003e **A note on this project:** This is an experiment in AI-driven development, built during my 10% / L\u0026D time at Redgate. The goal was to learn how Claude works by attempting to build a genuinely usable application without writing a single line of code manually — using Claude Code to handle everything from architecture decisions to implementation. The application you see here is the result of that process. I think it's only fair to be upfront about that, both to set expectations and to give an honest account of what AI-assisted development looks like in practice.\n\nA browser-based dashboard for analysing GitHub milestone progress. Point it at any public or private repository, select one or more milestones, and explore the data across seven interactive views — then export what you need in the format you need it.\n\n## What can it do?\n\n### Seven views\n\n- **Gantt** — interactive horizontal bar timeline for every issue and PR, with scroll-wheel zoom and resizable labels\n- **Burndown** — daily open issue count plotted over the milestone's lifetime\n- **Cycle Time** — scatter plot of days from creation to close per item, with median and mean reference lines\n- **Velocity** — weekly stacked bar chart of closed issues and merged/closed PRs\n- **Cumulative Flow** — running totals of created vs completed items over time\n- **Contributors** — per-author breakdown of issues and pull requests\n- **List** — sortable table of all items with status, dates, labels, assignees, and duration\n\n### Export everything\n\nEvery view can be exported. Data exports: **CSV**, **Excel (XLSX)**, **Markdown**, and **PDF**. Visual exports: **PNG** of the current view, or a full-resolution PNG of the entire Gantt timeline.\n\n### More features\n\n- **Multi-milestone** — load several milestones at once and view them together, colour-coded by milestone\n- **Filters** — show/hide by type and status; date range filters on creation and close date\n- **Shareable URLs** — current milestone selection, active view, and all filters are encoded in the URL; the token is never included\n- **Colorblind mode** — alternative Okabe-Ito colour palette across all charts and views\n- **Demo mode** — try the app without a token using built-in sample data\n- **Desktop app** — available for Windows, macOS, and Linux via Electron\n\n## Using the live app\n\nVisit **[dkoz.me/gh-insight](https://dkoz.me/gh-insight/)** — no installation needed.\n\nYou will need a GitHub Personal Access Token to load real data. A fine-grained token with the following read-only permissions is recommended:\n\n| Permission | Level |\n|---|---|\n| Metadata | Read |\n| Contents | Read |\n| Issues | Read |\n| Pull requests | Read |\n\n[Create a fine-grained PAT on GitHub](https://github.com/settings/personal-access-tokens/new)\n\n### Privacy and security\n\n- Your token is encrypted with AES-GCM (256-bit, Web Crypto API). The ciphertext is stored in `localStorage`; the encryption key lives in IndexedDB and never leaves your browser.\n- All API calls go directly from your browser to `api.github.com` over HTTPS. No data passes through any third-party server.\n- The token is never written to the URL. Clearing your browser storage removes everything.\n\n## Common questions\n\n**How do I create a Gantt chart from GitHub milestones?**\nEnter your GitHub token, select a repository, choose one or more milestones, and switch to the Gantt view. Each issue and PR appears as a horizontal bar spanning its creation to close date. Zoom with the scroll wheel, resize the label column, and export to PNG or PDF when you're done.\n\n**How do I export GitHub milestone data to Excel or CSV?**\nOpen the List view or any chart view, click the export button in the toolbar, and choose your format — CSV, Excel (XLSX), Markdown, or PDF. The Gantt view additionally supports full-timeline PNG export.\n\n**Can I track sprint velocity from GitHub issues?**\nYes. The Velocity view shows a weekly stacked bar chart of closed issues and merged/closed pull requests, giving you a clear picture of throughput over time.\n\n**Can I see cycle time for GitHub issues?**\nYes. The Cycle Time view plots each closed item as a dot at its days-from-creation-to-close, with median and mean reference lines overlaid.\n\n**Does it support multiple milestones at once?**\nYes. Select any number of milestones from the same repository and all seven views update to show the combined data, with each milestone colour-coded so you can compare sprints or releases side by side.\n\n**Does it work with private repositories?**\nYes. Use a fine-grained GitHub PAT with read-only permissions on Issues, Pull Requests, Contents, and Metadata. The token is encrypted in your browser and never sent anywhere except directly to `api.github.com`.\n\n## Local development\n\n```bash\nnpm install\nnpm run dev            # start browser dev server (http://localhost:5173)\nnpm test               # run unit tests (Vitest)\nnpm run lint           # lint (zero warnings)\nnpm run build          # type-check + production web build\nnpm run preview        # preview the production build locally\n```\n\n### Electron (desktop app)\n\n```bash\nnpm run electron:dev   # start Electron app in dev mode (hot-reload)\nnpm run build:electron # type-check, build renderer, and package the app\n```\n\n## CI / CD\n\n### Continuous integration\n\nEvery push and pull request runs **lint**, **type-check**, and **tests** via the CI workflow. All three must pass before a PR can be merged.\n\n### Web deployment (GitHub Pages)\n\nEvery push to `main` automatically builds and deploys the web app to GitHub Pages. No version bump is involved — the live site always reflects the latest state of `main`.\n\n### Releasing (Electron builds)\n\nTo cut a release, include the version bump in your PR:\n\n1. Run `npm version patch`, `npm version minor`, or `npm version major` locally — this updates `package.json` and `package-lock.json`\n2. Commit the version bump as part of your PR\n3. Add the matching label to the PR before merging:\n\n| Label | Version change |\n|---|---|\n| `release:patch` | e.g. 2.0.21 → 2.0.22 |\n| `release:minor` | e.g. 2.0.21 → 2.1.0 |\n| `release:major` | e.g. 2.0.21 → 3.0.0 |\n\nWhen the labelled PR is merged into `main`, the release workflow:\n\n1. Runs tests as a final gate\n2. Reads the version from `package.json` and pushes a `vX.Y.Z` tag\n3. Builds the Electron app in parallel for macOS, Windows, and Linux\n4. Publishes a GitHub release with the built artefacts attached\n\nPRs without a release label merge normally with no Electron build.\n\n### Project structure\n\n```\nsrc/\n  api/          GitHub REST + GraphQL fetch logic\n  charts/       SVG chart components (Burndown, CycleTime, Velocity, CumulativeFlow, Contributors)\n  components/   UI components (Timeline, GanttView, FilterBar, StatsBar, ItemList, …)\n  data/         Demo data\n  hooks/        Shared React hooks (useSettings)\n  state/        Milestone reducer\n  utils/        Shared utilities, token encryption, export functions\n  types.ts      Shared TypeScript types\n```\n\n### Tech stack\n\n- React 19 + TypeScript + Vite\n- MUI v7 with the Redgate Honeycomb theme\n- Vitest + Testing Library for unit tests\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrdkoz%2Fgh-insight","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrdkoz%2Fgh-insight","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrdkoz%2Fgh-insight/lists"}