# omikhan4901/cse299 architecture

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

- Interactive diagram: https://gitdiagram.com/omikhan4901/cse299
- Repository: https://github.com/omikhan4901/cse299

## Overview

ResumeX is a resume-building and job-search workspace. A user creates and edits a resume, sees the actual PDF preview, checks ATS fit, and can save or share it; V2 adds a Career Profile, application tracking, deterministic tailoring, and interview preparation. The graph also captures AI-assisted edits with review, billing/admin controls, and the API’s MongoDB-backed domain data. README documents several capabilities whose implementation was not sampled; those are represented only at supported subsystem paths, with uncertain wiring omitted.

Main entry points: [`server/app.js`](https://github.com/omikhan4901/cse299/blob/main/server/app.js) (Express API), [`client/src/app/(app)/layout.js`](https://github.com/omikhan4901/cse299/blob/main/client/src/app/(app)/layout.js) (Web application), [`client/src/components/builder/Builder.jsx`](https://github.com/omikhan4901/cse299/blob/main/client/src/components/builder/Builder.jsx) (Resume editor), [`client/src/components/applications/ApplicationsPage.jsx`](https://github.com/omikhan4901/cse299/blob/main/client/src/components/applications/ApplicationsPage.jsx) (Application board)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Resume experience"]
  node_builder["Resume editor<br/>[Builder.jsx]"]
  node_editorstate["Editor state<br/>[useResumeEditor.js]"]
  node_pdfclient["PDF renderer client<br/>[client.js]"]
  node_pdfengine["PDF templates<br/>[Engine.jsx]"]
  node_ats["ATS analysis<br/>[analyze.js]"]
  node_aiui["AI assistant UI<br/>[ai.jsx]"]
end

subgraph group_jobsearch["Job search"]
  node_profile["Career Profile<br/>[ProfilePage.jsx]"]
  node_profilesync["Profile sync<br/>[useProfileSync.jsx]"]
  node_applications["Application board"]
  node_applicationstate["Application state<br/>[useApplications.js]"]
  node_tailoring["Resume tailoring<br/>[tailor.js]"]
  node_interview["Interview prep<br/>[interview.js]"]
  node_insights["Search insights<br/>[insights.js]"]
end

subgraph group_platform["Account platform"]
  node_web["Web application<br/>[layout.js]"]
  node_auth["Authentication<br/>[AuthProvider.jsx]"]
  node_billing["Plans and credits"]
  node_admin["Admin console<br/>[AdminConsole.jsx]"]
end

subgraph group_backend["API and data"]
  node_aiapi["AI services<br/>[ai.js]"]
  node_ingest["Resume import<br/>[ingest.js]"]
  node_api["Express API<br/>[app.js]"]
  node_resumeapi["Resume routes<br/>[resume.js]"]
  node_profileapi["Profile routes<br/>[profile.js]"]
  node_applicationapi["Application routes<br/>[applications.js]"]
  node_atsapi["ATS routes<br/>[ats.js]"]
  node_billingapi["Billing routes<br/>[billing.js]"]
  node_publicapi["Public resume routes<br/>[public.js]"]
  node_mongo[("MongoDB records<br/>[Resume.js]")]
  node_applicationmodel[("Application records<br/>[Application.js]")]
  node_careerprofilemodel[("Profile records<br/>[CareerProfile.js]")]
end

node_user(("Resume builder"))
node_paddle["Paddle"]
node_gemini["Gemini / Vertex AI"]

node_user -->|"uses"| node_web
node_web -->|"opens"| node_builder
node_builder -->|"edits"| node_editorstate
node_builder -->|"renders preview"| node_pdfclient
node_pdfclient -->|"renders PDF"| node_pdfengine
node_builder -->|"checks resume"| node_ats
node_builder -->|"requests assistance"| node_aiui
node_aiui -->|"sends AI request"| node_aiapi
node_aiapi -.->|"calls model"| node_gemini
node_aiapi -->|"validates proposals"| node_ingest
node_web -->|"opens"| node_profile
node_profile -->|"syncs resume"| node_profilesync
node_profilesync -->|"reads/writes profile"| node_api
node_web -->|"opens"| node_applications
node_applications -->|"manages"| node_applicationstate
node_applicationstate -->|"requests applications"| node_api
node_applications -->|"tailors for jobs"| node_tailoring
node_applications -->|"prepares interviews"| node_interview
node_applications -->|"shows history"| node_insights
node_builder -->|"saves resume"| node_api
node_api -->|"dispatches"| node_resumeapi
node_api -->|"dispatches"| node_profileapi
node_api -->|"dispatches"| node_applicationapi
node_api -->|"dispatches"| node_atsapi
node_api -->|"dispatches"| node_billingapi
node_api -->|"dispatches"| node_publicapi
node_resumeapi -->|"reads/writes"| node_mongo
node_profileapi -->|"reads/writes"| node_careerprofilemodel
node_applicationapi -->|"reads/writes"| node_applicationmodel
node_applicationapi -->|"snapshots resume"| node_mongo
node_web -->|"establishes session"| node_auth
node_web -->|"shows entitlements"| node_billing
node_billing -->|"loads plan data"| node_api
node_billingapi -.->|"manages payments"| node_paddle
node_web -->|"opens"| node_admin
node_admin -->|"manages settings"| node_api

click node_builder "https://github.com/omikhan4901/cse299/blob/main/client/src/components/builder/Builder.jsx"
click node_editorstate "https://github.com/omikhan4901/cse299/blob/main/client/src/components/builder/useResumeEditor.js"
click node_pdfclient "https://github.com/omikhan4901/cse299/blob/main/client/src/pdf/client.js"
click node_pdfengine "https://github.com/omikhan4901/cse299/blob/main/client/src/pdf/engine/Engine.jsx"
click node_ats "https://github.com/omikhan4901/cse299/blob/main/client/src/lib/ats/analyze.js"
click node_profile "https://github.com/omikhan4901/cse299/blob/main/client/src/components/profile/ProfilePage.jsx"
click node_profilesync "https://github.com/omikhan4901/cse299/blob/main/client/src/components/profile/useProfileSync.jsx"
click node_applications "https://github.com/omikhan4901/cse299/blob/main/client/src/components/applications/ApplicationsPage.jsx"
click node_applicationstate "https://github.com/omikhan4901/cse299/blob/main/client/src/components/applications/useApplications.js"
click node_tailoring "https://github.com/omikhan4901/cse299/blob/main/client/src/lib/tailor.js"
click node_interview "https://github.com/omikhan4901/cse299/blob/main/client/src/lib/interview.js"
click node_insights "https://github.com/omikhan4901/cse299/blob/main/client/src/lib/insights.js"
click node_aiui "https://github.com/omikhan4901/cse299/blob/main/client/src/components/builder/ai.jsx"
click node_aiapi "https://github.com/omikhan4901/cse299/blob/main/server/routes/ai.js"
click node_ingest "https://github.com/omikhan4901/cse299/blob/main/server/lib/ingest.js"
click node_web "https://github.com/omikhan4901/cse299/blob/main/client/src/app/(app)/layout.js"
click node_auth "https://github.com/omikhan4901/cse299/blob/main/client/src/components/AuthProvider.jsx"
click node_billing "https://github.com/omikhan4901/cse299/blob/main/client/src/components/BillingProvider.jsx"
click node_admin "https://github.com/omikhan4901/cse299/blob/main/client/src/components/admin/AdminConsole.jsx"
click node_api "https://github.com/omikhan4901/cse299/blob/main/server/app.js"
click node_resumeapi "https://github.com/omikhan4901/cse299/blob/main/server/routes/resume.js"
click node_profileapi "https://github.com/omikhan4901/cse299/blob/main/server/routes/profile.js"
click node_applicationapi "https://github.com/omikhan4901/cse299/blob/main/server/routes/applications.js"
click node_atsapi "https://github.com/omikhan4901/cse299/blob/main/server/routes/ats.js"
click node_billingapi "https://github.com/omikhan4901/cse299/blob/main/server/routes/billing.js"
click node_publicapi "https://github.com/omikhan4901/cse299/blob/main/server/routes/public.js"
click node_mongo "https://github.com/omikhan4901/cse299/blob/main/server/models/Resume.js"
click node_applicationmodel "https://github.com/omikhan4901/cse299/blob/main/server/models/Application.js"
click node_careerprofilemodel "https://github.com/omikhan4901/cse299/blob/main/server/models/CareerProfile.js"

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_builder,node_editorstate,node_pdfclient,node_pdfengine,node_ats,node_aiui toneBlue
class node_profile,node_profilesync,node_applications,node_applicationstate,node_tailoring,node_interview,node_insights toneAmber
class node_web,node_auth,node_billing,node_admin toneMint
class node_aiapi,node_ingest,node_api,node_resumeapi,node_profileapi,node_applicationapi,node_atsapi,node_billingapi,node_publicapi,node_mongo,node_applicationmodel,node_careerprofilemodel toneRose
class node_user,node_paddle,node_gemini toneIndigo
```

## Components

### Resume experience

- [Resume editor](https://github.com/omikhan4901/cse299/blob/main/client/src/components/builder/Builder.jsx): `client/src/components/builder/Builder.jsx`
- [Editor state](https://github.com/omikhan4901/cse299/blob/main/client/src/components/builder/useResumeEditor.js): `client/src/components/builder/useResumeEditor.js`
- [PDF renderer client](https://github.com/omikhan4901/cse299/blob/main/client/src/pdf/client.js): `client/src/pdf/client.js`
- [PDF templates](https://github.com/omikhan4901/cse299/blob/main/client/src/pdf/engine/Engine.jsx): `client/src/pdf/engine/Engine.jsx`
- [ATS analysis](https://github.com/omikhan4901/cse299/blob/main/client/src/lib/ats/analyze.js): `client/src/lib/ats/analyze.js`
- [AI assistant UI](https://github.com/omikhan4901/cse299/blob/main/client/src/components/builder/ai.jsx): `client/src/components/builder/ai.jsx`

### Job search

- [Career Profile](https://github.com/omikhan4901/cse299/blob/main/client/src/components/profile/ProfilePage.jsx): `client/src/components/profile/ProfilePage.jsx`
- [Profile sync](https://github.com/omikhan4901/cse299/blob/main/client/src/components/profile/useProfileSync.jsx): `client/src/components/profile/useProfileSync.jsx`
- [Application board](https://github.com/omikhan4901/cse299/blob/main/client/src/components/applications/ApplicationsPage.jsx): `client/src/components/applications/ApplicationsPage.jsx`
- [Application state](https://github.com/omikhan4901/cse299/blob/main/client/src/components/applications/useApplications.js): `client/src/components/applications/useApplications.js`
- [Resume tailoring](https://github.com/omikhan4901/cse299/blob/main/client/src/lib/tailor.js): `client/src/lib/tailor.js`
- [Interview prep](https://github.com/omikhan4901/cse299/blob/main/client/src/lib/interview.js): `client/src/lib/interview.js`
- [Search insights](https://github.com/omikhan4901/cse299/blob/main/client/src/lib/insights.js): `client/src/lib/insights.js`

### Account platform

- [Web application](https://github.com/omikhan4901/cse299/blob/main/client/src/app/(app)/layout.js): `client/src/app/(app)/layout.js`
- [Authentication](https://github.com/omikhan4901/cse299/blob/main/client/src/components/AuthProvider.jsx): `client/src/components/AuthProvider.jsx`
- [Plans and credits](https://github.com/omikhan4901/cse299/blob/main/client/src/components/BillingProvider.jsx): `client/src/components/BillingProvider.jsx`
- [Admin console](https://github.com/omikhan4901/cse299/blob/main/client/src/components/admin/AdminConsole.jsx): `client/src/components/admin/AdminConsole.jsx`

### API and data

- [AI services](https://github.com/omikhan4901/cse299/blob/main/server/routes/ai.js): `server/routes/ai.js`
- [Resume import](https://github.com/omikhan4901/cse299/blob/main/server/lib/ingest.js): `server/lib/ingest.js`
- [Express API](https://github.com/omikhan4901/cse299/blob/main/server/app.js): `server/app.js`
- [Resume routes](https://github.com/omikhan4901/cse299/blob/main/server/routes/resume.js): `server/routes/resume.js`
- [Profile routes](https://github.com/omikhan4901/cse299/blob/main/server/routes/profile.js): `server/routes/profile.js`
- [Application routes](https://github.com/omikhan4901/cse299/blob/main/server/routes/applications.js): `server/routes/applications.js`
- [ATS routes](https://github.com/omikhan4901/cse299/blob/main/server/routes/ats.js): `server/routes/ats.js`
- [Billing routes](https://github.com/omikhan4901/cse299/blob/main/server/routes/billing.js): `server/routes/billing.js`
- [Public resume routes](https://github.com/omikhan4901/cse299/blob/main/server/routes/public.js): `server/routes/public.js`
- [MongoDB records](https://github.com/omikhan4901/cse299/blob/main/server/models/Resume.js): `server/models/Resume.js`
- [Application records](https://github.com/omikhan4901/cse299/blob/main/server/models/Application.js): `server/models/Application.js`
- [Profile records](https://github.com/omikhan4901/cse299/blob/main/server/models/CareerProfile.js): `server/models/CareerProfile.js`

### Other components

- **Resume builder**
- **Paddle**
- **Gemini / Vertex AI**

## Connections

- Resume builder → Web application: uses
- Web application → Resume editor: opens
- Resume editor → Editor state: edits
- Resume editor → PDF renderer client: renders preview
- PDF renderer client → PDF templates: renders PDF
- Resume editor → ATS analysis: checks resume
- Resume editor → AI assistant UI: requests assistance
- AI assistant UI → AI services: sends AI request
- AI services → Gemini / Vertex AI: calls model
- AI services → Resume import: validates proposals
- Web application → Career Profile: opens
- Career Profile → Profile sync: syncs resume
- Profile sync → Express API: reads/writes profile
- Web application → Application board: opens
- Application board → Application state: manages
- Application state → Express API: requests applications
- Application board → Resume tailoring: tailors for jobs
- Application board → Interview prep: prepares interviews
- Application board → Search insights: shows history
- Resume editor → Express API: saves resume
- Express API → Resume routes: dispatches
- Express API → Profile routes: dispatches
- Express API → Application routes: dispatches
- Express API → ATS routes: dispatches
- Express API → Billing routes: dispatches
- Express API → Public resume routes: dispatches
- Resume routes → MongoDB records: reads/writes
- Profile routes → Profile records: reads/writes
- Application routes → Application records: reads/writes
- Application routes → MongoDB records: snapshots resume
- Web application → Authentication: establishes session
- Web application → Plans and credits: shows entitlements
- Plans and credits → Express API: loads plan data
- Billing routes → Paddle: manages payments
- Web application → Admin console: opens
- Admin console → Express API: manages settings
