Release freshness dashboard for public GitHub users and orgs.
ReleaseBar tracks public GitHub repository release health: latest version, release date, commits since release, activity, stars, language, topics, open work, and CI status. It serves cached dashboards for routes like https://release.bar/steipete, https://release.bar/openclaw, and https://release.bar/microsoft.
Owner dashboards show visible public repositories immediately with lightweight repo metadata, then progressively hydrate release, commit, PR, and CI data in the background.
Edit releasebar.config.json:
owners: GitHub users or orgs to scanincludeForks: include forked repositoriesincludeArchived: include archived repositoriesincludeUnreleased: include repositories without GitHub releases in static buildsexcludeRepos: fullowner/nameentries to hidecanonicalDomain: primary public dashboard domain
npm run buildSet GITHUB_TOKEN for higher API limits. GitHub Actions uses the built-in token. Static builds read releasebar.config.json; the public service reads owner routes through the Worker API.
/loadsReleaseBar Hot, a cached board built from recently requested public dashboards/:ownerloads the Worker API for that owner- query options:
forks=true,archived=true,unreleased=false - add public sources with
owners=openclaw,steipeteorrepos=owner/name - the settings panel can add public users, orgs, or explicit repos to the current URL
- signed-in dashboard owners can save added public sources and local visibility as the public default for their clean owner route
- custom URLs are capped at 8 added public sources
- settings can hide visible owners or repos locally without changing the shared cache
- GitHub App login uses
/api/auth/login,/api/auth/callback,/api/auth/install,/api/auth/logout, and/api/me Connect GitHubsigns the user in, checks GitHub App installations, and sends them to install the app when the current dashboard source is not covered- GitHub App installation gives ReleaseBar dedicated GitHub API quota for the selected account/repositories; public dashboards still fall back to the shared server token and cache
- private repositories are ignored even when selected in GitHub App installation; ReleaseBar only stores and renders public repository metadata
- the need-attention metric filters repos with unreleased commits, stale releases, failing/cancelled CI, or issue/PR pressure and rows show the reason inline
- repository detail pages include release cadence, recent releases, contributors, languages, commit/churn charts, and 30-day issue/PR trend counts when GitHub provides them
- repository detail pages can show an AI summary of commit titles since the latest release when the Worker has an OpenAI API key
The Worker in worker/index.ts serves both the static app shell and the generic owner API:
GET /api/:ownerreturns a cached dashboard for a public GitHub user or orgGET /api/:owner/eventsstreams cache updates for progressive rebuildsGET /api/repos/:owner/:reporeturns repository detail statsGET /api/_discoverandGET /api/_hotpower the root dashboard
Dashboard builds validate public GitHub owners, scan up to the 200 most recently pushed public repositories per owner, and hydrate repositories in 12-repository batches. Dashboard payloads, repo fragments, hot boards, profile settings, and auth session data live in Cloudflare KV. A Durable Object binding (DASHBOARD_LOCKS) prevents repeated cold requests from stampeding GitHub.
Fresh dashboard cache is served for about 1h. Stale or partial cache is shown while a background rebuild continues, so large owners can show useful rows before all release data finishes. Dashboard records are retained longer than the fresh window so older public data can remain visible during GitHub outages or rate limits, with the UI marking stale/partial state.
Configure these Worker secrets before enabling login:
GITHUB_APP_CLIENT_IDGITHUB_APP_CLIENT_SECRETGITHUB_APP_IDGITHUB_APP_PRIVATE_KEYAUTH_COOKIE_SECRET
GITHUB_APP_ID and GITHUB_APP_PRIVATE_KEY are required for dedicated GitHub App quota. Without them, users can still sign in, but dashboard rebuilds use the shared server token/cache. Optional: GITHUB_APP_SLUG defaults to releasebar-app, the current GitHub App slug.
Set the GitHub App setup URL to https://release.bar/api/auth/install and enable redirect-on-update so users return to their dashboard after installing or changing repository access.
Configure OPENAI_API_KEY as a Worker secret to summarize commit titles since the latest release on repository detail pages. Optional: OPENAI_SUMMARY_MODEL defaults to gpt-5.5.
wrangler secret put OPENAI_API_KEYSummaries are generated server-side through the OpenAI Responses API with low reasoning effort and cached by repository, release tag, default-branch head SHA, model, and prompt version.
The combined app/API Worker deploys with Wrangler through .github/workflows/deploy.yml on pushes to main:
npm run build
wrangler deploywrangler.toml binds dist as Worker static assets, DASHBOARD_CACHE as KV, and DASHBOARD_LOCKS as the Durable Object single-flight lock. The Worker runs first so /api/* stays dynamic and owner routes like /openclaw return the app shell with HTTP 200. Deploy CI smokes the root page, an owner page, a repository detail page, the discovery API, and live JS/CSS asset hashes after Wrangler deploys.
The deployed Worker service is still named releasedeck-api in Cloudflare for continuity. The canonical product, repo, package, and config names are ReleaseBar / releasebar.