Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

GitHub Command Center

A focused GitHub homepage for pull requests, issues, commits, CI failures, and Actions billing across all your repositories.

The public deployment is live at github-command-center.jskoiz.workers.dev.

The root page opens public dashboards at /username, a fixture-backed tour at /demo, or the private dashboard at /dashboard. Hidden repositories and dismissed workflow failures persist in the browser.

Runtime modes

ModeAuthenticationBest for
Local ViteAuthenticated GitHub CLIPersonal use on one machine
Hosted publicNone for /usernameThe live Cloudflare deployment
Standalone hosted OAuthGitHub OAuthPrivate repositories and billing

The project supports Node.js 24 LTS only. .nvmrc and the Docker image pin the same runtime.

Local development

Requirements: Node.js 24.18.0, npm, and an authenticated GitHub CLI.

nvm use
gh auth status
gh auth refresh -h github.com -s user # required for Actions billing
npm ci
npm run dev

Open the landing page, the demo, or the local dashboard.

The local API accepts loopback requests only. Vite does not load unprefixed .env values into its Node process; pass local overrides in the command shell:

GH_BIN=/absolute/path/to/gh npm run dev

Hosted modes

Public /username routes use public GitHub REST data without login. The live Cloudflare Worker is intentionally public-only: /demo and /username work, while /dashboard reports that OAuth is unavailable. It uses GitHub's anonymous REST quota and never uploads the local gh token.

Build, verify, and deploy the public Worker:

nvm use
npm ci
npm run check
npm run deploy
curl --fail https://github-command-center.jskoiz.workers.dev/healthz

wrangler.jsonc is the deployment source of truth. npm run build:worker produces public-only homepage copy, server/worker.ts routes dynamic requests through the shared Node HTTP server, and Cloudflare serves the Vite build with the headers in public/_headers.

The standalone Node server supports optional OAuth. Set GITHUB_PUBLIC_TOKEN to raise GitHub's anonymous quota without exposing the token to visitors.

OAuth is optional. It enables /dashboard, private repository metadata, GraphQL-only rollups, workflow runs, and Actions billing. Create a GitHub OAuth App with ${BASE_URL}/auth/callback as its callback URL, then configure:

BASE_URL=https://gcc.example.com
PORT=3000
GITHUB_PUBLIC_TOKEN=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
SESSION_SECRET=... # openssl rand -hex 32

npm start loads .env when it exists. Process environment variables take precedence. OAuth deployments must use HTTPS; hosted tokens are stored in an encrypted, httpOnly cookie. Do not add OAuth secrets to wrangler.jsonc; the public Worker does not accept OAuth sessions.

Build and start:

npm ci
npm run build
npm start
curl --fail http://127.0.0.1:3000/healthz

Set TRUST_PROXY=1 only behind a trusted reverse proxy. See .env.example for the complete environment contract.

Docker

docker build -t github-command-center .
docker run --rm -p 3000:3000 \
-e BASE_URL=http://127.0.0.1:3000 \
-e GITHUB_PUBLIC_TOKEN=... \
github-command-center

Add the three OAuth variables only when enabling sign-in. The container exposes and health-checks /healthz.

Verify

npm run check
npm audit --audit-level=high

The required gate runs lint, dead-code analysis, browser and server tests in their real environments, typechecking, a production build, and a dependency-free hosted health smoke. Focused commands and the container gate are documented in docs/HARNESS.md.

Data and caching

  • Local mode uses gh api; hosted OAuth uses the signed-in token; public routes use only GITHUB_PUBLIC_TOKEN or anonymous GitHub REST.
  • Full and quick server payloads use short process-local caches.
  • Repository detail refreshes are bounded by scanLimit and retained for one day. Only local mode persists those details under .cache/.
  • Browser payloads are source-scoped in session storage and expire after ten minutes.
  • Partial upstream results remain visible through dashboard warnings.

See docs/ARCHITECTURE.md for ownership, security boundaries, cache invariants, and migration triggers.

License

MIT

About

A focused GitHub dashboard: repos, PRs, issues, CI health, and Actions billing — local gh mode or hosted OAuth mode.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages