# devkano98/resumeforge architecture

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

- Interactive diagram: https://gitdiagram.com/devkano98/resumeforge
- Repository: https://github.com/devkano98/resumeforge

## Overview

ResumeForge is a local-first resume synthesis application: users manage a master LaTeX resume, connect and index GitHub repositories, then submit a job description to generate and download a tailored resume while following live progress. Its domain stages include fact extraction, project evidence retrieval, generation, and PDF rendering; the UI also supports project browsing, template adaptation, history, and replay. The graph reflects documented capabilities and sampled route, parser, search, and UI behavior. Generation-service wiring beyond those excerpts is shown only where supported by the documented workflow.

Main entry points: [`src/services/resume_generator.rs`](https://github.com/devkano98/resumeforge/blob/main/src/services/resume_generator.rs) (Resume generation), [`src/routes/mod.rs`](https://github.com/devkano98/resumeforge/blob/main/src/routes/mod.rs) (API router), [`src/routes/templates.rs`](https://github.com/devkano98/resumeforge/blob/main/src/routes/templates.rs) (Template endpoints), [`src/routes/resumes.rs`](https://github.com/devkano98/resumeforge/blob/main/src/routes/resumes.rs) (Resume endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["App navigation<br/>[app.js]"]
  node_canvas["Progress canvas<br/>[canvas.js]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["HTTP and live API"]
  node_router["API router<br/>[mod.rs]"]
  node_resume_routes["Resume endpoints<br/>[resumes.rs]"]
  node_live_routes["Live events<br/>[live.rs]"]
  node_github_routes["GitHub endpoints<br/>[github.rs]"]
  node_project_routes["Project endpoints<br/>[projects.rs]"]
  node_template_routes["Template endpoints<br/>[templates.rs]"]
end

subgraph group_domain["Resume domain services"]
  node_generation["Resume generation"]
  node_queue["Generation queue"]
  node_parser["Master fact parser<br/>[master_parser.rs]"]
  node_search["Project evidence search<br/>[project_search.rs]"]
  node_indexer["Repository indexer<br/>[github_indexer.rs]"]
  node_adapt["Template adaptation<br/>[template_adapt.rs]"]
  node_pty["AI process runner<br/>[pty_runner.rs]"]
  node_latex["LaTeX rendering<br/>[latex.rs]"]
  node_pdf["PDF handling<br/>[pdf.rs]"]
  node_events["Event broadcast<br/>[event_bus.rs]"]
end

subgraph group_persistence["Local persistence"]
  node_database[("SQLite data<br/>[mod.rs]")]
  node_resume_store["Resume records<br/>[resumes.rs]"]
  node_project_store["Project records<br/>[projects.rs]"]
  node_repo_store["Repository records<br/>[repositories.rs]"]
  node_template_store["Template records<br/>[templates.rs]"]
end

subgraph group_integrations["External integrations"]
  node_github(("GitHub"))
  node_antigravity(("Antigravity CLI"))
  node_tex_engine(("TeX engine"))
end

node_user(("Resume user"))

node_user -->|"uses"| node_app
node_app -->|"requests"| node_api_client
node_app -->|"shows progress"| node_canvas
node_api_client -->|"sends requests"| node_router
node_router -->|"dispatches"| node_resume_routes
node_router -->|"dispatches"| node_live_routes
node_router -->|"dispatches"| node_github_routes
node_router -->|"dispatches"| node_project_routes
node_router -->|"dispatches"| node_template_routes
node_resume_routes -->|"starts generation"| node_generation
node_resume_routes -->|"reads and writes"| node_resume_store
node_generation -->|"enqueues work"| node_queue
node_generation -->|"extracts facts"| node_parser
node_generation -->|"ranks evidence"| node_search
node_generation -->|"requests generation"| node_pty
node_generation -->|"renders resume"| node_latex
node_generation -->|"publishes progress"| node_events
node_generation -->|"saves result"| node_resume_store
node_search -->|"reads projects"| node_project_store
node_indexer -->|"stores evidence"| node_project_store
node_github_routes -->|"syncs repositories"| node_indexer
node_github_routes -->|"reads and writes"| node_repo_store
node_indexer -.->|"fetches repositories"| node_github
node_template_routes -->|"reads and writes"| node_template_store
node_template_routes -->|"adapts template"| node_adapt
node_template_routes -->|"parses facts"| node_parser
node_parser -->|"reads template"| node_template_store
node_live_routes -->|"streams updates"| node_events
node_canvas -->|"opens live stream"| node_api_client
node_pty -.->|"runs process"| node_antigravity
node_latex -.->|"compiles TeX"| node_tex_engine
node_latex -->|"produces PDF"| node_pdf
node_pdf -->|"serves artifacts"| node_resume_routes
node_resume_store -->|"queries"| node_database
node_project_store -->|"queries"| node_database
node_repo_store -->|"queries"| node_database
node_template_store -->|"queries"| node_database
node_project_routes -->|"lists projects"| node_project_store

click node_app "https://github.com/devkano98/resumeforge/blob/main/frontend/js/app.js"
click node_canvas "https://github.com/devkano98/resumeforge/blob/main/frontend/js/canvas.js"
click node_api_client "https://github.com/devkano98/resumeforge/blob/main/frontend/js/api.js"
click node_router "https://github.com/devkano98/resumeforge/blob/main/src/routes/mod.rs"
click node_resume_routes "https://github.com/devkano98/resumeforge/blob/main/src/routes/resumes.rs"
click node_live_routes "https://github.com/devkano98/resumeforge/blob/main/src/routes/live.rs"
click node_github_routes "https://github.com/devkano98/resumeforge/blob/main/src/routes/github.rs"
click node_project_routes "https://github.com/devkano98/resumeforge/blob/main/src/routes/projects.rs"
click node_template_routes "https://github.com/devkano98/resumeforge/blob/main/src/routes/templates.rs"
click node_generation "https://github.com/devkano98/resumeforge/blob/main/src/services/resume_generator.rs"
click node_queue "https://github.com/devkano98/resumeforge/blob/main/src/services/generation_queue.rs"
click node_parser "https://github.com/devkano98/resumeforge/blob/main/src/services/master_parser.rs"
click node_search "https://github.com/devkano98/resumeforge/blob/main/src/services/project_search.rs"
click node_indexer "https://github.com/devkano98/resumeforge/blob/main/src/services/github_indexer.rs"
click node_adapt "https://github.com/devkano98/resumeforge/blob/main/src/services/template_adapt.rs"
click node_pty "https://github.com/devkano98/resumeforge/blob/main/src/services/pty_runner.rs"
click node_latex "https://github.com/devkano98/resumeforge/blob/main/src/services/latex.rs"
click node_pdf "https://github.com/devkano98/resumeforge/blob/main/src/services/pdf.rs"
click node_events "https://github.com/devkano98/resumeforge/blob/main/src/services/event_bus.rs"
click node_database "https://github.com/devkano98/resumeforge/blob/main/src/db/mod.rs"
click node_resume_store "https://github.com/devkano98/resumeforge/blob/main/src/db/resumes.rs"
click node_project_store "https://github.com/devkano98/resumeforge/blob/main/src/db/projects.rs"
click node_repo_store "https://github.com/devkano98/resumeforge/blob/main/src/db/repositories.rs"
click node_template_store "https://github.com/devkano98/resumeforge/blob/main/src/db/templates.rs"

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_app,node_canvas,node_api_client,node_user toneBlue
class node_router,node_resume_routes,node_live_routes,node_github_routes,node_project_routes,node_template_routes toneAmber
class node_generation,node_queue,node_parser,node_search,node_indexer,node_adapt,node_pty,node_latex,node_pdf,node_events toneMint
class node_database,node_resume_store,node_project_store,node_repo_store,node_template_store toneRose
class node_github,node_antigravity,node_tex_engine toneIndigo
```

## Components

### Web client

- [App navigation](https://github.com/devkano98/resumeforge/blob/main/frontend/js/app.js): `frontend/js/app.js`
- [Progress canvas](https://github.com/devkano98/resumeforge/blob/main/frontend/js/canvas.js): `frontend/js/canvas.js`
- [API client](https://github.com/devkano98/resumeforge/blob/main/frontend/js/api.js): `frontend/js/api.js`

### HTTP and live API

- [API router](https://github.com/devkano98/resumeforge/blob/main/src/routes/mod.rs): `src/routes/mod.rs`
- [Resume endpoints](https://github.com/devkano98/resumeforge/blob/main/src/routes/resumes.rs): `src/routes/resumes.rs`
- [Live events](https://github.com/devkano98/resumeforge/blob/main/src/routes/live.rs): `src/routes/live.rs`
- [GitHub endpoints](https://github.com/devkano98/resumeforge/blob/main/src/routes/github.rs): `src/routes/github.rs`
- [Project endpoints](https://github.com/devkano98/resumeforge/blob/main/src/routes/projects.rs): `src/routes/projects.rs`
- [Template endpoints](https://github.com/devkano98/resumeforge/blob/main/src/routes/templates.rs): `src/routes/templates.rs`

### Resume domain services

- [Resume generation](https://github.com/devkano98/resumeforge/blob/main/src/services/resume_generator.rs): `src/services/resume_generator.rs`
- [Generation queue](https://github.com/devkano98/resumeforge/blob/main/src/services/generation_queue.rs): `src/services/generation_queue.rs`
- [Master fact parser](https://github.com/devkano98/resumeforge/blob/main/src/services/master_parser.rs): `src/services/master_parser.rs`
- [Project evidence search](https://github.com/devkano98/resumeforge/blob/main/src/services/project_search.rs): `src/services/project_search.rs`
- [Repository indexer](https://github.com/devkano98/resumeforge/blob/main/src/services/github_indexer.rs): `src/services/github_indexer.rs`
- [Template adaptation](https://github.com/devkano98/resumeforge/blob/main/src/services/template_adapt.rs): `src/services/template_adapt.rs`
- [AI process runner](https://github.com/devkano98/resumeforge/blob/main/src/services/pty_runner.rs): `src/services/pty_runner.rs`
- [LaTeX rendering](https://github.com/devkano98/resumeforge/blob/main/src/services/latex.rs): `src/services/latex.rs`
- [PDF handling](https://github.com/devkano98/resumeforge/blob/main/src/services/pdf.rs): `src/services/pdf.rs`
- [Event broadcast](https://github.com/devkano98/resumeforge/blob/main/src/services/event_bus.rs): `src/services/event_bus.rs`

### Local persistence

- [SQLite data](https://github.com/devkano98/resumeforge/blob/main/src/db/mod.rs): `src/db/mod.rs`
- [Resume records](https://github.com/devkano98/resumeforge/blob/main/src/db/resumes.rs): `src/db/resumes.rs`
- [Project records](https://github.com/devkano98/resumeforge/blob/main/src/db/projects.rs): `src/db/projects.rs`
- [Repository records](https://github.com/devkano98/resumeforge/blob/main/src/db/repositories.rs): `src/db/repositories.rs`
- [Template records](https://github.com/devkano98/resumeforge/blob/main/src/db/templates.rs): `src/db/templates.rs`

### External integrations

- **GitHub**
- **Antigravity CLI**
- **TeX engine**

### Other components

- **Resume user**

## Connections

- Resume user → App navigation: uses
- App navigation → API client: requests
- App navigation → Progress canvas: shows progress
- API client → API router: sends requests
- API router → Resume endpoints: dispatches
- API router → Live events: dispatches
- API router → GitHub endpoints: dispatches
- API router → Project endpoints: dispatches
- API router → Template endpoints: dispatches
- Resume endpoints → Resume generation: starts generation
- Resume endpoints → Resume records: reads and writes
- Resume generation → Generation queue: enqueues work
- Resume generation → Master fact parser: extracts facts
- Resume generation → Project evidence search: ranks evidence
- Resume generation → AI process runner: requests generation
- Resume generation → LaTeX rendering: renders resume
- Resume generation → Event broadcast: publishes progress
- Resume generation → Resume records: saves result
- Project evidence search → Project records: reads projects
- Repository indexer → Project records: stores evidence
- GitHub endpoints → Repository indexer: syncs repositories
- GitHub endpoints → Repository records: reads and writes
- Repository indexer → GitHub: fetches repositories
- Template endpoints → Template records: reads and writes
- Template endpoints → Template adaptation: adapts template
- Template endpoints → Master fact parser: parses facts
- Master fact parser → Template records: reads template
- Live events → Event broadcast: streams updates
- Progress canvas → API client: opens live stream
- AI process runner → Antigravity CLI: runs process
- LaTeX rendering → TeX engine: compiles TeX
- LaTeX rendering → PDF handling: produces PDF
- PDF handling → Resume endpoints: serves artifacts
- Resume records → SQLite data: queries
- Project records → SQLite data: queries
- Repository records → SQLite data: queries
- Template records → SQLite data: queries
- Project endpoints → Project records: lists projects
