Smart issue tracker for Bobby projects. Powered by Supabase (shared with Bobby CI for SSO) and the bobby-analyser microservice (for issue → file/line suggestions, Phase 3).
- Next.js 16 (App Router, Turbopack,
proxy.tsmiddleware) - React 19, TypeScript, Tailwind v4
- Supabase Postgres (
trackerschema) + Supabase Auth - WebSocket client → bobby-analyser
/jobs, HTTP client →/query
-
Same Supabase project as Bobby CI. No new project — bobby-tracker uses the existing one so users get single sign-on.
-
Apply the schema:
supabase db push --file supabase/migrations/0001_tracker_schema.sql
…or paste it into the Supabase SQL editor. Then in Supabase → Settings → API → Exposed schemas, add
trackeralongsidepublic. -
Enable Realtime publication for
tracker.project_analyserandtracker.issue_suggestionsso the analyser panel and issue-suggestions panel pick up server-side updates without a refresh:# Run as part of the migration set above, or paste into the SQL editor: alter publication supabase_realtime add table tracker.project_analyser; alter publication supabase_realtime add table tracker.issue_suggestions;
(Migration
0003_realtime.sqldoes this for you.) RLS still applies to realtime — clients only receive rows their JWT can read. -
Configure auth: Supabase → Authentication → Providers → GitHub. Already set up for Bobby CI? Same setting is reused. Add this app's redirect to the allowed list:
https://your-tracker-domain/auth/callbackhttp://localhost:3000/auth/callback(dev)
-
Env:
cp .env.local.example .env.local # fill NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, # BOBBY_ANALYSER_URL, BOBBY_ANALYSER_TOKEN # In production set NEXT_PUBLIC_AUTH_COOKIE_DOMAIN to the parent # domain shared with Bobby CI for SSO.
-
Run:
npm run dev # http://localhost:3000
Run next start on a Node host. The /api/projects/[id]/analyser/index route holds an analyser WebSocket open for the entire indexing run (potentially several minutes), so do not deploy this route to a serverless platform with short request timeouts (Vercel functions, Lambda). A small VPS or container next to bobby-analyser-server is the right shape.
app/(app)/— authenticated routes, gated byproxy.tsand the(app)/layout.tsxserver check.lib/supabase/{client,server}.ts—db: { schema: "tracker" }so calls land ontracker.*.cookieOptions.domainenables shared-session SSO with Bobby CI whenNEXT_PUBLIC_AUTH_COOKIE_DOMAINis set.lib/analyser.ts— server-only HTTP/WS client to bobby-analyser. ReadsBOBBY_ANALYSER_URL+BOBBY_ANALYSER_TOKENfrom the env; never imported into client components.proxy.ts— refreshes the Supabase auth cookie and redirects unauthenticated requests to/login.
Open any issue → the Investigate with analyser panel:
- Pulls the latest cached
tracker.issue_suggestionsrow server-side and renders it instantly. - Hit Investigate / Regenerate to call
POST /api/issues/[id]/suggest, which sends the issue title + body to bobby-analyser/queryagainst the project's indexed graph and stores the result. - Renders the analyser's markdown answer plus a list of file/line citations as clickable GitHub blob links pinned to the indexed SHA (so the line numbers match what the agent actually saw).
- Returns
409 needs_indexingif the project hasn't been analysed yet — the UI surfaces a prompt to enable + index.
Cost is whatever the analyser charges per query (≈$0.01–0.05 with default budget).
- GitHub Issues two-way sync (per-project toggle on the Integrations page, webhook receiver, GitHub App / PAT credential storage).
- See
AGENTS.md: Next 16 has breaking changes from training-data Next; checknode_modules/next/dist/docsbefore writing new patterns.