# xiaoming0313883/404-brain-not-found-recruiter architecture

> Architecture diagram of the GitHub repository xiaoming0313883/404-brain-not-found-recruiter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xiaoming0313883/404-brain-not-found-recruiter
- Repository: https://github.com/xiaoming0313883/404-brain-not-found-recruiter

## Overview

404Hire is a two-sided AI recruitment workspace: hiring managers define roles and source candidates, while candidates apply, complete profile information, and progress through screening. Its backend coordinates guarded agent tasks for role requirements, resume parsing, bias analysis, matching, interviews, and reports, then persists hiring state. The README documents integrations and capabilities beyond the sampled excerpts; those are included only where their paths are supported by the tree, and uncertain wiring is omitted.

Main entry points: [`backend/app/services/agents/graph.py`](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/graph.py) (Recruiting supervisor), [`backend/main.py`](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/main.py) (FastAPI application), [`backend/app/database.py`](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/database.py) (Supabase persistence), [`backend/app/routes/candidates.py`](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/candidates.py) (Candidate endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User portals"]
  node_app["Portal router<br/>[App.tsx]"]
  node_manager_portal["Manager workspace"]
  node_candidate_portal["Candidate workspace"]
  node_candidate_home["Candidate applications<br/>[CandidateHome.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_api["Recruitment API"]
  node_server["FastAPI application<br/>[main.py]"]
  node_job_routes["Job endpoints<br/>[jobs.py]"]
  node_candidate_routes["Candidate endpoints<br/>[candidates.py]"]
  node_agent_routes["Agent endpoints<br/>[agents.py]"]
  node_settings_routes["Settings endpoints<br/>[settings.py]"]
end

subgraph group_agents["Agent workflow"]
  node_graph{{"Recruiting supervisor<br/>[graph.py]"}}
  node_requirements["Role requirements"]
  node_resume["Resume understanding<br/>[resume_agent.py]"]
  node_bias["Bias analysis<br/>[bias_agent.py]"]
  node_matching["Candidate matching<br/>[matching_agent.py]"]
  node_interview["Interview screening<br/>[interview_agent.py]"]
  node_report["Candidate reports<br/>[report_agent.py]"]
  node_guardrails["Agent guardrails<br/>[guardrails.py]"]
end

subgraph group_state["Data and integrations"]
  node_database[("Supabase persistence<br/>[database.py]")]
  node_linkedin["LinkedIn profile sourcing"]
  node_mailer["Email delivery<br/>[mailer.py]"]
end

node_manager(("Hiring manager"))
node_candidate(("Candidate"))
node_llm(("LLM service"))
node_supabase[("Supabase")]
node_apify(("Apify"))
node_smtp(("SMTP service"))

node_manager -->|"opens portal"| node_app
node_candidate -->|"opens portal"| node_app
node_app -->|"routes manager"| node_manager_portal
node_app -->|"routes candidate"| node_candidate_portal
node_candidate_portal -->|"shows applications"| node_candidate_home
node_candidate_home -->|"requests jobs"| node_api_client
node_manager_portal -->|"requests workspace data"| node_api_client
node_api_client -->|"calls API"| node_server
node_server -->|"registers routes"| node_job_routes
node_server -->|"registers routes"| node_candidate_routes
node_server -->|"registers routes"| node_agent_routes
node_server -->|"registers routes"| node_settings_routes
node_server -->|"initializes"| node_database
node_candidate_routes -->|"runs application tasks"| node_graph
node_agent_routes -->|"runs agent tasks"| node_graph
node_graph -->|"checks inputs"| node_guardrails
node_graph -->|"dispatches task"| node_requirements
node_graph -->|"dispatches task"| node_resume
node_graph -->|"dispatches task"| node_bias
node_graph -->|"dispatches task"| node_matching
node_graph -->|"dispatches task"| node_interview
node_graph -->|"dispatches task"| node_report
node_graph -->|"requests reasoning"| node_llm
node_candidate_routes -->|"reads and writes"| node_database
node_job_routes -->|"reads and writes"| node_database
node_settings_routes -->|"reads and writes"| node_database
node_candidate_routes -.->|"sources profiles"| node_linkedin
node_linkedin -.->|"scrapes profiles"| node_apify
node_mailer -.->|"delivers email"| node_smtp
node_database -->|"reads and writes"| node_supabase

click node_app "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/App.tsx"
click node_manager_portal "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/components/HiringManagerPortal.tsx"
click node_candidate_portal "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/components/CandidatePortal.tsx"
click node_candidate_home "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/components/candidate/CandidateHome.tsx"
click node_api_client "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/api.ts"
click node_server "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/main.py"
click node_job_routes "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/jobs.py"
click node_candidate_routes "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/candidates.py"
click node_agent_routes "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/agents.py"
click node_settings_routes "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/settings.py"
click node_graph "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/graph.py"
click node_requirements "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/requirement_agent.py"
click node_resume "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/resume_agent.py"
click node_bias "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/bias_agent.py"
click node_matching "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/matching_agent.py"
click node_interview "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/interview_agent.py"
click node_report "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/report_agent.py"
click node_guardrails "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/guardrails.py"
click node_database "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/database.py"
click node_linkedin "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/linkedin_profiles.py"
click node_mailer "https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/mailer.py"

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_app,node_manager_portal,node_candidate_portal,node_candidate_home,node_api_client toneBlue
class node_server,node_job_routes,node_candidate_routes,node_agent_routes,node_settings_routes,node_supabase toneAmber
class node_graph,node_requirements,node_resume,node_bias,node_matching,node_interview,node_report,node_guardrails,node_apify toneMint
class node_database,node_linkedin,node_mailer toneRose
class node_manager,node_candidate,node_llm,node_smtp toneIndigo
```

## Components

### User portals

- [Portal router](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/App.tsx): `src/app/App.tsx`
- [Manager workspace](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/components/HiringManagerPortal.tsx): `src/app/components/HiringManagerPortal.tsx`
- [Candidate workspace](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/components/CandidatePortal.tsx): `src/app/components/CandidatePortal.tsx`
- [Candidate applications](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/components/candidate/CandidateHome.tsx): `src/app/components/candidate/CandidateHome.tsx`
- [API client](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/src/app/api.ts): `src/app/api.ts`

### Recruitment API

- [FastAPI application](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/main.py): `backend/main.py`
- [Job endpoints](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/jobs.py): `backend/app/routes/jobs.py`
- [Candidate endpoints](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/candidates.py): `backend/app/routes/candidates.py`
- [Agent endpoints](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/agents.py): `backend/app/routes/agents.py`
- [Settings endpoints](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/routes/settings.py): `backend/app/routes/settings.py`

### Agent workflow

- [Recruiting supervisor](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/graph.py): `backend/app/services/agents/graph.py`
- [Role requirements](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/requirement_agent.py): `backend/app/services/agents/requirement_agent.py`
- [Resume understanding](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/resume_agent.py): `backend/app/services/agents/resume_agent.py`
- [Bias analysis](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/bias_agent.py): `backend/app/services/agents/bias_agent.py`
- [Candidate matching](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/matching_agent.py): `backend/app/services/agents/matching_agent.py`
- [Interview screening](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/interview_agent.py): `backend/app/services/agents/interview_agent.py`
- [Candidate reports](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/report_agent.py): `backend/app/services/agents/report_agent.py`
- [Agent guardrails](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/agents/guardrails.py): `backend/app/services/agents/guardrails.py`

### Data and integrations

- [Supabase persistence](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/database.py): `backend/app/database.py`
- [LinkedIn profile sourcing](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/linkedin_profiles.py): `backend/app/services/linkedin_profiles.py`
- [Email delivery](https://github.com/xiaoming0313883/404-brain-not-found-recruiter/blob/main/backend/app/services/mailer.py): `backend/app/services/mailer.py`

### Other components

- **Hiring manager**
- **Candidate**
- **LLM service**
- **Supabase**
- **Apify**
- **SMTP service**

## Connections

- Hiring manager → Portal router: opens portal
- Candidate → Portal router: opens portal
- Portal router → Manager workspace: routes manager
- Portal router → Candidate workspace: routes candidate
- Candidate workspace → Candidate applications: shows applications
- Candidate applications → API client: requests jobs
- Manager workspace → API client: requests workspace data
- API client → FastAPI application: calls API
- FastAPI application → Job endpoints: registers routes
- FastAPI application → Candidate endpoints: registers routes
- FastAPI application → Agent endpoints: registers routes
- FastAPI application → Settings endpoints: registers routes
- FastAPI application → Supabase persistence: initializes
- Candidate endpoints → Recruiting supervisor: runs application tasks
- Agent endpoints → Recruiting supervisor: runs agent tasks
- Recruiting supervisor → Agent guardrails: checks inputs
- Recruiting supervisor → Role requirements: dispatches task
- Recruiting supervisor → Resume understanding: dispatches task
- Recruiting supervisor → Bias analysis: dispatches task
- Recruiting supervisor → Candidate matching: dispatches task
- Recruiting supervisor → Interview screening: dispatches task
- Recruiting supervisor → Candidate reports: dispatches task
- Recruiting supervisor → LLM service: requests reasoning
- Candidate endpoints → Supabase persistence: reads and writes
- Job endpoints → Supabase persistence: reads and writes
- Settings endpoints → Supabase persistence: reads and writes
- Candidate endpoints → LinkedIn profile sourcing: sources profiles
- LinkedIn profile sourcing → Apify: scrapes profiles
- Email delivery → SMTP service: delivers email
- Supabase persistence → Supabase: reads and writes
