# sathishlella/ats-ai-resume-builder architecture

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

- Interactive diagram: https://gitdiagram.com/sathishlella/ats-ai-resume-builder
- Repository: https://github.com/sathishlella/ats-ai-resume-builder
- Video tour (about a minute): https://gitdiagram.com/sathishlella/ats-ai-resume-builder/video

## Overview

ATS AI Resume Builder turns an uploaded or pasted resume and a job description into match insights and tailored resume or cover-letter drafts, with DOCX/PDF downloads. The dashboard is the main user workflow; sampled code confirms its score, aggressive-generation, and export requests, while the README documents the broader capabilities. Parsing, AI generation, scoring, and export are distinct stages. Some UI-to-route wiring and unsampled subsystems are represented only where supported by the tree or documentation.

Main entry points: [`app/dashboard/page.tsx`](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/dashboard/page.tsx) (Resume dashboard), [`app/api/generate/aggressive/route.ts`](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/generate/aggressive/route.ts) (Aggressive generation), [`app/api/generate/route.ts`](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/generate/route.ts) (Resume and cover generation), [`lib/ai.ts`](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/ai.ts) (AI API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_dashboard["Resume dashboard<br/>[page.tsx]"]
  node_upload["Resume upload<br/>[UploadDropzone.tsx]"]
  node_editor["Resume editor<br/>[Editor.tsx]"]
  node_keyword_hints["Keyword insights<br/>[KeywordHints.tsx]"]
  node_score_card["Match score card<br/>[MatchScoreCard.tsx]"]
  node_hero["3D landing visuals<br/>[ThreeHero.tsx]"]
  node_canvas["3D canvas"]
end

subgraph group_analysis["Resume analysis"]
  node_parse_api["Resume parser<br/>[route.ts]"]
  node_score_api["Match scoring<br/>[route.ts]"]
  node_scoring_lib["Scoring logic<br/>[scoring.ts]"]
end

subgraph group_generation["AI generation"]
  node_generate_api["Resume and cover generation<br/>[route.ts]"]
  node_aggressive_api["Aggressive generation<br/>[route.ts]"]
  node_keywords["JD keyword extraction<br/>[keywords.ts]"]
  node_ai_client["AI API client<br/>[ai.ts]"]
end

subgraph group_output["Document export"]
  node_docx_api["DOCX export<br/>[route.ts]"]
  node_templates["DOCX templates<br/>[templates.ts]"]
  node_pdf_api["PDF export<br/>[route.ts]"]
  node_pdf_lib["PDF formatting<br/>[pdf.ts]"]
end

subgraph group_operations["Usage and logging"]
  node_email_log["Resume email logging<br/>[emailLog.ts]"]
  node_email_stats["Email statistics<br/>[route.ts]"]
  node_usage_lib["Usage tracking<br/>[usage.ts]"]
  node_usage_stats["Usage statistics<br/>[route.ts]"]
end

node_user(("Job seeker"))
node_ai_provider{{"OpenAI-compatible AI"}}
node_blob_store[("Vercel Blob")]

node_user -->|"uses"| node_dashboard
node_dashboard -->|"renders"| node_upload
node_dashboard -->|"renders"| node_editor
node_dashboard -->|"renders"| node_score_card
node_dashboard -->|"renders"| node_keyword_hints
node_dashboard -->|"landing visuals"| node_hero
node_hero -->|"renders"| node_canvas
node_dashboard -->|"requests score"| node_score_api
node_score_api -->|"uses"| node_scoring_lib
node_dashboard -->|"requests generation"| node_aggressive_api
node_aggressive_api -->|"extracts terms"| node_keywords
node_aggressive_api -->|"requests completion"| node_ai_client
node_dashboard -->|"generates drafts"| node_generate_api
node_generate_api -->|"extracts terms"| node_keywords
node_generate_api -->|"requests completion"| node_ai_client
node_ai_client -->|"calls"| node_ai_provider
node_upload -->|"submits resume"| node_parse_api
node_parse_api -->|"logs extraction"| node_email_log
node_dashboard -->|"requests DOCX"| node_docx_api
node_docx_api -->|"builds document"| node_templates
node_dashboard -->|"requests PDF"| node_pdf_api
node_pdf_api -->|"uses formatting"| node_pdf_lib
node_aggressive_api -->|"logs usage"| node_usage_lib
node_usage_stats -->|"reads stats"| node_usage_lib
node_email_stats -->|"reads records"| node_blob_store
node_email_log -->|"writes records"| node_blob_store

click node_dashboard "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/dashboard/page.tsx"
click node_upload "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/UploadDropzone.tsx"
click node_editor "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/Editor.tsx"
click node_keyword_hints "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/KeywordHints.tsx"
click node_score_card "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/MatchScoreCard.tsx"
click node_hero "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/ThreeHero.tsx"
click node_canvas "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/ThreeVariantCanvas.tsx"
click node_parse_api "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/parse/route.ts"
click node_score_api "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/score/route.ts"
click node_scoring_lib "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/scoring.ts"
click node_generate_api "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/generate/route.ts"
click node_aggressive_api "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/generate/aggressive/route.ts"
click node_keywords "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/keywords.ts"
click node_ai_client "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/ai.ts"
click node_docx_api "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/export/docx/route.ts"
click node_templates "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/templates.ts"
click node_pdf_api "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/export/pdf/route.ts"
click node_pdf_lib "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/pdf.ts"
click node_email_log "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/emailLog.ts"
click node_email_stats "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/email/stats/route.ts"
click node_usage_lib "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/usage.ts"
click node_usage_stats "https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/usage/stats/route.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_dashboard,node_upload,node_editor,node_keyword_hints,node_score_card,node_hero,node_canvas toneBlue
class node_parse_api,node_score_api,node_scoring_lib,node_blob_store toneAmber
class node_generate_api,node_aggressive_api,node_keywords,node_ai_client toneMint
class node_docx_api,node_templates,node_pdf_api,node_pdf_lib toneRose
class node_email_log,node_email_stats,node_usage_lib,node_usage_stats,node_user,node_ai_provider toneIndigo
```

## Components

### User experience

- [Resume dashboard](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`
- [Resume upload](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/UploadDropzone.tsx): `components/UploadDropzone.tsx`
- [Resume editor](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/Editor.tsx): `components/Editor.tsx`
- [Keyword insights](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/KeywordHints.tsx): `components/KeywordHints.tsx`
- [Match score card](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/MatchScoreCard.tsx): `components/MatchScoreCard.tsx`
- [3D landing visuals](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/ThreeHero.tsx): `components/ThreeHero.tsx`
- [3D canvas](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/components/ThreeVariantCanvas.tsx): `components/ThreeVariantCanvas.tsx`

### Resume analysis

- [Resume parser](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/parse/route.ts): `app/api/parse/route.ts`
- [Match scoring](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/score/route.ts): `app/api/score/route.ts`
- [Scoring logic](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/scoring.ts): `lib/scoring.ts`

### AI generation

- [Resume and cover generation](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/generate/route.ts): `app/api/generate/route.ts`
- [Aggressive generation](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/generate/aggressive/route.ts): `app/api/generate/aggressive/route.ts`
- [JD keyword extraction](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/keywords.ts): `lib/keywords.ts`
- [AI API client](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/ai.ts): `lib/ai.ts`

### Document export

- [DOCX export](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/export/docx/route.ts): `app/api/export/docx/route.ts`
- [DOCX templates](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/templates.ts): `lib/templates.ts`
- [PDF export](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/export/pdf/route.ts): `app/api/export/pdf/route.ts`
- [PDF formatting](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/pdf.ts): `lib/pdf.ts`

### Usage and logging

- [Resume email logging](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/emailLog.ts): `lib/emailLog.ts`
- [Email statistics](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/email/stats/route.ts): `app/api/email/stats/route.ts`
- [Usage tracking](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/lib/usage.ts): `lib/usage.ts`
- [Usage statistics](https://github.com/sathishlella/ats-ai-resume-builder/blob/main/app/api/usage/stats/route.ts): `app/api/usage/stats/route.ts`

### Other components

- **Job seeker**
- **OpenAI-compatible AI**
- **Vercel Blob**

## Connections

- Job seeker → Resume dashboard: uses
- Resume dashboard → Resume upload: renders
- Resume dashboard → Resume editor: renders
- Resume dashboard → Match score card: renders
- Resume dashboard → Keyword insights: renders
- Resume dashboard → 3D landing visuals: landing visuals
- 3D landing visuals → 3D canvas: renders
- Resume dashboard → Match scoring: requests score
- Match scoring → Scoring logic: uses
- Resume dashboard → Aggressive generation: requests generation
- Aggressive generation → JD keyword extraction: extracts terms
- Aggressive generation → AI API client: requests completion
- Resume dashboard → Resume and cover generation: generates drafts
- Resume and cover generation → JD keyword extraction: extracts terms
- Resume and cover generation → AI API client: requests completion
- AI API client → OpenAI-compatible AI: calls
- Resume upload → Resume parser: submits resume
- Resume parser → Resume email logging: logs extraction
- Resume dashboard → DOCX export: requests DOCX
- DOCX export → DOCX templates: builds document
- Resume dashboard → PDF export: requests PDF
- PDF export → PDF formatting: uses formatting
- Aggressive generation → Usage tracking: logs usage
- Usage statistics → Usage tracking: reads stats
- Email statistics → Vercel Blob: reads records
- Resume email logging → Vercel Blob: writes records
