# abdullahasim19/career-coach-app-ai-powered-resume-analysis architecture

> Architecture diagram of the GitHub repository abdullahasim19/career-coach-app-ai-powered-resume-analysis, 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/abdullahasim19/career-coach-app-ai-powered-resume-analysis
- Repository: https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis

## Overview

CareerCoach AI supports resume improvement, mock interview practice, career advice, and progress tracking. The main workflow lets a professional upload a resume, which the API parses, sends for AI analysis, and stores for later review; interview sessions separately generate questions, evaluate submitted answers, and persist results. The dashboard exposes progress metrics, while career-advice and resume-tailoring routes provide additional coaching paths. The graph follows sampled route implementations and documented capabilities; some UI-to-API wiring and unsampled features are not shown.

Main entry points: [`src/lib/db/prisma.ts`](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/db/prisma.ts) (PostgreSQL), [`src/app/api/v1/resume/upload/route.tsx`](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/resume/upload/route.tsx) (Resume upload), [`src/app/api/v1/interview/start/route.tsx`](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/route.tsx) (Start interview), [`src/app/api/v1/interview/start/[sessionId]/answer/route.tsx`](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/%5BsessionId%5D/answer/route.tsx) (Answer evaluation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_resume["Resume coaching"]
  node_resume_upload["Resume upload<br/>[route.tsx]"]
  node_file_parser["Resume parser<br/>[fileProcessor.ts]"]
  node_resume_ai["Resume analysis<br/>[resumeAnalysis.ts]"]
  node_resume_review["Analysis retrieval<br/>[route.tsx]"]
  node_tailor_route["Resume tailoring<br/>[route.tsx]"]
  node_tailor_ai["Tailoring AI<br/>[resumeTailoring.ts]"]
end

subgraph group_interview["Interview practice"]
  node_interview_start["Start interview<br/>[route.tsx]"]
  node_question_ai["Question generation"]
  node_answer_route["Answer evaluation<br/>[route.tsx]"]
  node_evaluation_ai["Answer evaluator"]
  node_results_route["Interview results<br/>[route.tsx]"]
  node_voice_hook["Voice interview"]
  node_interview_store["Interview state<br/>[interviewStore.ts]"]
end

subgraph group_insights["Career insights"]
  node_career_route["Career advice<br/>[route.tsx]"]
  node_career_ai["Advice generation<br/>[careerAdvice.ts]"]
  node_stats_route["Progress metrics<br/>[route.tsx]"]
  node_dashboard["Progress dashboard<br/>[page.tsx]"]
end

subgraph group_platform["Platform services"]
  node_preferences_route["User preferences<br/>[route.tsx]"]
  node_clerk_webhook["Account sync<br/>[route.tsx]"]
  node_clerk{{"Clerk identity"}}
  node_openai{{"OpenAI"}}
  node_database[("PostgreSQL<br/>[prisma.ts]")]
end

node_professional(("Professional"))

node_professional -->|"uploads resume"| node_resume_upload
node_resume_upload -->|"parses file"| node_file_parser
node_resume_upload -->|"requests analysis"| node_resume_ai
node_resume_upload -->|"writes resume and score"| node_database
node_file_parser -->|"returns text"| node_resume_upload
node_resume_ai -->|"calls API"| node_openai
node_resume_ai -->|"returns analysis"| node_resume_upload
node_professional -->|"requests analysis"| node_resume_review
node_resume_review -->|"reads analysis"| node_database
node_professional -->|"requests tailoring"| node_tailor_route
node_tailor_route -->|"reads resume, saves session"| node_database
node_tailor_route -->|"requests tailoring"| node_tailor_ai
node_tailor_ai -->|"calls API"| node_openai
node_professional -->|"starts session"| node_interview_start
node_interview_start -->|"requests questions"| node_question_ai
node_interview_start -->|"reads user, saves session"| node_database
node_question_ai -->|"calls API"| node_openai
node_professional -->|"submits answer"| node_answer_route
node_answer_route -->|"reads session, saves feedback"| node_database
node_answer_route -->|"requests evaluation"| node_evaluation_ai
node_evaluation_ai -->|"calls API"| node_openai
node_professional -->|"requests results"| node_results_route
node_results_route -->|"reads feedback"| node_database
node_voice_hook -->|"adds transcript"| node_interview_store
node_professional -->|"requests advice"| node_career_route
node_career_route -->|"reads career history"| node_database
node_career_route -->|"requests advice"| node_career_ai
node_career_ai -->|"calls API"| node_openai
node_professional -->|"requests metrics"| node_stats_route
node_stats_route -->|"reads progress data"| node_database
node_professional -->|"manages preferences"| node_preferences_route
node_preferences_route -->|"reads and writes preferences"| node_database
node_clerk -->|"sends account events"| node_clerk_webhook
node_clerk_webhook -->|"creates or deletes user"| node_database
node_clerk -->|"authenticates"| node_resume_upload
node_clerk -->|"authenticates"| node_interview_start
node_clerk -->|"authenticates"| node_answer_route
node_clerk -->|"authenticates"| node_results_route
node_clerk -->|"authenticates"| node_career_route
node_clerk -->|"authenticates"| node_stats_route
node_clerk -->|"authenticates"| node_preferences_route
node_clerk -->|"authenticates"| node_resume_review

click node_resume_upload "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/resume/upload/route.tsx"
click node_file_parser "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/utils/fileProcessor.ts"
click node_resume_ai "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/resumeAnalysis.ts"
click node_resume_review "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/%5Bid%5D/analysis/route.tsx"
click node_tailor_route "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/resume/upload/tailor/route.tsx"
click node_tailor_ai "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/resumeTailoring.ts"
click node_interview_start "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/route.tsx"
click node_question_ai "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/interviewQuestions.ts"
click node_answer_route "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/%5BsessionId%5D/answer/route.tsx"
click node_evaluation_ai "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/answerEvaluation.ts"
click node_results_route "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/%5BsessionId%5D/results/route.tsx"
click node_voice_hook "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/hooks/useVoiceInterview.ts"
click node_interview_store "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/store/interviewStore.ts"
click node_career_route "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/user/career-advice/route.tsx"
click node_career_ai "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/careerAdvice.ts"
click node_stats_route "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/user/stats/route.tsx"
click node_dashboard "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/(dashboard)/page.tsx"
click node_preferences_route "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/user/preferences/route.tsx"
click node_clerk_webhook "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/webhooks/clerk/route.tsx"
click node_database "https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/db/prisma.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_resume_upload,node_file_parser,node_resume_ai,node_resume_review,node_tailor_route,node_tailor_ai toneBlue
class node_interview_start,node_question_ai,node_answer_route,node_evaluation_ai,node_results_route,node_voice_hook,node_interview_store toneAmber
class node_career_route,node_career_ai,node_stats_route,node_dashboard toneMint
class node_preferences_route,node_clerk_webhook,node_clerk,node_openai,node_database toneRose
class node_professional toneIndigo
```

## Components

### Resume coaching

- [Resume upload](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/resume/upload/route.tsx): `src/app/api/v1/resume/upload/route.tsx`
- [Resume parser](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/utils/fileProcessor.ts): `src/lib/utils/fileProcessor.ts`
- [Resume analysis](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/resumeAnalysis.ts): `src/lib/ai/openai/resumeAnalysis.ts`
- [Analysis retrieval](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/%5Bid%5D/analysis/route.tsx): `src/app/api/v1/[id]/analysis/route.tsx`
- [Resume tailoring](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/resume/upload/tailor/route.tsx): `src/app/api/v1/resume/upload/tailor/route.tsx`
- [Tailoring AI](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/resumeTailoring.ts): `src/lib/ai/openai/resumeTailoring.ts`

### Interview practice

- [Start interview](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/route.tsx): `src/app/api/v1/interview/start/route.tsx`
- [Question generation](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/interviewQuestions.ts): `src/lib/ai/openai/interviewQuestions.ts`
- [Answer evaluation](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/%5BsessionId%5D/answer/route.tsx): `src/app/api/v1/interview/start/[sessionId]/answer/route.tsx`
- [Answer evaluator](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/answerEvaluation.ts): `src/lib/ai/openai/answerEvaluation.ts`
- [Interview results](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/interview/start/%5BsessionId%5D/results/route.tsx): `src/app/api/v1/interview/start/[sessionId]/results/route.tsx`
- [Voice interview](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/hooks/useVoiceInterview.ts): `src/hooks/useVoiceInterview.ts`
- [Interview state](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/store/interviewStore.ts): `src/store/interviewStore.ts`

### Career insights

- [Career advice](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/user/career-advice/route.tsx): `src/app/api/v1/user/career-advice/route.tsx`
- [Advice generation](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/ai/openai/careerAdvice.ts): `src/lib/ai/openai/careerAdvice.ts`
- [Progress metrics](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/user/stats/route.tsx): `src/app/api/v1/user/stats/route.tsx`
- [Progress dashboard](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/(dashboard)/page.tsx): `src/app/(dashboard)/page.tsx`

### Platform services

- [User preferences](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/v1/user/preferences/route.tsx): `src/app/api/v1/user/preferences/route.tsx`
- [Account sync](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/app/api/webhooks/clerk/route.tsx): `src/app/api/webhooks/clerk/route.tsx`
- **Clerk identity**
- **OpenAI**
- [PostgreSQL](https://github.com/abdullahasim19/career-coach-app-ai-powered-resume-analysis/blob/feature/api/src/lib/db/prisma.ts): `src/lib/db/prisma.ts`

### Other components

- **Professional**

## Connections

- Professional → Resume upload: uploads resume
- Resume upload → Resume parser: parses file
- Resume upload → Resume analysis: requests analysis
- Resume upload → PostgreSQL: writes resume and score
- Resume parser → Resume upload: returns text
- Resume analysis → OpenAI: calls API
- Resume analysis → Resume upload: returns analysis
- Professional → Analysis retrieval: requests analysis
- Analysis retrieval → PostgreSQL: reads analysis
- Professional → Resume tailoring: requests tailoring
- Resume tailoring → PostgreSQL: reads resume, saves session
- Resume tailoring → Tailoring AI: requests tailoring
- Tailoring AI → OpenAI: calls API
- Professional → Start interview: starts session
- Start interview → Question generation: requests questions
- Start interview → PostgreSQL: reads user, saves session
- Question generation → OpenAI: calls API
- Professional → Answer evaluation: submits answer
- Answer evaluation → PostgreSQL: reads session, saves feedback
- Answer evaluation → Answer evaluator: requests evaluation
- Answer evaluator → OpenAI: calls API
- Professional → Interview results: requests results
- Interview results → PostgreSQL: reads feedback
- Voice interview → Interview state: adds transcript
- Professional → Career advice: requests advice
- Career advice → PostgreSQL: reads career history
- Career advice → Advice generation: requests advice
- Advice generation → OpenAI: calls API
- Professional → Progress metrics: requests metrics
- Progress metrics → PostgreSQL: reads progress data
- Professional → User preferences: manages preferences
- User preferences → PostgreSQL: reads and writes preferences
- Clerk identity → Account sync: sends account events
- Account sync → PostgreSQL: creates or deletes user
- Clerk identity → Resume upload: authenticates
- Clerk identity → Start interview: authenticates
- Clerk identity → Answer evaluation: authenticates
- Clerk identity → Interview results: authenticates
- Clerk identity → Career advice: authenticates
- Clerk identity → Progress metrics: authenticates
- Clerk identity → User preferences: authenticates
- Clerk identity → Analysis retrieval: authenticates
