AI-powered recruiter assistant that analyzes a public GitHub profile and produces a recruiter-quality engineering assessment report.
Phases 1–5 established the full backend: skeleton, GitHub OAuth + ingestion, static analysis (6 tools), AI engine (LLM + skills), scoring + report generation.
Phase 6 (this phase) delivers the complete Next.js frontend:
- Design system (
src/styles/globals.css,tailwind.config.ts) — Dark slate base (#0d1117), electric-cyan accent (#00d4ff), JetBrains Mono for all data values. One color does the expressive work everywhere else is quiet. - Type-safe API client (
src/lib/api.ts) — typed fetch wrapper for every backend endpoint; JWT from localStorage on each request. - Landing page — GitHub OAuth CTA, capability overview.
- Analyze page (
/analyze) — URL input form,useJobPollerfor 2s polling with animatedJobProgressbar (queued → fetching → cloning → analyzing → ai_processing → scoring → done), auto-redirect to dashboard on completion. - Dashboard (
/dashboard/profile/[profileId]) — full recruiter report view: —OverviewCard: avatar, name, score ring dial (SVG conic, colored by score), hire recommendation badge, key stats —SkillRadarChart: Recharts RadarChart, 6-axis profile (backend, code quality, devops, security, testing, docs) —LanguageBarChart: horizontal bars with deterministic per-language colors —ScoreCategoryList: all 10 categories as colored progress bars with reason text —ExecutiveSummaryCard,StrengthsWeaknessesCard,RecommendationsCard—SkillsGrid: confidence dots (5-pip scale) grouped by category —RepoHealthTable: signal icons (✓/—) for tests/CI/Docker/README per repo - UI primitives —
ScoreRing(SVG ring with glow),ProgressBar,Badge,Button,Spinner - Hooks —
useJobPoller(polling with terminal-state detection),useAuth(JWT + user state) - App router structure — Suspense boundaries on every
useSearchParamscall, loading skeleton, 404, global error boundary
Not yet: PDF export + resume verification + interview questions (Phase 7), rate limiting + full test suites + CI (Phase 8).
gitinsight-ai/
├── backend/ # FastAPI service (Clean Architecture)
│ ├── app/
│ │ ├── api/v1/ # Route handlers only — no business logic
│ │ ├── core/ # Config, security, logging, exceptions
│ │ ├── schemas/ # Pydantic request/response models
│ │ ├── models/ # SQLAlchemy ORM models
│ │ ├── repositories/ # Data access layer (DB queries only)
│ │ ├── services/ # Business logic / use cases
│ │ ├── analysis_engine/ # Static analysis orchestration (Phase 3)
│ │ ├── ai_engine/ # LLM prompting, embeddings, RAG (Phase 4)
│ │ ├── report_generator/# Score aggregation + PDF export (Phase 5/7)
│ │ ├── workers/ # Celery tasks
│ │ ├── db/ # Session, base, Alembic glue
│ │ └── utils/
│ ├── alembic/ # Migrations
│ └── tests/{unit,integration,api}
├── frontend/ # Next.js + TypeScript + Tailwind + shadcn/ui
│ └── src/{app,components,lib,hooks,types,styles}
├── docker/ # Dockerfiles
├── docker-compose.yml
└── docs/
├── architecture.md
├── database-schema.md
└── api-design.md
cp .env.example .env
docker compose up --buildBackend: http://localhost:8000/docs (OpenAPI) Frontend: http://localhost:3000