How's your flow?
Your Jira tickets and your GitHub pull requests on one page, ranked by what is actually asking for your attention.
It runs on your machine, reads your own accounts and sends nothing anywhere.
$ git clone https://github.com/meduseld-io/current.git $ cd current $ npm start
Your flow
Work only you can finish is a different problem from work where somebody else is stuck until you look. Mixing them into one list makes both easier to ignore, so they get their own columns.
Hover or tap any chip, label or heading in the example below to see what it is.
An illustration. The rows above are made up, not a screenshot of anyone's work.
Signals
A list of every open item is a second backlog. These rules decide what is worth raising; anything that trips none of them stays quiet. An item that trips several appears once, led by its most urgent reason.
Also in the box
Keys such as PROJ-1234 are read out of PR titles and branch names
and joined to your issues, so a ticket row shows its pull requests and a PR row
shows its ticket. That linking is what powers the out-of-sync checks.
A Ready to merge label is also the merge button. The server re-checks the preconditions against GitHub at the moment of merging rather than trusting the browser, and reads each repository's allowed merge method.
What you finished, what you are on and what is blocking you, since the last working day, folding in your own Jira comments. Copyable as plain text.
Unread GitHub notifications that are actually conversation, with review requests filtered out because they already have a column of their own.
Search by ticket key, PR number or title. Pin anything to lift it to the top,
or flag it critical to lift it above the pins and above every
rule. Leave a note on a row, and write #PROJ-1234 in it to link
straight to that row.
Today's meetings and your longest free block, read from macOS Calendar or an iCal address, so "when could I actually do this" has an answer.
Setup
Nothing here assumes a CLI is already installed or that your organisation will hand you an API token. Each source lists its routes in the order the board tries them, and the first one asks the least of you. Settings holds a Check setup panel that says which route is actually carrying the board and what to type to fix the rest.
Pull requests, reviews, notifications.
gh auth login. Nothing to store, nothing in a file.
GITHUB_TOKEN in .env, with the repo and
notifications scopes. Wins over the CLI, which is how you point
at another account.
Tickets, standup summary, ticket and PR linking.
acli jira auth login --web. OAuth in your browser. No token to
create and no administrator to ask.
JIRA_BASE_URL, JIRA_EMAIL and
JIRA_API_TOKEN in .env.
data/jira-snapshot.json, written by anything that can reach Jira.
Today's meetings and your longest free block.
node scripts/sync-calendar.mjs reads macOS Calendar. No account
involved.
CALENDAR_ICS_URL in .env, a calendar's private
address.
Whether you have asked for a review yet.
data/slack-snapshot.json. Searching your own messages needs a
user token, which most workspaces will not issue, so this one is a file by
design. See lib/slack.js.
Leave all of it unset and the board runs GitHub-only. Sources that are not connected are absent, not empty.
Quick start
You need Node 18 or later. There is nothing to install: the project has no
dependencies, so there is no node_modules and no lockfile to audit.
The board starts with nothing configured and tells you what is missing.
$ git clone https://github.com/meduseld-io/current.git $ cd current $ npm start current → http://localhost:4319 # then sign in to whichever of these you use $ gh auth login $ acli jira auth login --web
The server runs locally and talks only to GitHub, Jira and your calendar, as
you. Theme, pins, filters and notes live in localStorage; credentials
live in .env, which is gitignored.
No dependencies, so no transitive supply chain. It is a Node HTTP server and a folder of plain JavaScript, and you can read the whole thing in an afternoon.