A personal dashboard for keeping tabs on your GitHub activity across all your repos.
GitHub UI kinda sucks and I got tired to needing to comb through branches and repos and PRs just to give a daily update to my team. Hopefully this dashboard improves it!
The app now also has a desktop shell mode powered by Electron so it can grow into a local agent workspace with a real terminal, not just a browser dashboard.
Sign in with GitHub and you get a dashboard showing everything you've been up to:
- Overview — quick glance at your commit count, PR status, and reviews given
- Commits — browse your commits with date filters (1d/7d/30d/90d), branch names, and SHAs
- Pull Requests — see your PRs filtered by open, merged, or closed
- Reviews — PRs you've reviewed
- Repos — activity broken down by repository, sortable by activity or recency
- Recap — AI-generated standup recaps from your recent activity (24h–72h configurable), filterable by activity type (commits, PRs, reviews) and repo, with a custom rule editor so you can control the tone, format, and style of the output
- Settings — configure default time windows, notifications, and your custom AI recap rule, saved with a single form submit
Everything auto-refreshes and results are cached so you don't burn through GitHub's rate limits.
You'll need Node.js 22+, pnpm, Docker or another PostgreSQL instance, and Go 1.24+ if you want to use the local CLI.
The fastest setup path is one command:
./scripts/setup.shIt will:
- create
.envif needed - prompt for your GitHub OAuth app credentials
- install dependencies
- start a local Postgres container if Docker or Podman is available
- apply the Prisma schema
- install
ghatto~/.local/binby default - sync repo
.envwith~/.config/ghat/.envso the global CLI can run outside the repo
You can also run the same flow with:
make setupor:
pnpm run bootstrapgit clone https://github.com/maximilianfalco/github-activity-tracker.git
cd github-activity-tracker
make setupThen open localhost:4731 and sign in with GitHub.
If you want to run the app as a desktop shell instead of in a browser tab:
pnpm desktop:devThat starts the Next.js dev server and opens the app in Electron.
For a production-style desktop launch, build the app first and then start the desktop runtime:
pnpm build
pnpm desktop:startRight now the Electron shell wraps the existing dashboard so the app can evolve toward native desktop features like an embedded PTY-backed agent terminal.
When ghat loads configuration, it uses this precedence:
- existing process environment variables
- repo-local
.envin the current working directory - global fallback
~/.config/ghat/.env
That keeps the CLI aligned with the web app when you're inside the repo, while still letting the globally installed binary work from anywhere else.
If you need to resync those files later, run:
make sync-configor:
pnpm run sync-configThat merge is two-way, but repo-local .env wins on conflicts.
This repo also ships with a local CLI companion called ghat that plugs into the same database, cached activity, settings, and GitHub credentials as the web app.
pnpm ghatIf you want to sign in directly from the terminal first, use:
pnpm ghat loginRun it and you get a menu-driven terminal version of the tracker:
- auto-detect your local GitHub-backed user from the shared database
- reuse the saved GitHub token if one already exists
- open GitHub OAuth in your browser from the terminal with device flow
- read and write the same cached activity and user settings as the web app
- give you arrow-key menus powered by Charm's
huh - use
lipglossstyling for headings, status messages, and output sections
You can jump into:
- Login with GitHub
- Overview
- Commits
- Pull Requests
- Reviews
- Repos
- Recap
- Refresh GitHub data
- Settings
- Recap repo filtering in Settings so your standup only uses the repos you care about
- Switch user
- Logout everywhere
If you want to skip the menu, you can also call commands directly:
go run ./cmd/ghat login
go run ./cmd/ghat overview
go run ./cmd/ghat commits
go run ./cmd/ghat prs
go run ./cmd/ghat recap
go run ./cmd/ghat recap-context --hours 24 --json
go run ./cmd/ghat refreshFor external tools and coding agents, ghat also exposes recap context without calling OpenAI:
ghat recap-context --hours 24 --json
ghat recap-context --hours 48 --types commit,pr --repos owner/repo --jsonThat command returns the saved custom recap rule, the base recap instructions, the filtered activity items, and the preformatted activity text so another agent can generate the final recap itself.
Environment variables
| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
AUTH_SECRET |
NextAuth secret (generate with openssl rand -base64 32) |
AUTH_GITHUB_ID |
GitHub OAuth app client ID |
AUTH_GITHUB_SECRET |
GitHub OAuth app client secret |
OPENAI_API_KEY |
OpenAI API key (used for AI recap generation) |
You'll need to create a GitHub OAuth app at github.com/settings/developers with the callback URL set to http://localhost:4731/api/auth/callback/github. The same AUTH_GITHUB_ID is also used by the CLI device flow login.
- You sign in with GitHub OAuth (
repo,read:user,read:orgscopes) - The app fetches your commits, PRs, and reviews from the GitHub API — commits use a hybrid approach (Events API + Search API) for better coverage
- Results get cached in Postgres with a 15-min TTL so you're not hammering the API
- tRPC serves the data to the frontend where React Query handles caching, polling, and keeping things fresh
- The recap page sends your filtered activity to an AI model (GPT-4o-mini) with your custom style instructions to generate a standup-ready summary you can copy or export as JSON
cmd/
├── ghat/ Go CLI entrypoint
internal/
├── ai/ Recap generation client
├── app/ CLI command flow, menus, and output rendering
├── auth/ Shared local auth/user resolution
├── config/ Runtime env loading for the CLI
├── data/ PostgreSQL reads/writes for users, settings, and cache
├── domain/ Activity filtering, summaries, and recap prep
└── github/ GitHub API + OAuth device flow client
src/
├── app/ Next.js pages and API routes
│ ├── dashboard/ All the dashboard views
│ └── api/ Auth + tRPC handlers
├── components/ UI components (shadcn/ui + custom dashboard pieces)
├── server/
│ ├── api/routers/ tRPC routers for github data and settings
│ ├── services/ GitHub API client and cache layer
│ └── auth/ NextAuth config
├── trpc/ Client/server tRPC setup
└── hooks/ Auto-refresh polling, etc.
| Command | What it does |
|---|---|
pnpm dev |
Dev server on port 4731 |
pnpm desktop:dev |
Launch the Electron desktop shell against the local dev server |
pnpm desktop:start |
Launch the Electron desktop shell against the production Next build |
pnpm build |
Production build |
pnpm check |
Lint + typecheck |
pnpm test |
Run tests |
pnpm ghat |
Launch the interactive GitHub Activity Tracker CLI |
pnpm ghat:test |
Run Go tests for the CLI companion |
pnpm db:push |
Push schema to database |
pnpm db:studio |
Open Prisma Studio |
pnpm docker:dev |
Start dev containers (with hot reload) |
pnpm docker:prod |
Start production containers |
pnpm docker:build |
Build production Docker image |
MIT