# adityaonam/resume_ranking_system architecture

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

- Interactive diagram: https://gitdiagram.com/adityaonam/resume_ranking_system
- Repository: https://github.com/adityaonam/resume_ranking_system

## Overview

Resume Ranker is a candidate-resume assessment and recruiter-facing matching application. A candidate signs in, uploads a resume, and receives parsed profile data, ATS scoring and feedback, and company-specific eligibility and rankings; recruiters can browse candidates, company matches, and leaderboards. Company records can also be added from job descriptions with AI-assisted extraction. The README documents these capabilities and the two-stage matching design; sampled source confirms the app shell, authentication, API setup, ranking logic, and ML/LLM service behavior. Some endpoint-to-service wiring is represented at the documented workflow level because endpoint source was not sampled.

Main entry points: [`server/app/api/endpoints/resumes.py`](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/api/endpoints/resumes.py) (Resume endpoints), [`client/src/App.jsx`](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/App.jsx) (React app shell), [`client/src/services/api.js`](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/services/api.js) (API client), [`server/app/main.py`](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/main.py) (FastAPI app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Candidate and recruiter UI"]
  node_app["React app shell<br/>[App.jsx]"]
  node_authui["Sign-in page<br/>[AuthPage.jsx]"]
  node_authctx["Auth context<br/>[AuthContext.jsx]"]
  node_dashboard["Upload dashboard<br/>[Dashboard.jsx]"]
  node_results["Resume results"]
  node_atsui["ATS dashboard<br/>[ATSDashboard.jsx]"]
  node_leaderboard["Leaderboard<br/>[Leaderboard.jsx]"]
  node_companiesui["Company directory"]
end

subgraph group_api["API and access"]
  node_clientapi["API client<br/>[api.js]"]
  node_server["FastAPI app<br/>[main.py]"]
  node_resumeapi["Resume endpoints<br/>[resumes.py]"]
  node_companyapi["Company endpoints<br/>[companies.py]"]
  node_analyticsapi["Analytics endpoints<br/>[analytics.py]"]
end

subgraph group_resume["Resume assessment"]
  node_parser["Resume parser<br/>[resume_parser.py]"]
  node_ats["ATS analysis<br/>[ats_analyzer.py]"]
  node_scorer["ATS scoring<br/>[ats_scorer.py]"]
end

subgraph group_matching["Company matching"]
  node_embed["Embedding engine"]
  node_rank["Ranking service<br/>[rank_service.py]"]
  node_matcher["Company matcher<br/>[company_matcher.py]"]
end

subgraph group_data["Persistence and integrations"]
  node_llm["LLM service<br/>[llm_service.py]"]
  node_github["GitHub enrichment<br/>[github_service.py]"]
  node_database[("Supabase data store<br/>[database.py]")]
end

node_candidate(("Candidate"))
node_recruiter(("Recruiter"))
node_supaauth{{"Supabase Auth"}}
node_supastore[("Supabase Storage")]
node_groq{{"Groq LLM API"}}
node_githubapi{{"GitHub API"}}

node_candidate -->|"uses"| node_app
node_recruiter -->|"uses"| node_app
node_app -->|"routes"| node_authui
node_authui -->|"requests sign-in"| node_authctx
node_authctx -->|"authenticates"| node_supaauth
node_app -->|"routes"| node_dashboard
node_app -->|"routes"| node_results
node_app -->|"routes"| node_atsui
node_app -->|"routes"| node_leaderboard
node_app -->|"routes"| node_companiesui
node_dashboard -->|"submits resume"| node_clientapi
node_results -->|"requests results"| node_clientapi
node_atsui -->|"requests data"| node_clientapi
node_leaderboard -->|"requests rankings"| node_clientapi
node_companiesui -->|"requests companies"| node_clientapi
node_clientapi -->|"sends API requests"| node_server
node_server -->|"dispatches"| node_resumeapi
node_server -->|"dispatches"| node_companyapi
node_server -->|"dispatches"| node_analyticsapi
node_resumeapi -->|"parses resume"| node_parser
node_parser -->|"extracts structure"| node_llm
node_resumeapi -->|"analyzes resume"| node_ats
node_ats -->|"scores resume"| node_scorer
node_resumeapi -->|"embeds resume"| node_embed
node_resumeapi -->|"generates rankings"| node_rank
node_rank -->|"scores matches"| node_matcher
node_rank -->|"uses embeddings"| node_embed
node_rank -->|"reads and writes rankings"| node_database
node_resumeapi -->|"stores resume data"| node_database
node_companyapi -->|"extracts job details"| node_llm
node_companyapi -->|"reads and writes companies"| node_database
node_analyticsapi -->|"reads analytics data"| node_database
node_resumeapi -->|"stores uploads"| node_supastore
node_llm -.->|"requests inference"| node_groq
node_resumeapi -.->|"enriches candidate"| node_github
node_github -.->|"fetches public signals"| node_githubapi

click node_app "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/App.jsx"
click node_authui "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/AuthPage.jsx"
click node_authctx "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/contexts/AuthContext.jsx"
click node_dashboard "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/components/Dashboard/Dashboard.jsx"
click node_results "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/ResumeResultPage.jsx"
click node_atsui "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/ATSDashboard.jsx"
click node_leaderboard "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/Leaderboard.jsx"
click node_companiesui "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/components/Company/CompaniesShowcase.jsx"
click node_clientapi "https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/services/api.js"
click node_server "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/main.py"
click node_resumeapi "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/api/endpoints/resumes.py"
click node_companyapi "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/api/endpoints/companies.py"
click node_analyticsapi "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/api/endpoints/analytics.py"
click node_parser "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/resume_parser.py"
click node_ats "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/ats_analyzer.py"
click node_scorer "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/ats_scorer.py"
click node_embed "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/embedding_engine.py"
click node_rank "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/rank_service.py"
click node_matcher "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/company_matcher.py"
click node_llm "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/llm_service.py"
click node_github "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/github_service.py"
click node_database "https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/core/database.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_authui,node_authctx,node_dashboard,node_results,node_atsui,node_leaderboard,node_companiesui toneBlue
class node_clientapi,node_server,node_resumeapi,node_companyapi,node_analyticsapi,node_supastore toneAmber
class node_parser,node_ats,node_scorer,node_groq,node_githubapi toneMint
class node_embed,node_rank,node_matcher toneRose
class node_llm,node_github,node_database,node_candidate,node_recruiter,node_supaauth toneIndigo
```

## Components

### Candidate and recruiter UI

- [React app shell](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Sign-in page](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/AuthPage.jsx): `client/src/pages/AuthPage.jsx`
- [Auth context](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/contexts/AuthContext.jsx): `client/src/contexts/AuthContext.jsx`
- [Upload dashboard](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/components/Dashboard/Dashboard.jsx): `client/src/components/Dashboard/Dashboard.jsx`
- [Resume results](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/ResumeResultPage.jsx): `client/src/pages/ResumeResultPage.jsx`
- [ATS dashboard](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/ATSDashboard.jsx): `client/src/pages/ATSDashboard.jsx`
- [Leaderboard](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/pages/Leaderboard.jsx): `client/src/pages/Leaderboard.jsx`
- [Company directory](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/components/Company/CompaniesShowcase.jsx): `client/src/components/Company/CompaniesShowcase.jsx`

### API and access

- [API client](https://github.com/adityaonam/resume_ranking_system/blob/main/client/src/services/api.js): `client/src/services/api.js`
- [FastAPI app](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/main.py): `server/app/main.py`
- [Resume endpoints](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/api/endpoints/resumes.py): `server/app/api/endpoints/resumes.py`
- [Company endpoints](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/api/endpoints/companies.py): `server/app/api/endpoints/companies.py`
- [Analytics endpoints](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/api/endpoints/analytics.py): `server/app/api/endpoints/analytics.py`

### Resume assessment

- [Resume parser](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/resume_parser.py): `server/app/services/resume_parser.py`
- [ATS analysis](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/ats_analyzer.py): `server/app/services/ats_analyzer.py`
- [ATS scoring](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/ats_scorer.py): `server/app/services/ats_scorer.py`

### Company matching

- [Embedding engine](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/embedding_engine.py): `server/app/services/embedding_engine.py`
- [Ranking service](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/rank_service.py): `server/app/services/rank_service.py`
- [Company matcher](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/company_matcher.py): `server/app/services/company_matcher.py`

### Persistence and integrations

- [LLM service](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/llm_service.py): `server/app/services/llm_service.py`
- [GitHub enrichment](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/services/github_service.py): `server/app/services/github_service.py`
- [Supabase data store](https://github.com/adityaonam/resume_ranking_system/blob/main/server/app/core/database.py): `server/app/core/database.py`

### Other components

- **Candidate**
- **Recruiter**
- **Supabase Auth**
- **Supabase Storage**
- **Groq LLM API**
- **GitHub API**

## Connections

- Candidate → React app shell: uses
- Recruiter → React app shell: uses
- React app shell → Sign-in page: routes
- Sign-in page → Auth context: requests sign-in
- Auth context → Supabase Auth: authenticates
- React app shell → Upload dashboard: routes
- React app shell → Resume results: routes
- React app shell → ATS dashboard: routes
- React app shell → Leaderboard: routes
- React app shell → Company directory: routes
- Upload dashboard → API client: submits resume
- Resume results → API client: requests results
- ATS dashboard → API client: requests data
- Leaderboard → API client: requests rankings
- Company directory → API client: requests companies
- API client → FastAPI app: sends API requests
- FastAPI app → Resume endpoints: dispatches
- FastAPI app → Company endpoints: dispatches
- FastAPI app → Analytics endpoints: dispatches
- Resume endpoints → Resume parser: parses resume
- Resume parser → LLM service: extracts structure
- Resume endpoints → ATS analysis: analyzes resume
- ATS analysis → ATS scoring: scores resume
- Resume endpoints → Embedding engine: embeds resume
- Resume endpoints → Ranking service: generates rankings
- Ranking service → Company matcher: scores matches
- Ranking service → Embedding engine: uses embeddings
- Ranking service → Supabase data store: reads and writes rankings
- Resume endpoints → Supabase data store: stores resume data
- Company endpoints → LLM service: extracts job details
- Company endpoints → Supabase data store: reads and writes companies
- Analytics endpoints → Supabase data store: reads analytics data
- Resume endpoints → Supabase Storage: stores uploads
- LLM service → Groq LLM API: requests inference
- Resume endpoints → GitHub enrichment: enriches candidate
- GitHub enrichment → GitHub API: fetches public signals
