# omkarshirol4-cloud/plit architecture

> Architecture diagram of the GitHub repository omkarshirol4-cloud/plit, 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/omkarshirol4-cloud/plit
- Repository: https://github.com/omkarshirol4-cloud/plit

## Overview

PROV serves candidates building profiles, applying, completing optional assessments and timed skill verification, and recruiters posting jobs and reviewing ranked applicants. Its core hiring evidence remains distinct: resume screening produces a component breakdown, while verification reports integrity signals separately for human review. The graph follows documented candidate and recruiter workflows and sampled API ownership; README-described ML stages are included, but their detailed wiring is limited to documentation because those Python sources were not sampled.

Main entry points: [`web/lib/db.ts`](https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/db.ts) (SQLite database), [`ml/verification/service.py`](https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/service.py) (Verification ML service), [`web/app/api/candidates/[id]/dashboard/route.ts`](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/candidates/%5Bid%5D/dashboard/route.ts) (Candidate dashboard), [`web/app/api/shortlist/route.ts`](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/shortlist/route.ts) (Run shortlist)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_candidate["Candidate experience"]
  node_candidates["Profiles and resumes<br/>[route.ts]"]
  node_applications["Job applications<br/>[route.ts]"]
  node_assessments["Skill assessments<br/>[assessments.ts]"]
  node_assessment_api["Assessment routes<br/>[route.ts]"]
  node_candidate_dashboard["Candidate dashboard<br/>[route.ts]"]
  node_achievements["Achievements<br/>[achievements.ts]"]
end

subgraph group_recruiter["Recruiter workflow"]
  node_jobs["Job listings<br/>[route.ts]"]
  node_shortlist_api["Run shortlist<br/>[route.ts]"]
  node_ranked_results["Ranked applicants<br/>[route.ts]"]
end

subgraph group_screening["Resume screening"]
  node_screening_client["Screening client<br/>[ml.ts]"]
  node_resume_service["Resume screening ML<br/>[service.py]"]
  node_resume_extraction["Resume text extraction<br/>[extract_text.py]"]
  node_resume_scoring["Skills and TF-IDF scoring<br/>[score.py]"]
end

subgraph group_verification["Integrity verification"]
  node_verification_upload["Clip upload route<br/>[route.ts]"]
  node_verification_client["Verification client<br/>[ml.ts]"]
  node_verification_service["Verification ML service<br/>[service.py]"]
  node_signal_analysis["Signal analysis<br/>[gaze.py]"]
  node_audio_analysis["Audio and lip-sync<br/>[audio.py]"]
  node_fusion["Signal fusion<br/>[fusion.py]"]
  node_session_ingest["Session ingestion<br/>[route.ts]"]
  node_session_read["Session lookup<br/>[route.ts]"]
end

subgraph group_platform["Platform services"]
  node_tokens["Token economy<br/>[tokens.ts]"]
  node_database[("SQLite database<br/>[db.ts]")]
end

node_candidate_actor(("Candidate"))
node_recruiter_actor(("Recruiter"))

node_candidate_actor -->|"creates profile"| node_candidates
node_candidate_actor -->|"browses roles"| node_jobs
node_candidate_actor -->|"submits application"| node_applications
node_applications -->|"writes application"| node_database
node_candidates -->|"stores profile"| node_database
node_jobs -->|"stores jobs"| node_database
node_candidate_actor -->|"requests assessments"| node_assessment_api
node_assessment_api -->|"lists assessments"| node_assessments
node_candidate_actor -->|"views progress"| node_candidate_dashboard
node_candidate_dashboard -->|"reads wallet"| node_tokens
node_candidate_dashboard -->|"lists achievements"| node_achievements
node_candidate_dashboard -->|"reads candidate state"| node_database
node_recruiter_actor -->|"posts role"| node_jobs
node_recruiter_actor -->|"runs screening"| node_shortlist_api
node_shortlist_api -->|"reads applicants"| node_database
node_shortlist_api -->|"sends applicant pool"| node_screening_client
node_screening_client -->|"requests ranking"| node_resume_service
node_resume_service -->|"extracts resume text"| node_resume_extraction
node_resume_service -->|"scores applicants"| node_resume_scoring
node_shortlist_api -->|"stores ranked rows"| node_database
node_recruiter_actor -->|"reviews shortlist"| node_ranked_results
node_ranked_results -->|"reads ranking and signals"| node_database
node_candidate_actor -->|"uploads recorded clip"| node_verification_upload
node_verification_upload -->|"forwards clip"| node_verification_client
node_verification_client -->|"requests analysis"| node_verification_service
node_verification_service -->|"analyzes gaze"| node_signal_analysis
node_verification_service -->|"analyzes audio and lips"| node_audio_analysis
node_verification_service -->|"fuses signals"| node_fusion
node_verification_service -->|"posts result"| node_session_ingest
node_session_ingest -->|"stores session and status"| node_database
node_verification_upload -->|"reads stored session"| node_database
node_candidate_actor -->|"checks verification"| node_session_read
node_session_read -->|"reads session"| node_database

click node_candidates "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/candidates/route.ts"
click node_jobs "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/jobs/route.ts"
click node_applications "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/applications/route.ts"
click node_assessments "https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/assessments.ts"
click node_assessment_api "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/assessments/route.ts"
click node_candidate_dashboard "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/candidates/%5Bid%5D/dashboard/route.ts"
click node_achievements "https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/achievements.ts"
click node_tokens "https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/tokens.ts"
click node_shortlist_api "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/shortlist/route.ts"
click node_ranked_results "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/jobs/%5Bid%5D/shortlist/route.ts"
click node_screening_client "https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/ml.ts"
click node_resume_service "https://github.com/omkarshirol4-cloud/plit/blob/main/resume_screening/service.py"
click node_resume_extraction "https://github.com/omkarshirol4-cloud/plit/blob/main/resume_screening/extract_text.py"
click node_resume_scoring "https://github.com/omkarshirol4-cloud/plit/blob/main/resume_screening/score.py"
click node_verification_upload "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/applications/%5Bid%5D/verify/route.ts"
click node_verification_client "https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/ml.ts"
click node_verification_service "https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/service.py"
click node_signal_analysis "https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/gaze.py"
click node_audio_analysis "https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/audio.py"
click node_fusion "https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/fusion.py"
click node_session_ingest "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/verification-sessions/route.ts"
click node_session_read "https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/verification-sessions/%5BapplicationId%5D/route.ts"
click node_database "https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/db.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_candidates,node_applications,node_assessments,node_assessment_api,node_candidate_dashboard,node_achievements toneBlue
class node_jobs,node_shortlist_api,node_ranked_results toneAmber
class node_screening_client,node_resume_service,node_resume_extraction,node_resume_scoring toneMint
class node_verification_upload,node_verification_client,node_verification_service,node_signal_analysis,node_audio_analysis,node_fusion,node_session_ingest,node_session_read toneRose
class node_tokens,node_database,node_candidate_actor,node_recruiter_actor toneIndigo
```

## Components

### Candidate experience

- [Profiles and resumes](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/candidates/route.ts): `web/app/api/candidates/route.ts`
- [Job applications](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/applications/route.ts): `web/app/api/applications/route.ts`
- [Skill assessments](https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/assessments.ts): `web/lib/assessments.ts`
- [Assessment routes](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/assessments/route.ts): `web/app/api/assessments/route.ts`
- [Candidate dashboard](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/candidates/%5Bid%5D/dashboard/route.ts): `web/app/api/candidates/[id]/dashboard/route.ts`
- [Achievements](https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/achievements.ts): `web/lib/achievements.ts`

### Recruiter workflow

- [Job listings](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/jobs/route.ts): `web/app/api/jobs/route.ts`
- [Run shortlist](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/shortlist/route.ts): `web/app/api/shortlist/route.ts`
- [Ranked applicants](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/jobs/%5Bid%5D/shortlist/route.ts): `web/app/api/jobs/[id]/shortlist/route.ts`

### Resume screening

- [Screening client](https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/ml.ts): `web/lib/ml.ts`
- [Resume screening ML](https://github.com/omkarshirol4-cloud/plit/blob/main/resume_screening/service.py): `resume_screening/service.py`
- [Resume text extraction](https://github.com/omkarshirol4-cloud/plit/blob/main/resume_screening/extract_text.py): `resume_screening/extract_text.py`
- [Skills and TF-IDF scoring](https://github.com/omkarshirol4-cloud/plit/blob/main/resume_screening/score.py): `resume_screening/score.py`

### Integrity verification

- [Clip upload route](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/applications/%5Bid%5D/verify/route.ts): `web/app/api/applications/[id]/verify/route.ts`
- [Verification client](https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/ml.ts): `web/lib/ml.ts`
- [Verification ML service](https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/service.py): `ml/verification/service.py`
- [Signal analysis](https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/gaze.py): `ml/verification/gaze.py`
- [Audio and lip-sync](https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/audio.py): `ml/verification/audio.py`
- [Signal fusion](https://github.com/omkarshirol4-cloud/plit/blob/main/ml/verification/fusion.py): `ml/verification/fusion.py`
- [Session ingestion](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/verification-sessions/route.ts): `web/app/api/verification-sessions/route.ts`
- [Session lookup](https://github.com/omkarshirol4-cloud/plit/blob/main/web/app/api/verification-sessions/%5BapplicationId%5D/route.ts): `web/app/api/verification-sessions/[applicationId]/route.ts`

### Platform services

- [Token economy](https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/tokens.ts): `web/lib/tokens.ts`
- [SQLite database](https://github.com/omkarshirol4-cloud/plit/blob/main/web/lib/db.ts): `web/lib/db.ts`

### Other components

- **Candidate**
- **Recruiter**

## Connections

- Candidate → Profiles and resumes: creates profile
- Candidate → Job listings: browses roles
- Candidate → Job applications: submits application
- Job applications → SQLite database: writes application
- Profiles and resumes → SQLite database: stores profile
- Job listings → SQLite database: stores jobs
- Candidate → Assessment routes: requests assessments
- Assessment routes → Skill assessments: lists assessments
- Candidate → Candidate dashboard: views progress
- Candidate dashboard → Token economy: reads wallet
- Candidate dashboard → Achievements: lists achievements
- Candidate dashboard → SQLite database: reads candidate state
- Recruiter → Job listings: posts role
- Recruiter → Run shortlist: runs screening
- Run shortlist → SQLite database: reads applicants
- Run shortlist → Screening client: sends applicant pool
- Screening client → Resume screening ML: requests ranking
- Resume screening ML → Resume text extraction: extracts resume text
- Resume screening ML → Skills and TF-IDF scoring: scores applicants
- Run shortlist → SQLite database: stores ranked rows
- Recruiter → Ranked applicants: reviews shortlist
- Ranked applicants → SQLite database: reads ranking and signals
- Candidate → Clip upload route: uploads recorded clip
- Clip upload route → Verification client: forwards clip
- Verification client → Verification ML service: requests analysis
- Verification ML service → Signal analysis: analyzes gaze
- Verification ML service → Audio and lip-sync: analyzes audio and lips
- Verification ML service → Signal fusion: fuses signals
- Verification ML service → Session ingestion: posts result
- Session ingestion → SQLite database: stores session and status
- Clip upload route → SQLite database: reads stored session
- Candidate → Session lookup: checks verification
- Session lookup → SQLite database: reads session
