Stop drowning in tabs. Start shipping like it's your job — because it is.
Every PR · Every issue · Every repo · One keyboard · Zero tabs.
You're juggling 12 repos. You switched tabs 47 times today. Half the PRs you're supposed to review are buried in email. Your TODO list is spread across Notion, a sticky note, and ~/.notes-final-FINAL.md.
You're not slow. Your tooling is.
GitShipRoom is a local-first command center that pulls every PR, every issue, every pending task into one keyboard-driven dashboard running on your machine. No SaaS. No subscription. No data ever leaves localhost.
You are the orchestrator. GitShipRoom is your cockpit.
| Feature | Description | |
|---|---|---|
| 📥 | Unified PR Inbox | Every PR that wants you, across every repo — review-requested, assigned, authored — in one list |
| ⌨️ | Keyboard-first | j/k navigate · Enter open · a approve · R request changes · m merge · c copy Claude cmd · ? cheatsheet |
| 📝 | Pendientes | Local SQLite TODO list, optionally linked to any PR/issue. Capture instantly with n |
| 🐛 | Issues view | Open issues across your repos, grouped and filterable |
| 🤖 | Claude Code handoff | One keypress copies a context-aware command for Claude Code |
| 🔄 | Live polling | Inbox auto-refreshes every 60s; manual refresh on demand |
| 🔐 | 100% local | Your token, your machine, your data. Nothing leaves your box. |
GitShipRoom ships in waves. Each version is usable on its own — you get value at every step.
| Version | What ships | Status |
|---|---|---|
| v0.1 | PR inbox · issues · pendientes · copy Claude command | 🚧 Building |
| v0.2 | ✨ AI-drafted PR reviews — dictate intent, Claude redacts, you approve, ship | 📅 Next |
| v0.3 | 🎨 Create/update PRs from the UI — AI writes title + body from your intent | 📅 Planned |
| v0.4 | 📬 Gmail inbox + AI replies — same orchestrator flow, for email | 📅 Planned |
| v0.5 | 🔔 Proactive cron — AI watches your repos and emails/calendars when something's urgent | 📅 Planned |
| v0.6 | 🧙 Spawn Claude Code sessions from the UI — tmux, full context, one click | 📅 Planned |
# Clone
git clone https://github.com/juliosuas/gitshiproom.git
cd gitshiproom
# Install (you need Bun — https://bun.sh)
bun install
# Configure
cp .env.example .env
# → open .env and paste your GitHub PAT
# Launch
bun run devOpen http://localhost:3000 and let the cockpit take over.
Create a classic token at github.com/settings/tokens/new with:
- ✅
repo - ✅
read:org - ✅
read:user
Paste it into .env as GITHUB_TOKEN=ghp_….
|
Runtime |
Framework |
Language |
|
UI |
Local data |
GitHub |
|
Client state |
Testing |
Dev workflow 🧰 gstack ( |
bun test # unit + integration (Vitest + MSW)
bun run test:e2e # Playwright E2E
bun run typecheck # tsc --noEmit
bun run lint # Next.js lint
bun run build # production buildAll green before you ship. Non-negotiable.
┌───────────────────────────────────────────────────┐
│ Browser (http://localhost:3000) │
│ React Server Components · SWR · shadcn/ui │
└────────────────────────┬──────────────────────────┘
│ same-origin fetch
┌────────────────────────▼──────────────────────────┐
│ Next.js 16 (App Router) │
│ API routes · Node runtime │
│ │
│ ┌──────────────┐ ┌─────────────────┐ │
│ │ Octokit │ │ better-sqlite3 │ │
│ │ + TTL │ │ (pendientes + │ │
│ │ cache 30s │ │ settings) │ │
│ └──────┬───────┘ └─────────────────┘ │
└──────────┼────────────────────────────────────────┘
│
┌─────▼─────┐
│ GitHub │
│ API │
└───────────┘
- 🧠 Server-side cache protects GitHub's 5 000 req/hr rate limit
- 🔄 Client-side SWR polls every 60s with optimistic mutations
- 💾 SQLite stores only what doesn't live on GitHub (pendientes, settings)
- 🚫 No external services — no Redis, no Postgres, no cloud workers
gitshiproom/
├── app/ # Next.js App Router pages + API routes
│ ├── (pages)/ # inbox, issues, pendientes, settings, setup
│ └── api/ # /api/prs, /api/issues, /api/pendientes, /api/settings
├── components/ # UI (shadcn + custom)
├── lib/
│ ├── github/ # Octokit client, inbox, pr-detail, actions
│ └── db/ # SQLite client, pendientes, settings
├── hooks/ # React hooks (use-settings, …)
├── tests/
│ ├── unit/ # Vitest
│ ├── integration/ # API route tests with MSW
│ └── e2e/ # Playwright
└── docs/
└── superpowers/ # Design specs + implementation plans
├── specs/
└── plans/
GitShipRoom stands on the shoulders of a lot of great open-source work. Shout-outs to:
- Next.js and SWR by Vercel
- Bun by Oven
- Tailwind CSS by Tailwind Labs
- shadcn/ui by @shadcn
- Radix UI — the primitives under shadcn
- Lucide — the icon set
- better-sqlite3 by WiseLibs
- Octokit — GitHub's official SDK
- Vitest & MSW for fast, realistic unit/integration tests
- Playwright by Microsoft for E2E
- TypeScript by Microsoft
- Claude Code by Anthropic — used as a pair-programming tool during spec and plan authoring
- gstack — dev-loop skills (
/ship,/review,/qa,/health,/investigate) - superpowers plugin — brainstorming / planning / subagent-driven workflows
- GitHub — the platform we orchestrate
- UX inspiration: Linear, Raycast, Warp — keyboard-first done right
GitShipRoom is designed, architected, and built by Julio · @juliosuas.
If this saves you hours, a ⭐ on the repo is the best thank-you.
GitShipRoom is MIT-licensed open source. Issues, PRs, and ideas welcome — especially once v0.1 lands.
If you fork it and build something awesome, tag me.
MIT © juliosuas · 2026
Built with 💻, shipped with ⚡ — for developers who value their time.
⭐ Star this repo if GitShipRoom saves you a minute. It's designed to save hours.