# theakashr/ai-resume-builder architecture

> Architecture diagram of the GitHub repository theakashr/ai-resume-builder, 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/theakashr/ai-resume-builder
- Repository: https://github.com/theakashr/ai-resume-builder

## Overview

ResumeAI is a career-preparation platform whose main workflow is to build and save a resume, compare it with a target job, and use AI feedback to improve it; users can also practice interviews and access career coaching. The Next.js pages call API routes, which own validation, domain work, and persistence or external-service calls. The README documents broader capabilities, including PDF export, subscriptions, and speech analytics; these are represented at subsystem level where implementation was not sampled. The source excerpts show separate Firestore and Supabase-backed paths, so the graph keeps those stores distinct.

Main entry points: [`resume-app/src/app/api/ai/resume-assistant/route.ts`](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/ai/resume-assistant/route.ts) (Assistant API), [`resume-app/src/lib/auth/get-session.ts`](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/auth/get-session.ts) (Session Auth), [`resume-app/src/app/api/resumes/route.ts`](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/resumes/route.ts) (Resume API), [`resume-app/src/app/api/ats/analyze/route.ts`](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/ats/analyze/route.ts) (ATS Analysis API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User Experience"]
  node_dashboard["Career Dashboard<br/>[page.tsx]"]
  node_builder["Resume Builder<br/>[page.tsx]"]
  node_atsui["ATS Optimizer<br/>[page.tsx]"]
  node_interviewui["Interview Practice<br/>[page.tsx]"]
  node_assistantui["Career Assistant<br/>[page.tsx]"]
  node_templatesui["Template Browser<br/>[page.tsx]"]
end

subgraph group_api["Application API"]
  node_resumeapi["Resume API<br/>[route.ts]"]
  node_resumeitemapi["Resume Operations<br/>[route.ts]"]
  node_atsapi["ATS Analysis API<br/>[route.ts]"]
  node_interviewapi["Interview API<br/>[route.ts]"]
  node_assistantapi["Assistant API<br/>[route.ts]"]
  node_templateapi["Template API<br/>[route.ts]"]
  node_stripehook["Stripe Webhook<br/>[route.ts]"]
end

subgraph group_domain["Career Services"]
  node_atsengine["ATS Analyzer<br/>[analyzer.ts]"]
  node_interviewengine["Interview Engine<br/>[engine.ts]"]
  node_aiprompts["Prompt Builder<br/>[prompts.ts]"]
  node_aiprovider["AI Provider<br/>[provider.ts]"]
  node_pdf["PDF Export<br/>[pdf-generator.ts]"]
end

subgraph group_data["Identity and Data"]
  node_session["Session Auth<br/>[get-session.ts]"]
  node_firestore[("Cloud Firestore<br/>[firestore.ts]")]
  node_supabase[("Supabase Data<br/>[server.ts]")]
end

node_jobseeker(("Job Seeker"))
node_gemini{{"Gemini API"}}
node_stripe{{"Stripe"}}

node_jobseeker -->|"uses"| node_dashboard
node_jobseeker -->|"edits resume"| node_builder
node_jobseeker -->|"requests match"| node_atsui
node_jobseeker -->|"practices"| node_interviewui
node_jobseeker -->|"asks guidance"| node_assistantui
node_jobseeker -->|"browses"| node_templatesui
node_builder -->|"saves resume"| node_resumeapi
node_resumeapi -->|"authenticates"| node_session
node_resumeapi -->|"reads/writes"| node_firestore
node_builder -->|"updates resume"| node_resumeitemapi
node_resumeitemapi -->|"authenticates"| node_session
node_resumeitemapi -->|"reads/writes"| node_firestore
node_atsui -->|"submits analysis"| node_atsapi
node_atsapi -->|"authenticates"| node_session
node_atsapi -->|"reads/writes"| node_supabase
node_atsapi -->|"analyzes"| node_atsengine
node_interviewui -->|"creates session"| node_interviewapi
node_interviewapi -->|"authenticates"| node_session
node_interviewapi -->|"reads/writes"| node_firestore
node_assistantui -->|"requests suggestion"| node_assistantapi
node_assistantapi -->|"authenticates"| node_session
node_assistantapi -->|"reads/writes"| node_supabase
node_assistantapi -->|"builds prompt"| node_aiprompts
node_assistantapi -->|"generates text"| node_aiprovider
node_aiprovider -.->|"calls"| node_gemini
node_templatesui -->|"lists templates"| node_templateapi
node_templateapi -->|"queries"| node_supabase
node_resumeapi -.->|"exports PDF"| node_pdf
node_stripe -.->|"sends events"| node_stripehook
node_stripehook -->|"updates subscriptions"| node_supabase
node_interviewapi -.->|"question generation"| node_interviewengine

click node_dashboard "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/page.tsx"
click node_builder "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/resumes/builder/page.tsx"
click node_atsui "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/ats/page.tsx"
click node_interviewui "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/interviews/page.tsx"
click node_assistantui "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/assistant/page.tsx"
click node_templatesui "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/templates/page.tsx"
click node_resumeapi "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/resumes/route.ts"
click node_resumeitemapi "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/resumes/%5Bid%5D/route.ts"
click node_atsapi "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/ats/analyze/route.ts"
click node_interviewapi "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/interviews/route.ts"
click node_assistantapi "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/ai/resume-assistant/route.ts"
click node_templateapi "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/templates/route.ts"
click node_atsengine "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/ats/analyzer.ts"
click node_interviewengine "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/interviews/engine.ts"
click node_aiprompts "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/ai/prompts.ts"
click node_aiprovider "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/ai/provider.ts"
click node_pdf "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/export/pdf-generator.ts"
click node_session "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/auth/get-session.ts"
click node_firestore "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/firebase/firestore.ts"
click node_supabase "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/supabase/server.ts"
click node_stripehook "https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/webhooks/stripe/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_builder,node_atsui,node_interviewui,node_assistantui,node_templatesui toneBlue
class node_resumeapi,node_resumeitemapi,node_atsapi,node_interviewapi,node_assistantapi,node_templateapi,node_stripehook toneAmber
class node_atsengine,node_interviewengine,node_aiprompts,node_aiprovider,node_pdf,node_gemini toneMint
class node_session,node_firestore,node_supabase toneRose
class node_jobseeker,node_stripe toneIndigo
```

## Components

### User Experience

- [Career Dashboard](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/page.tsx): `resume-app/src/app/dashboard/page.tsx`
- [Resume Builder](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/resumes/builder/page.tsx): `resume-app/src/app/dashboard/resumes/builder/page.tsx`
- [ATS Optimizer](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/ats/page.tsx): `resume-app/src/app/dashboard/ats/page.tsx`
- [Interview Practice](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/interviews/page.tsx): `resume-app/src/app/dashboard/interviews/page.tsx`
- [Career Assistant](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/assistant/page.tsx): `resume-app/src/app/dashboard/assistant/page.tsx`
- [Template Browser](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/dashboard/templates/page.tsx): `resume-app/src/app/dashboard/templates/page.tsx`

### Application API

- [Resume API](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/resumes/route.ts): `resume-app/src/app/api/resumes/route.ts`
- [Resume Operations](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/resumes/%5Bid%5D/route.ts): `resume-app/src/app/api/resumes/[id]/route.ts`
- [ATS Analysis API](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/ats/analyze/route.ts): `resume-app/src/app/api/ats/analyze/route.ts`
- [Interview API](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/interviews/route.ts): `resume-app/src/app/api/interviews/route.ts`
- [Assistant API](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/ai/resume-assistant/route.ts): `resume-app/src/app/api/ai/resume-assistant/route.ts`
- [Template API](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/templates/route.ts): `resume-app/src/app/api/templates/route.ts`
- [Stripe Webhook](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/app/api/webhooks/stripe/route.ts): `resume-app/src/app/api/webhooks/stripe/route.ts`

### Career Services

- [ATS Analyzer](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/ats/analyzer.ts): `resume-app/src/lib/ats/analyzer.ts`
- [Interview Engine](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/interviews/engine.ts): `resume-app/src/lib/interviews/engine.ts`
- [Prompt Builder](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/ai/prompts.ts): `resume-app/src/lib/ai/prompts.ts`
- [AI Provider](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/ai/provider.ts): `resume-app/src/lib/ai/provider.ts`
- [PDF Export](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/export/pdf-generator.ts): `resume-app/src/lib/export/pdf-generator.ts`

### Identity and Data

- [Session Auth](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/auth/get-session.ts): `resume-app/src/lib/auth/get-session.ts`
- [Cloud Firestore](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/firebase/firestore.ts): `resume-app/src/lib/firebase/firestore.ts`
- [Supabase Data](https://github.com/theakashr/ai-resume-builder/blob/main/resume-app/src/lib/supabase/server.ts): `resume-app/src/lib/supabase/server.ts`

### Other components

- **Job Seeker**
- **Gemini API**
- **Stripe**

## Connections

- Job Seeker → Career Dashboard: uses
- Job Seeker → Resume Builder: edits resume
- Job Seeker → ATS Optimizer: requests match
- Job Seeker → Interview Practice: practices
- Job Seeker → Career Assistant: asks guidance
- Job Seeker → Template Browser: browses
- Resume Builder → Resume API: saves resume
- Resume API → Session Auth: authenticates
- Resume API → Cloud Firestore: reads/writes
- Resume Builder → Resume Operations: updates resume
- Resume Operations → Session Auth: authenticates
- Resume Operations → Cloud Firestore: reads/writes
- ATS Optimizer → ATS Analysis API: submits analysis
- ATS Analysis API → Session Auth: authenticates
- ATS Analysis API → Supabase Data: reads/writes
- ATS Analysis API → ATS Analyzer: analyzes
- Interview Practice → Interview API: creates session
- Interview API → Session Auth: authenticates
- Interview API → Cloud Firestore: reads/writes
- Career Assistant → Assistant API: requests suggestion
- Assistant API → Session Auth: authenticates
- Assistant API → Supabase Data: reads/writes
- Assistant API → Prompt Builder: builds prompt
- Assistant API → AI Provider: generates text
- AI Provider → Gemini API: calls
- Template Browser → Template API: lists templates
- Template API → Supabase Data: queries
- Resume API → PDF Export: exports PDF
- Stripe → Stripe Webhook: sends events
- Stripe Webhook → Supabase Data: updates subscriptions
- Interview API → Interview Engine: question generation
