{"id":51076357,"url":"https://github.com/mean-weasel/prbar","last_synced_at":"2026-06-23T14:32:51.152Z","repository":{"id":357202090,"uuid":"1227654616","full_name":"mean-weasel/prbar","owner":"mean-weasel","description":"Tiny macOS menu bar app for merged pull request activity.","archived":false,"fork":false,"pushed_at":"2026-06-20T00:22:17.000Z","size":15586,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T02:14:31.514Z","etag":null,"topics":["github","macos","menu-bar","pull-requests","swiftui"],"latest_commit_sha":null,"homepage":"https://mean-weasel.github.io/prbar/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mean-weasel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-03T01:25:44.000Z","updated_at":"2026-06-20T00:22:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mean-weasel/prbar","commit_stats":null,"previous_names":["neonwatty/prbar","mean-weasel/prbar"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/mean-weasel/prbar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mean-weasel%2Fprbar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mean-weasel%2Fprbar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mean-weasel%2Fprbar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mean-weasel%2Fprbar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mean-weasel","download_url":"https://codeload.github.com/mean-weasel/prbar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mean-weasel%2Fprbar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34694780,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","macos","menu-bar","pull-requests","swiftui"],"created_at":"2026-06-23T14:32:50.749Z","updated_at":"2026-06-23T14:32:51.146Z","avatar_url":"https://github.com/mean-weasel.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PR Menu Bar\n\nSee merged PRs without leaving your desktop.\n\nPR Menu Bar is a tiny macOS menu bar app for watching merged pull request activity across team and personal GitHub repositories. It is intentionally lightweight: sample data out of the box, live GitHub data when launched with a token, repository breakdowns, and refresh behavior that keeps the last useful view visible instead of blanking out on failure.\n\nLanding page: https://mean-weasel.github.io/prbar/\n\n![PR Menu Bar social preview](assets/social-preview.png)\n\n## Features\n\n- Watch merged pull request activity from the macOS menu bar.\n- Scan activity over a configurable time window.\n- Break activity down by repository.\n- Create shareable Activity and Release cards as images.\n- Use sample data immediately, or provide a GitHub token for live data.\n- Keep the previous activity visible when refreshes fail.\n\n## Current Shape\n\n- SwiftUI menu bar app scaffolded with XcodeGen.\n- Unit tests for the domain model and GitHub provider path.\n- CI checks for formatting, build, tests, app smoke, and Swift file size.\n- `pr-chart-mobile.html` is the source for the GitHub Pages landing page, deployed by `.github/workflows/pages.yml`.\n- `Docs/Marketing.md` contains reusable launch copy, positioning, CTAs, and asset references.\n\n## Local Development\n\n```bash\nmake generate\nmake test\nmake ci-local\n```\n\n`make app-smoke` builds the app in Release mode and verifies the bundle exists.\n\n## iOS Prototype App\n\nThe native iOS app lives under `apple/` and is generated with XcodeGen:\n\n```bash\nmake ios-generate\nmake ios-ci-local\n```\n\nThe first implementation is fixture-backed and follows the reviewed HTML mockup in\n`mockups/ios/`.\n\n## Live GitHub Data\n\nThe app uses sample data when it cannot find GitHub credentials. For live data, it\nfirst checks `PR_MENU_BAR_GITHUB_TOKEN`, then falls back to your authenticated\nGitHub CLI token from `gh auth token`.\n\nIf you have the GitHub CLI installed and authenticated (`gh auth login`):\n\n```bash\nmake run-live\n```\n\nThe app also tries common GitHub CLI install paths when launched normally from\nmacOS, so an already-authenticated `gh` install can connect without an environment\nvariable. The equivalent explicit token form is:\n\n```bash\nPR_MENU_BAR_GITHUB_TOKEN=github_pat_xxx make run\n```\n\nThe token needs repository read access for the repositories you want to track. Missing\nor blank tokens keep the app on sample data. OAuth and keychain storage are\nintentionally out of scope for this prototype.\nIn-app GitHub sign-in and credential storage remain an open product decision; the\nenvironment-token path is the supported live-data path for now.\n\nThe live provider currently discovers repositories with pull access, fetches merged pull\nrequests through GitHub GraphQL search, filters them to PRs merged by the authenticated\nuser, paginates high-volume result sets, and preserves the last visible activity if a\nrefresh fails. The popover header shows whether the app is using sample data or GitHub\ndata.\n\nManual refresh is available from the popover and is disabled while a refresh is already\nrunning. Scheduled refreshes use the selected refresh interval, show the next eligible\nrefresh time in the footer, and keep the previous activity on failure. GitHub rate-limit\nfailures include the reset time when GitHub sends one.\n\n## Marketing Materials\n\n- Landing page source: `pr-chart-mobile.html`\n- Copy kit: `Docs/Marketing.md`\n- Product video: `assets/pr-menu.mp4`\n- Social preview image: `assets/social-preview.png`\n- Favicon: `assets/favicon.svg`\n\n## Releases\n\nGitHub release notes are produced by semantic-release from conventional commit\ntitles on `main`. A release-artifact workflow can attach a signed and notarized\n`PRMenuBar-macOS.zip` when the Apple Developer ID and notarization secrets are\nconfigured. See `Docs/ReleaseReadiness.md` for the bundle version, packaging\nworkflow, and required release secrets.\n\n## Guardrails\n\nSwift files under `Sources` and `Tests` must stay at or below 300 lines. Split files before they become hard to review.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmean-weasel%2Fprbar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmean-weasel%2Fprbar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmean-weasel%2Fprbar/lists"}