Status Reports for Jira creates stunning, branded status reports for your Jira projects. It offers customizable designs to showcase progress and timelines.
For guides and comprehensive documentation, checkout the project's official wiki.
Prerequisites: Node.js 22.9.0 (nvm install && nvm use) — or use Docker / a Dev Container (no local Node needed).
git clone https://github.com/bitovi/jira-timeline-report.git
cd jira-timeline-report
npm run setup # creates .env, installs deps, checks credentials
npm run dev # web app at http://localhost:5173The full app needs Jira OAuth credentials. We use a shared dev OAuth app — if
VITE_JIRA_CLIENT_ID / JIRA_CLIENT_SECRET are blank in your .env, ask in the
team room for them (or create your own app, see CONTRIBUTING.md).
No credentials? Work on UI with mock data — no login required:
npm run storybook # component explorer at http://localhost:6006Other ways to run:
- Docker (live-reload) — no local Node required:
npm run docker:dev - Dev Container — open in VS Code and "Reopen in Container" (auto-installs everything)
- AI agent — ask Copilot/Claude to run the
launch-devagent to set everything up for you
See CONTRIBUTING.md for the full setup, including running inside Jira.
This project is supported by Bitovi, an Agile Project Management consultancy. For bugs or feature requests, please submit a Github Issue.
You can get help or ask questions on our:
See Contributing
- The server folder contains a
server.jswhich bootstraps an express application that renders the application - It has an endpoint that fetches the access token from Jira and refreshes the access token when expired.
- The
pagesfolder contains the html files that are rendered. - The
publicfolder contains the javascript files that are included in the html files. - The
jira-oidc-helpersis a collection of modules with all the helpers required to interact with Jira and save your access and refresh tokens tolocalStorage. - You will make changes to the
main-helper.jsfiles based on your use case. Everything you need to make your request has been layered injira-oidc-helpers. - Call the
jiraFetchhelper with the url path you want from your main and handle the data how you see fit. e.g
const issue = await jiraHelper.jiraFetch(urlPath);