Live version: https://githubble.root.sx/#overview
Live dashboard for public GitHub stars and forks. Go polls the GitHub public events API and broadcasts WatchEvent/ForkEvent via SSE. Next.js streams those events through a same-origin route into a React dashboard with session stats, top actors/repositories, event navigation, pause, counters, and reset.
- Create a GitHub personal access token (a token with no scopes is enough for public events).
- Copy
.env.exampleto.envand setGITHUB_TOKENS(separate multiple tokens with commas). - Run
docker compose up --buildand open http://localhost:3001.
The only public service is Next.js on port 3001. The Go backend is internal to
Compose. Never put a GitHub token into NEXT_PUBLIC_* variables.
Requires Go 1.26.9+ and Node.js 22.12+.
cd backend
GITHUB_TOKENS=your_token go run .In another terminal:
cd frontend
npm ci
npm run devOpen http://localhost:3001. If Go isn't listening on localhost:3003, set
BACKEND_URL for the Next.js process (e.g. BACKEND_URL=http://localhost:3003).
The backend only polls while at least one SSE client is connected. It checks
up to 300 recent events (three pages of 100) and honors GitHub's
X-Poll-Interval (normally 60 seconds), using conditional requests. New
events may therefore appear with a delay. The public events feed is eventually
consistent; this app does not guarantee delivery of every GitHub event.
The browser paces each received batch across the following minute to make
the feed easier to watch. Its status line shows the last GitHub check and the
number of buffered events; pacing does not mean the underlying data is newer.
New connections also receive a small replay of recent events so the board can
populate immediately after the service has completed at least one poll.
The Go service writes structured JSON logs to stdout. Set LOG_LEVEL=debug
in .env for additional diagnostics (info is the default), then run
docker compose logs -f backend. Logs report client counts, scanned pages,
new stars/forks, GitHub poll interval, rate-limit status and errors; they do
not include token values or event payloads.
cd backend && go test -race ./... && go vet ./...
cd frontend && npm test && npm run typecheck && npm run build