Skill Issue is an AI-powered GitHub intelligence platform. Drop in a username and it analyzes repositories, engineering maturity, OSS contributions, coding discipline, and growth trajectory — then turns it into actionable feedback, a 100-point engineering score, and shareable "GitHub Receipts."
Engineering insight first. AI flavor second. Scoring is deterministic and explainable; AI only handles narrative, summaries, and humor.
▶ Try it live — skill-issue-tau.vercel.app — analyze any GitHub profile in seconds. If it's useful, a ⭐ on the repo helps other devs find it.
- Profile analysis — pinned repos, contribution rhythm, README quality, CI/CD, deployment maturity, testing culture, licence detection
- Engineering score (100 pts) — Repo Quality 30 · Engineering Maturity 20 · OSS/Collab 15 · Consistency 10 · Recruiter Signal 15 · Learning Trajectory 10
- 7-tier identity ladder — Hobbyist · Student Builder · Entry-Level · Professional · Senior · Staff · Principal Engineer, with intra-tier sub-rank
- Stackable badges — OSS Contributor, PR Master, Maintainer, Star Magnet, Polyglot, Long-haul, Indie Hacker, Toolmaker (signal-driven, deterministic, multi-earnable)
- Tier-gated depth — higher tiers unlock richer signals (licence SPDX, CI workflows, README quality, PR review depth, commit-message quality, cross-repo refactor)
- Analysis modes — Roast + Mentor (canonical two; Recruiter / CTO / Career were dropped 2026-05-19)
- GitHub Receipts™ — shareable 1200×630 OG scorecards for LinkedIn, X, Discord, portfolios
- Warm-cache latency — repeat
/analyze/{user}p95 ≤ 200ms backed by Upstash Redis (v0.7.0+)
Now at v1.0.0 — the first stable release (homepage link-preview cards, an autofocused search, an inline "analyze another" search on reports, and repo cleanup). v0.9.8 before it added launch landing sections — example reports, a "how it works" methodology section, and a GitHub-star CTA; v0.9.7 added a Privacy Policy and Terms of Service, linked from a new site-wide footer; v0.9.6 added a reusable load-test harness for the warm /analyze path (full 100 RPS run is an operator step); v0.9.5 ran a full pre-launch security audit — no high/critical findings — tightening the GitHub OAuth scope to read-only and adding HTTP security headers; v0.9.4 made the DB connection pool size env-tunable and genuinely fixed the back-nav search spinner; v0.9.3 added deletable /me history with undo, a golden "creator" scorecard for the project's creator account, and a first (incomplete) attempt at the back-nav spinner fix. Live at https://skill-issue-tau.vercel.app — GitHub OAuth sign-in, Neon Postgres persistence, /me history, opt-in /share/[slug] public links. The AI narrative layer (Roast + Mentor) runs on Groq (llama-3.3-70b-versatile). v0.7.0 added Upstash Redis caching (warm /analyze ≤ 200 ms); v0.7.2 prod-certified the perf budget (CLS 0.080 → 0 structurally, perf 90 → 94, LCP 2,804 → 2,773 ms); v0.8.0 shipped Sentry (FE+BE), PostHog (events + web vitals), structlog JSON logging, on-voice 404, and a full axe a11y pass; v0.8.1 ships the nightly cron with bearer auth; v0.8.2 pairs it with the manual force-refresh button on /me; v0.8.3 hotfixes the empty-repo crash; v0.8.4 fixes the silent narrative misattribution; v0.8.5 closes the post-deploy-Sentry loop with a pre-merge CI gate; v0.8.6 closes v0.7.1's deferred share-page caching; v0.8.7 modernizes project config; v0.9.0 opens Beta hardening with bounded GH fan-out; v0.9.1 closes the /me N+1 + adds per-namespace Report cache versioning; v0.9.2 adds rate limiting (per-IP for anonymous, higher per-user caps for signed-in) on /analyze and /narrative; v0.9.3 adds deletable /me history with undo, attempts the back-nav search-spinner fix, and gilds the creator's scorecard. v0.9.4 makes the DB connection pool size env-tunable (defaults unchanged — RUM showed no pool exhaustion) and lands the real back-nav spinner fix (the v0.9.3 attempt addressed the wrong mechanism); v0.9.5 runs a full pre-launch security audit (no high/critical findings), tightens the OAuth scope to read:user, and adds HTTP security headers; v0.9.6 adds a reusable load-test harness for the warm /analyze path (the full 100 RPS run is an operator step); v0.9.7 adds a Privacy Policy and Terms of Service, linked from a new global footer; v0.9.8 adds launch landing sections (example reports, a how-it-works section, a GitHub-star CTA); v1.0.0 is the first stable release (homepage Open Graph previews, autofocused + inline search, repo cleanup). Public launch — domain, posts, traffic watch — is tracked in docs/LAUNCH.md. See CHANGELOG.md for shipped slices, PLAN.md for the full roadmap, and docs/PROGRESS_LOG.md for the most recent session handoff.
| File | Purpose |
|---|---|
PLAN.md |
Versioned roadmap — what ships in each v0.X.0 |
CHANGELOG.md |
What has actually shipped, per Keep-a-Changelog |
AGENTS.md |
Required reading for every AI agent or human contributor — the rules of engagement |
ARCHITECTURE.md |
System design + MCP ecosystem |
docs/PRODUCT_VISION.md |
Personality, target users, scoring rubric, voice |
docs/TECH_STACK.md |
Every library, version pin, and why |
docs/PROGRESS_LOG.md |
Running narrative log — what was done and why |
docs/DEPLOY.md |
How to ship to Vercel (single multi-service project + Upstash + Neon walkthrough) |
docs/superpowers/plans/ |
TDD sub-plans for each version slice |
You need two terminals — the FastAPI backend and the Next.js frontend run side by side in dev.
cd backend
uv sync
cp .env.example .env # then edit .env and add your GITHUB_TOKEN and OPENAI_API_KEY
uv run uvicorn app.main:app --reload --port 8000Verify: curl http://localhost:8000/health → {"status":"ok","version":"1.0.0","db":"up"|"down","cache":"up"|"down"|"unconfigured"}. The db field reports DB reachability when DATABASE_URL is configured; the cache field reports Upstash reachability (unconfigured when UPSTASH_REDIS_REST_URL isn't set — perfectly fine for local dev, the in-process fallback covers it).
Hit the analyzer: curl http://localhost:8000/analyze/octocat.
cd frontend
npm install
npm run devThe frontend reads NEXT_PUBLIC_BACKEND_URL from frontend/.env.local (defaults to http://localhost:8000).
Open http://localhost:3000 and analyze a username.
cd backend && uv run pytest -v && uv run ruff check .
cd frontend && npm run lint && npm run test:run && npm run buildThe frontend test:run invokes Vitest (added in v0.6.0). Backend tests use pytest + respx; DB-dependent tests need TEST_DATABASE_URL (local Postgres or a Neon dev branch).
See LICENSE.