# abowahbaz/jobfit architecture

> Architecture diagram of the GitHub repository abowahbaz/jobfit, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/abowahbaz/jobfit
- Repository: https://github.com/abowahbaz/jobfit

## Overview

JobFit is an AI-assisted hiring platform spanning recruiter job and assessment management, candidate assessment taking, and evaluation dashboards. A typical candidate workflow runs from recruiter-created opportunities and assessments through invitation and candidate submission to recruiter review; the README documents these capabilities, while the sampled sources show parts of assessment taking, AI services, and collaborative interviews. The MCP server is a separate interface for external AI agents. Some product branches are represented from the README and file tree, not inspected implementation; unverified links are dashed.

Main entry points: [`app/take/[id]/page.tsx`](https://github.com/abowahbaz/jobfit/blob/main/app/take/%5Bid%5D/page.tsx) (Assessment Taking), [`app/interview/[id]/page.tsx`](https://github.com/abowahbaz/jobfit/blob/main/app/interview/%5Bid%5D/page.tsx) (Interview Room), [`lib/ai-client.ts`](https://github.com/abowahbaz/jobfit/blob/main/lib/ai-client.ts) (AI Completion), [`app/dashboard/jobs/page.tsx`](https://github.com/abowahbaz/jobfit/blob/main/app/dashboard/jobs/page.tsx) (Job Management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_hiring["Hiring Management"]
  node_jobs["Job Management<br/>[page.tsx]"]
  node_jobservice["Job Service<br/>[job-service.ts]"]
  node_resumes["Resume Pipeline<br/>[resume.ts]"]
  node_dashboard["Hiring Dashboard<br/>[page.tsx]"]
end

subgraph group_assessment["Assessments"]
  node_questiongen["Question Generation<br/>[route.ts]"]
  node_assessmentmgmt["Assessment Management<br/>[page.tsx]"]
  node_assessmenttake["Assessment Taking<br/>[page.tsx]"]
  node_problem["Problem Solver<br/>[problem-solver.tsx]"]
  node_testcases["Test Cases"]
  node_execution["Code Execution<br/>[route.ts]"]
  node_submission["Assessment Submission<br/>[route.ts]"]
  node_reports["Candidate Reports<br/>[page.tsx]"]
end

subgraph group_interview["Live Interviews"]
  node_interviewroom["Interview Room<br/>[page.tsx]"]
  node_videocall["Video Call<br/>[video-call.tsx]"]
  node_collaboration["Collaborative Workspace<br/>[yjs-supabase.ts]"]
end

subgraph group_ai["AI Evaluation"]
  node_compare["Candidate Comparison<br/>[route.ts]"]
  node_coach["AI Coach<br/>[route.ts]"]
  node_ai["AI Completion<br/>[ai-client.ts]"]
end

subgraph group_platform["Platform Services"]
  node_supabase[("Supabase")]
  node_mcp["MCP Server<br/>[index.ts]"]
  node_mcpjobs["MCP Job Tools<br/>[job-service.ts]"]
end

node_recruiter(("Recruiter"))
node_candidate(("Candidate"))
node_agent(("AI Agent"))

node_recruiter -.->|"manages jobs"| node_jobs
node_jobs -->|"uses service"| node_jobservice
node_recruiter -.->|"manages assessments"| node_assessmentmgmt
node_assessmentmgmt -.->|"generates questions"| node_questiongen
node_questiongen -->|"requests completion"| node_ai
node_candidate -.->|"takes assessment"| node_assessmenttake
node_assessmenttake -->|"loads assessment"| node_supabase
node_assessmenttake -->|"renders solver"| node_problem
node_assessmenttake -.->|"submits attempt"| node_submission
node_assessmenttake -.->|"runs code"| node_execution
node_problem -.->|"shows test cases"| node_testcases
node_recruiter -.->|"reviews candidates"| node_reports
node_reports -.->|"informs evaluation"| node_dashboard
node_recruiter -.->|"joins interview"| node_interviewroom
node_interviewroom -->|"renders call"| node_videocall
node_interviewroom -->|"syncs workspace"| node_collaboration
node_recruiter -.->|"compares candidates"| node_compare
node_compare -.->|"requests analysis"| node_ai
node_candidate -.->|"requests coaching"| node_coach
node_coach -->|"requests completion"| node_ai
node_agent -->|"uses MCP tools"| node_mcp
node_mcp -.->|"exposes job actions"| node_mcpjobs
node_mcpjobs -->|"queries data"| node_supabase
node_resumes -->|"stores resume"| node_supabase
node_dashboard -->|"reads hiring data"| node_supabase

click node_jobs "https://github.com/abowahbaz/jobfit/blob/main/app/dashboard/jobs/page.tsx"
click node_jobservice "https://github.com/abowahbaz/jobfit/blob/main/services/job-service.ts"
click node_resumes "https://github.com/abowahbaz/jobfit/blob/main/app/actions/resume.ts"
click node_dashboard "https://github.com/abowahbaz/jobfit/blob/main/app/dashboard/page.tsx"
click node_questiongen "https://github.com/abowahbaz/jobfit/blob/main/app/api/generate-questions/route.ts"
click node_assessmentmgmt "https://github.com/abowahbaz/jobfit/blob/main/app/dashboard/assessments/page.tsx"
click node_assessmenttake "https://github.com/abowahbaz/jobfit/blob/main/app/take/%5Bid%5D/page.tsx"
click node_problem "https://github.com/abowahbaz/jobfit/blob/main/components/problems/problem-solver.tsx"
click node_testcases "https://github.com/abowahbaz/jobfit/blob/main/components/shared/TestCasesManager.tsx"
click node_execution "https://github.com/abowahbaz/jobfit/blob/main/app/api/execute/route.ts"
click node_submission "https://github.com/abowahbaz/jobfit/blob/main/app/api/assessments/%5Bid%5D/submit/route.ts"
click node_reports "https://github.com/abowahbaz/jobfit/blob/main/app/recruiter/assessments/%5Bid%5D/report/%5Bcandidate_id%5D/page.tsx"
click node_interviewroom "https://github.com/abowahbaz/jobfit/blob/main/app/interview/%5Bid%5D/page.tsx"
click node_videocall "https://github.com/abowahbaz/jobfit/blob/main/components/interview/video-call.tsx"
click node_collaboration "https://github.com/abowahbaz/jobfit/blob/main/lib/yjs-supabase.ts"
click node_compare "https://github.com/abowahbaz/jobfit/blob/main/app/api/compare-candidates/route.ts"
click node_coach "https://github.com/abowahbaz/jobfit/blob/main/app/api/ai-coach/route.ts"
click node_ai "https://github.com/abowahbaz/jobfit/blob/main/lib/ai-client.ts"
click node_mcp "https://github.com/abowahbaz/jobfit/blob/main/mcp-server/src/index.ts"
click node_mcpjobs "https://github.com/abowahbaz/jobfit/blob/main/mcp-server/src/services/job-service.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_jobs,node_jobservice,node_resumes,node_dashboard toneBlue
class node_questiongen,node_assessmentmgmt,node_assessmenttake,node_problem,node_testcases,node_execution,node_submission,node_reports toneAmber
class node_interviewroom,node_videocall,node_collaboration toneMint
class node_compare,node_coach,node_ai toneRose
class node_supabase,node_mcp,node_mcpjobs,node_recruiter,node_candidate,node_agent toneIndigo
```

## Components

### Hiring Management

- [Job Management](https://github.com/abowahbaz/jobfit/blob/main/app/dashboard/jobs/page.tsx): `app/dashboard/jobs/page.tsx`
- [Job Service](https://github.com/abowahbaz/jobfit/blob/main/services/job-service.ts): `services/job-service.ts`
- [Resume Pipeline](https://github.com/abowahbaz/jobfit/blob/main/app/actions/resume.ts): `app/actions/resume.ts`
- [Hiring Dashboard](https://github.com/abowahbaz/jobfit/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`

### Assessments

- [Question Generation](https://github.com/abowahbaz/jobfit/blob/main/app/api/generate-questions/route.ts): `app/api/generate-questions/route.ts`
- [Assessment Management](https://github.com/abowahbaz/jobfit/blob/main/app/dashboard/assessments/page.tsx): `app/dashboard/assessments/page.tsx`
- [Assessment Taking](https://github.com/abowahbaz/jobfit/blob/main/app/take/%5Bid%5D/page.tsx): `app/take/[id]/page.tsx`
- [Problem Solver](https://github.com/abowahbaz/jobfit/blob/main/components/problems/problem-solver.tsx): `components/problems/problem-solver.tsx`
- [Test Cases](https://github.com/abowahbaz/jobfit/blob/main/components/shared/TestCasesManager.tsx): `components/shared/TestCasesManager.tsx`
- [Code Execution](https://github.com/abowahbaz/jobfit/blob/main/app/api/execute/route.ts): `app/api/execute/route.ts`
- [Assessment Submission](https://github.com/abowahbaz/jobfit/blob/main/app/api/assessments/%5Bid%5D/submit/route.ts): `app/api/assessments/[id]/submit/route.ts`
- [Candidate Reports](https://github.com/abowahbaz/jobfit/blob/main/app/recruiter/assessments/%5Bid%5D/report/%5Bcandidate_id%5D/page.tsx): `app/recruiter/assessments/[id]/report/[candidate_id]/page.tsx`

### Live Interviews

- [Interview Room](https://github.com/abowahbaz/jobfit/blob/main/app/interview/%5Bid%5D/page.tsx): `app/interview/[id]/page.tsx`
- [Video Call](https://github.com/abowahbaz/jobfit/blob/main/components/interview/video-call.tsx): `components/interview/video-call.tsx`
- [Collaborative Workspace](https://github.com/abowahbaz/jobfit/blob/main/lib/yjs-supabase.ts): `lib/yjs-supabase.ts`

### AI Evaluation

- [Candidate Comparison](https://github.com/abowahbaz/jobfit/blob/main/app/api/compare-candidates/route.ts): `app/api/compare-candidates/route.ts`
- [AI Coach](https://github.com/abowahbaz/jobfit/blob/main/app/api/ai-coach/route.ts): `app/api/ai-coach/route.ts`
- [AI Completion](https://github.com/abowahbaz/jobfit/blob/main/lib/ai-client.ts): `lib/ai-client.ts`

### Platform Services

- **Supabase**
- [MCP Server](https://github.com/abowahbaz/jobfit/blob/main/mcp-server/src/index.ts): `mcp-server/src/index.ts`
- [MCP Job Tools](https://github.com/abowahbaz/jobfit/blob/main/mcp-server/src/services/job-service.ts): `mcp-server/src/services/job-service.ts`

### Other components

- **Recruiter**
- **Candidate**
- **AI Agent**

## Connections

- Recruiter → Job Management: manages jobs
- Job Management → Job Service: uses service (evidence: `services/job-service.ts`)
- Recruiter → Assessment Management: manages assessments
- Assessment Management → Question Generation: generates questions
- Question Generation → AI Completion: requests completion (evidence: `app/api/generate-questions/route.ts`)
- Candidate → Assessment Taking: takes assessment
- Assessment Taking → Supabase: loads assessment (evidence: `app/take/[id]/page.tsx`)
- Assessment Taking → Problem Solver: renders solver (evidence: `app/take/[id]/page.tsx`)
- Assessment Taking → Assessment Submission: submits attempt
- Assessment Taking → Code Execution: runs code
- Problem Solver → Test Cases: shows test cases
- Recruiter → Candidate Reports: reviews candidates
- Candidate Reports → Hiring Dashboard: informs evaluation
- Recruiter → Interview Room: joins interview
- Interview Room → Video Call: renders call (evidence: `app/interview/[id]/page.tsx`)
- Interview Room → Collaborative Workspace: syncs workspace (evidence: `app/interview/[id]/page.tsx`)
- Recruiter → Candidate Comparison: compares candidates
- Candidate Comparison → AI Completion: requests analysis
- Candidate → AI Coach: requests coaching
- AI Coach → AI Completion: requests completion (evidence: `app/api/ai-coach/route.ts`)
- AI Agent → MCP Server: uses MCP tools
- MCP Server → MCP Job Tools: exposes job actions
- MCP Job Tools → Supabase: queries data (evidence: `mcp-server/src/services/job-service.ts`)
- Resume Pipeline → Supabase: stores resume (evidence: `app/actions/resume.ts`)
- Hiring Dashboard → Supabase: reads hiring data (evidence: `app/dashboard/page.tsx`)
