current

current

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.

zero dependencies no build step no account Node 18+ MIT
terminal
$ git clone https://github.com/meduseld-io/current.git
$ cd current
$ npm start

Your flow

Two kinds of obligation, kept apart

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.

current 4 need you 3 to review 2 blocked updated 1m ago

Your work

PROJ-1482 Retry transient upload failures
Changes requested · by @rhiannon · 2d
Code review
PROJ-1455 Paginate the audit log endpoint
Ready to merge · approved, checks green
Code review
PROJ-1390 Drop the legacy region shim
Ticket needs moving · every PR merged
In progress
PROJ-1511 Backfill the account index
In progress, no PR · quiet 6 days
In progress
PROJ-1298 Rotate the signing keys
Parked for 9 days · waiting on security
On-Hold

Waiting on you

acme/api Add a circuit breaker to the fetcher
Review asked of you · @marguerite · 3d
#812
acme/api Split the scheduler config
Review asked of you · @tobi · 1d
#819
acme/web Dark mode for the settings panel
CI failing · 2 checks red
#204
acme/infra Pin the base image digest
Stale draft · untouched 8 days
draft

An illustration. The rows above are made up, not a screenshot of anyone's work.

Signals

It surfaces work with a next action, not everything

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.

Changes requestedA reviewer is blocking, and it names who
CI failingChecks are red on the latest commit
Closed but not shippedThe ticket is done but its PR is still open
In progress, no PRTicket in flight, quiet 5+ days, nothing pushed
Merge conflictsCannot land until rebased
Overdue / due soonDue date passed or within three days
Ready to mergeApproved and green, so the label is the merge button
Review asked of youRequested by name, not via a team
Stale draftDraft untouched for a week
Ticket needs movingEvery linked PR merged, ticket still open
Ticket out of syncPR is up for review, ticket still in To Do
Waiting on reviewOpen 2+ days with no approval

Also in the box

The small things that save a tab

Tickets and pull requests, linked

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.

Merging, in two clicks

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.

Standup summary

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.

Mentions and comments

Unread GitHub notifications that are actually conversation, with review requests filtered out because they already have a column of their own.

Search, pins, flags and notes

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 calendar

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

Every source has more than one door

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.

GitHub

Pull requests, reviews, notifications.

  1. CLI gh auth login. Nothing to store, nothing in a file.
  2. Token GITHUB_TOKEN in .env, with the repo and notifications scopes. Wins over the CLI, which is how you point at another account.

Jira

Tickets, standup summary, ticket and PR linking.

  1. CLI acli jira auth login --web. OAuth in your browser. No token to create and no administrator to ask.
  2. Token JIRA_BASE_URL, JIRA_EMAIL and JIRA_API_TOKEN in .env.
  3. Snapshot data/jira-snapshot.json, written by anything that can reach Jira.

Calendar

Today's meetings and your longest free block.

  1. Local node scripts/sync-calendar.mjs reads macOS Calendar. No account involved.
  2. iCal CALENDAR_ICS_URL in .env, a calendar's private address.

Slack

Whether you have asked for a review yet.

  1. Snapshot 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

Three commands, then open a tab

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.

terminal
$ 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

Nothing leaves your machine

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.

Nothing to audit

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.