# sarthaksingh2005/ai-resume-analyser architecture

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

- Interactive diagram: https://gitdiagram.com/sarthaksingh2005/ai-resume-analyser
- Repository: https://github.com/sarthaksingh2005/ai-resume-analyser

## Overview

Resumind is a browser-based resume analyzer: users provide job details and a PDF, the app stores the original and a rendered image, requests AI feedback, saves the analysis, and navigates to a resume result route. Authentication and the dashboard/result experience are represented by the route structure, but their implementations were not sampled, so their internal wiring is intentionally limited. The inspected upload code establishes the analysis flow; Puter supplies authentication, file storage, key-value storage, and AI capabilities.

Main entry points: [`app/routes/upload.tsx`](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/upload.tsx) (Upload route), [`app/routes/resume.tsx`](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/resume.tsx) (Resume route), [`app/lib/puter.ts`](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/lib/puter.ts) (Puter client store), [`app/routes/home.tsx`](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/home.tsx) (Dashboard route)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_journey["User journey"]
  node_home["Dashboard route<br/>[home.tsx]"]
  node_auth["Authentication route<br/>[auth.tsx]"]
  node_upload["Upload route<br/>[upload.tsx]"]
  node_uploader["PDF uploader<br/>[FileUploader.tsx]"]
  node_resume["Resume route<br/>[resume.tsx]"]
  node_root["App initialization<br/>[root.tsx]"]
end

subgraph group_analysis["Resume analysis"]
  node_pdf["PDF rendering<br/>[pdf2img.ts]"]
  node_instructions["Analysis prompt<br/>[index.ts]"]
end

subgraph group_services["External services"]
  node_puter["Puter client store<br/>[puter.ts]"]
  node_puter_service{{"Puter platform"}}
  node_file_store[("Puter file storage")]
  node_kv_store[("Puter key-value store")]
  node_ai_service{{"Puter AI"}}
end

subgraph group_results["Feedback display"]
  node_summary["Feedback summary<br/>[Summary.tsx]"]
  node_ats["ATS feedback<br/>[ATS.tsx]"]
  node_details["Feedback details<br/>[Details.tsx]"]
  node_score_badge["Score badge<br/>[ScoreBadge.tsx]"]
  node_score_circle["Score circle<br/>[ScoreCircle.tsx]"]
  node_score_gauge["Score gauge<br/>[ScoreGauge.tsx]"]
  node_resume_card["Resume card<br/>[ResumeCard.tsx]"]
  node_accordion["Feedback accordion<br/>[Accordion.tsx]"]
end

node_user(("Resume applicant"))

node_user -->|"opens"| node_home
node_user -->|"opens"| node_auth
node_user -->|"submits details"| node_upload
node_user -->|"views result"| node_resume
node_root -->|"initializes"| node_puter
node_auth -->|"uses auth"| node_puter
node_upload -->|"selects PDF"| node_uploader
node_upload -->|"uploads PDF"| node_puter
node_upload -->|"converts PDF"| node_pdf
node_upload -->|"uploads image"| node_puter
node_upload -->|"prepares prompt"| node_instructions
node_upload -->|"requests analysis"| node_puter
node_upload -->|"saves analysis"| node_puter
node_upload -->|"navigates"| node_resume
node_puter -->|"calls"| node_puter_service
node_puter_service -->|"reads/writes files"| node_file_store
node_puter_service -->|"reads/writes records"| node_kv_store
node_puter_service -->|"runs analysis"| node_ai_service
node_resume -->|"renders"| node_summary
node_resume -->|"renders"| node_ats
node_resume -->|"renders"| node_details
node_resume -->|"renders"| node_score_badge
node_resume -->|"renders"| node_score_circle
node_resume -->|"renders"| node_score_gauge
node_home -->|"lists resumes"| node_resume_card
node_resume -->|"presents details"| node_accordion

click node_home "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/home.tsx"
click node_auth "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/auth.tsx"
click node_upload "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/upload.tsx"
click node_uploader "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/FileUploader.tsx"
click node_resume "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/resume.tsx"
click node_root "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/root.tsx"
click node_pdf "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/lib/pdf2img.ts"
click node_instructions "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/constants/index.ts"
click node_puter "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/lib/puter.ts"
click node_summary "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/Summary.tsx"
click node_ats "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ATS.tsx"
click node_details "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/Details.tsx"
click node_score_badge "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ScoreBadge.tsx"
click node_score_circle "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ScoreCircle.tsx"
click node_score_gauge "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ScoreGauge.tsx"
click node_resume_card "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ResumeCard.tsx"
click node_accordion "https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/Accordion.tsx"

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_home,node_auth,node_upload,node_uploader,node_resume,node_root toneBlue
class node_pdf,node_instructions toneAmber
class node_puter,node_puter_service,node_file_store,node_kv_store,node_ai_service toneMint
class node_summary,node_ats,node_details,node_score_badge,node_score_circle,node_score_gauge,node_resume_card,node_accordion toneRose
class node_user toneIndigo
```

## Components

### User journey

- [Dashboard route](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/home.tsx): `app/routes/home.tsx`
- [Authentication route](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/auth.tsx): `app/routes/auth.tsx`
- [Upload route](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/upload.tsx): `app/routes/upload.tsx`
- [PDF uploader](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/FileUploader.tsx): `app/components/FileUploader.tsx`
- [Resume route](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/routes/resume.tsx): `app/routes/resume.tsx`
- [App initialization](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/root.tsx): `app/root.tsx`

### Resume analysis

- [PDF rendering](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/lib/pdf2img.ts): `app/lib/pdf2img.ts`
- [Analysis prompt](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/constants/index.ts): `constants/index.ts`

### External services

- [Puter client store](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/lib/puter.ts): `app/lib/puter.ts`
- **Puter platform**
- **Puter file storage**
- **Puter key-value store**
- **Puter AI**

### Feedback display

- [Feedback summary](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/Summary.tsx): `app/components/Summary.tsx`
- [ATS feedback](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ATS.tsx): `app/components/ATS.tsx`
- [Feedback details](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/Details.tsx): `app/components/Details.tsx`
- [Score badge](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ScoreBadge.tsx): `app/components/ScoreBadge.tsx`
- [Score circle](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ScoreCircle.tsx): `app/components/ScoreCircle.tsx`
- [Score gauge](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ScoreGauge.tsx): `app/components/ScoreGauge.tsx`
- [Resume card](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/ResumeCard.tsx): `app/components/ResumeCard.tsx`
- [Feedback accordion](https://github.com/sarthaksingh2005/ai-resume-analyser/blob/main/app/components/Accordion.tsx): `app/components/Accordion.tsx`

### Other components

- **Resume applicant**

## Connections

- Resume applicant → Dashboard route: opens
- Resume applicant → Authentication route: opens
- Resume applicant → Upload route: submits details
- Resume applicant → Resume route: views result
- App initialization → Puter client store: initializes
- Authentication route → Puter client store: uses auth
- Upload route → PDF uploader: selects PDF
- Upload route → Puter client store: uploads PDF
- Upload route → PDF rendering: converts PDF
- Upload route → Puter client store: uploads image
- Upload route → Analysis prompt: prepares prompt
- Upload route → Puter client store: requests analysis
- Upload route → Puter client store: saves analysis
- Upload route → Resume route: navigates
- Puter client store → Puter platform: calls
- Puter platform → Puter file storage: reads/writes files
- Puter platform → Puter key-value store: reads/writes records
- Puter platform → Puter AI: runs analysis
- Resume route → Feedback summary: renders
- Resume route → ATS feedback: renders
- Resume route → Feedback details: renders
- Resume route → Score badge: renders
- Resume route → Score circle: renders
- Resume route → Score gauge: renders
- Dashboard route → Resume card: lists resumes
- Resume route → Feedback accordion: presents details
