{"id":13475511,"url":"https://github.com/philschatz/gh-board","last_synced_at":"2025-10-05T20:58:18.024Z","repository":{"id":33392893,"uuid":"37037925","full_name":"philschatz/gh-board","owner":"philschatz","description":":octocat: \"Serverless\" Kanban for GitHub Issues using gh-pages","archived":false,"fork":false,"pushed_at":"2020-09-02T15:48:59.000Z","size":6306,"stargazers_count":426,"open_issues_count":87,"forks_count":112,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-03-29T16:06:06.500Z","etag":null,"topics":["github","issues","javascript","kanban","project-management","serverless"],"latest_commit_sha":null,"homepage":"http://philschatz.github.io/gh-board/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/philschatz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-08T00:29:40.000Z","updated_at":"2025-03-24T07:58:45.000Z","dependencies_parsed_at":"2022-09-12T19:40:36.682Z","dependency_job_id":null,"html_url":"https://github.com/philschatz/gh-board","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philschatz%2Fgh-board","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philschatz%2Fgh-board/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philschatz%2Fgh-board/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philschatz%2Fgh-board/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/philschatz","download_url":"https://codeload.github.com/philschatz/gh-board/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247369952,"owners_count":20927928,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["github","issues","javascript","kanban","project-management","serverless"],"created_at":"2024-07-31T16:01:21.047Z","updated_at":"2025-10-05T20:58:13.002Z","avatar_url":"https://github.com/philschatz.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","github"],"sub_categories":[],"readme":"# Serverless Kanban Board for GitHub Issues\n[![issues][gh-board-image]][gh-board-url]\n[![dependency status][dependency-image]][dependency-url]\n[![dev dependency status][dev-dependency-image]][dev-dependency-url]\n\nWhy waste time and money paying for a Ticket Tracker when you already work in GitHub? Now, you don't have to.\n\n![image](https://cloud.githubusercontent.com/assets/253202/13620649/4ef888cc-e55f-11e5-8576-8970abba8660.png)\n\n- [Features](#features)\n  - [Multiple Repositories](#multiple-repositories)\n  - [Linked Issues and Pull Requests](#linked-issues-and-pull-requests)\n  - [Real-Time Collaboration](#real-time-collaboration)\n  - [Filtering](#filtering)\n  - [Milestone Planning](#milestone-planning)\n  - [Moving Cards](#moving-cards)\n  - [Task Lists](#task-lists)\n  - [CI Status and Merge Conflict](#ci-status-and-merge-conflict)\n  - [Issue Images](#issue-images)\n  - [Pull Request to non-default branch](#pull-request-to-non-default-branch)\n  - [Batch-Edit Labels in Multiple Repositories](#batch-edit-labels-in-multiple-repositories)\n  - [Burnup Chart](#burnup-chart)\n  - [Easter Eggs](#easter-eggs)\n- [Examples](#examples)\n- [Development](#development)\n  - [How Does it Work?](#how-does-it-work)\n- [TODO List](#todo-list)\n\n# Features\n\n### Multiple Repositories\n\nMultiple Repositories in an organization can be shown on a board (from different organizations too!). The repository is shown in gray next to the Issue number.\n\n![image](https://cloud.githubusercontent.com/assets/253202/13621991/70bb1312-e569-11e5-86ef-82372752fbff.png)\n\n\n### Linked Issues and Pull Requests\n\nJust add `#123` or `orgName/RepoName#123` to the Issue or Pull Request body and linked Issues will show up with the column they are in, both below the Card and in the preview popup.\n\n![image](https://cloud.githubusercontent.com/assets/253202/13620658/63f99478-e55f-11e5-8e9f-9babcfb69a29.png)\n\n\n### Real-Time Collaboration\n\nBy clicking the :pencil2: icon next to the card title, multiple people can edit the Issue Body at once (ie in a meeting), and when editing is done, one person clicks \u003ckbd\u003eSave to GitHub\u003c/kbd\u003e.\n\nFeatures:\n\n- send anyone the link to edit\n- real-time preview of Markdown\n- references to Issues show with their state and board column\n- Sequence, State, Gantt, and other diagrams are supported (using [mermaid](https://knsv.github.io/mermaid/))\n\n\u003c!-- ![image](https://cloud.githubusercontent.com/assets/253202/13620696/a0497c72-e55f-11e5-8e6d-abc2077d82bf.png) --\u003e\n\n![gh-board_realtime-editing4](https://cloud.githubusercontent.com/assets/253202/13621429/8c917166-e565-11e5-8e80-10fab6d51253.gif)\n\n\n### Filtering\n\n- cards can be filtered by label, milestone, board column, or user\n- filters can be inclusive as well as exclusive\n\n![gh-board_filters](https://cloud.githubusercontent.com/assets/253202/13621706/958fafec-e567-11e5-9411-405de7f34664.gif)\n\n\n### Milestone Planning\n\nWhen doing Milestone (or Sprint) planning there is a view to easily move cards into milestones\n\n![gh-board_milestone-planning](https://cloud.githubusercontent.com/assets/253202/13621710/9e763c98-e567-11e5-95bd-6473ffedd0ef.gif)\n\n### Moving Cards\n\nCards can be dragged from one column to the next\n\n![gh-board_moving-cards](https://cloud.githubusercontent.com/assets/253202/13621716/a4ea20f8-e567-11e5-9150-795f1acf89e9.gif)\n\n### Task Lists\n\nBy using the `- [ ]` notation in the body of an Issue or Pull Request, the progress of an Issue is shown in the top-right corner of a Card.\n\n![gh-board_task-lists](https://cloud.githubusercontent.com/assets/253202/13621813/523b1438-e568-11e5-997f-5f5014456783.gif)\n\n\u003c!--\n![gh-board_task-lists](https://cloud.githubusercontent.com/assets/253202/13621722/ae9fff82-e567-11e5-93bd-96a6c0330e07.gif) --\u003e\n\n### CI Status and Merge Conflict\n\n- CI Status shows up as a green :heavy_check_mark: or a red :x: on the top-right corner of a card\n- Merge conflicts are shown with a yellow :warning: and have a diagonal striped background\n\n\u003c!-- ![image](https://cloud.githubusercontent.com/assets/253202/13620679/862188ee-e55f-11e5-831f-f5059c18d3ac.png) --\u003e\n\n![image](https://cloud.githubusercontent.com/assets/253202/13621863/bac1f62a-e568-11e5-9761-ce41c84b4eef.png)\n\n![image](https://cloud.githubusercontent.com/assets/253202/13621876/d1bcfeb0-e568-11e5-8a73-c5ef61645a88.png)\n\n![image](https://cloud.githubusercontent.com/assets/253202/13621905/dfee5920-e568-11e5-94df-98a887f63d24.png)\n\n\n### Burnup Chart\n\n[Why Burnup instead of Burndown?](http://brodzinski.com/2012/10/burn-up-better-burn-down.html)\n\nShows a burnup chart for a Milestone (ie \"Sprint\" or \"Iteration\").\nIf you use select multiple repositories it will include all of them.\n\nIt also skips when nothing was opened or closed that day/month/year (useful to see weekends or holidays).\n\n![burnup-chart](https://cloud.githubusercontent.com/assets/253202/14406693/5e05c870-fe7d-11e5-9564-ecddb08ebe0d.png)\n\n\n# Issue Image\n\nIf an Issue or Pull Request contains an image then it will be shown in the Issue\n\n![image](https://cloud.githubusercontent.com/assets/253202/14223380/bbc026c2-f84c-11e5-9ccb-639f62aaf6d7.png)\n\n### Pull Request to non-default branch\n\nSometimes Pull Requests go to a branch other than the main branch. This makes it clear when that happens.\n\n![image](https://cloud.githubusercontent.com/assets/253202/14266496/ac9581b4-fa96-11e5-9991-d15a146f1e3b.png)\n\n### Batch-Edit Labels in Multiple Repositories\n\nIf you need to rename a column or remove a duplicate label you can get to this page from the Settings dropdown next to the filter link.\n\n![image](https://cloud.githubusercontent.com/assets/253202/14569597/b3388eba-030d-11e6-9b6e-ea03df2f2327.png)\n\n\n# Easter Eggs\n\nPlus, it comes with totally useful easter eggs you can unlock!\n\n![easter-eggs](https://cloud.githubusercontent.com/assets/253202/14037438/185532ee-f21a-11e5-8b83-20f8cd21b753.gif)\n\n\n# Examples\n\nJust specify a GitHub repository in the URL and off you go!\n\n- [openstax/tutor-js](http://philschatz.com/gh-board/#/r/openstax:tutor-js)\n- [openstax/tutor-js + tutor-server](http://philschatz.com/gh-board/#/r/openstax:tutor-js|tutor-server) (multiple repositories)\n- [huboard/huboard](http://philschatz.com/gh-board/#/r/huboard:huboard)\n- [jquery/jquery](http://philschatz.com/gh-board/#/r/jquery:jquery)\n- Or wildcards! (must be logged in) using `http://philschatz.com/gh-board/#/r/openstax:tutor-js|*`\n\n\n# Development\n\n- `npm start` to start up the dev server and go to `http://localhost:8080`\n- `npm run build` to generate the JS and CSS files in `./dist`\n\n### How Does it Work?\n\n- JavaScript calls the GitHub API and pulls in the Issues for a given repository.\n  - Since there is no server to do OAuth, people need to provide a GitHub token which is stored in `localStorage`\n- It uses the first repository to get the Issue Labels and Milestones.\n- There are special Labels which represent the board columns (in the format `# - Column Title`)\n- To be a \"Good API Citizen\" `gh-board` uses eTags provided by GitHub and saves them in `localStorage` (or `IndexedDB`)\n\n\n### Hosting your own Forked Version\n\n1. create a fork\n2. switch to the `gh-pages` branch\n3. make a commit and push it to `gh-pages` (to trigger GitHub to start hosting the files)\n4. go to `https://${USERNAME}.github.io/gh-board/`\n\n###### To make edits and push them up on GitHub\n\n1. make edits in the src directory in `master`\n2. commit your changes\n3. run `npm run deploy`\n\n###### To update your fork with the upstream (this repo)\n\n1. `git pull https://github.com/philschatz/gh-board.git master`\n2. run `npm run deploy`\n\n\n# TODO List\n\n- [x] combine Issue and the Pull Requests that fixes it\n- [x] handle dragging in multiple repos:\n  1. auto-create the label in the new repo (confirm first)\n- [x] add checkbox for selecting multiple repos in dashboard\n- [x] select between Issue-centric and PullRequest-centric view\n- [x] support milestone (sprint) planning by making each milestone a column\n- [x] show labels unique to each repository\n- [x] linked Issues \u0026 PR's should include the title\n- [x] collaboratively edit Milestones and any GitHub file by going to `/p-file/:repoOwner/:repoName/:branch/path-to-file`\n- [x] add a list view in addition to a board\n  - [ ] Sort by Due At, Updated At, and ascending/descending\n- [ ] add a way to add labels/milestones to an Issue (autocreate the label/milestone in the repo)\n- [ ] cache issues-updated-since requests and CI status requests in Session Storage instead of IndexedDB so they can be cleared easier\n- [ ] add effort labels XS, S, M, L, XL\n- [ ] add GitHub search\n\n\n[gh-board-image]: https://img.shields.io/github/issues/philschatz/gh-board.svg?label=Issues%20%28gh-board%29\n[gh-board-url]: http://philschatz.com/gh-board/\n[travis-image]: https://img.shields.io/travis/philschatz/gh-board.svg\n[travis-url]: https://travis-ci.org/philschatz/gh-board\n[dependency-image]: https://img.shields.io/david/philschatz/gh-board.svg\n[dependency-url]: https://david-dm.org/philschatz/gh-board\n[dev-dependency-image]: https://img.shields.io/david/dev/philschatz/gh-board.svg\n[dev-dependency-url]: https://david-dm.org/philschatz/gh-board?type=dev\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilschatz%2Fgh-board","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphilschatz%2Fgh-board","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilschatz%2Fgh-board/lists"}