# jahnavim23/infosys-coverletter architecture

> Architecture diagram of the GitHub repository jahnavim23/infosys-coverletter, 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/jahnavim23/infosys-coverletter
- Repository: https://github.com/jahnavim23/infosys-coverletter

## Overview

Resume Forge is a browser-based, resume-aware cover-letter generator. Users sign in locally, supply a resume and job description, review parsed resume health and skill alignment, choose a writing template, generate and optionally polish a draft, then edit and export it. The graph follows the sampled Generator orchestration and documented capabilities; parser/export implementation details beyond the excerpts are represented at their exact module paths.

Main entry points: [`src/pages/Generator.tsx`](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/pages/Generator.tsx) (Generator workflow), [`src/pages/Index.tsx`](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/pages/Index.tsx) (Session gate), [`src/lib/auth.ts`](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/auth.ts) (Local auth), [`src/App.tsx`](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/App.tsx) (App routing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App and access"]
  node_app["App routing<br/>[App.tsx]"]
  node_index["Session gate<br/>[Index.tsx]"]
  node_authform["Sign-in form<br/>[AuthForm.tsx]"]
  node_auth["Local auth<br/>[auth.ts]"]
end

subgraph group_analysis["Resume analysis"]
  node_upload["Resume input<br/>[ResumeUpload.tsx]"]
  node_parser["Resume parser<br/>[resumeParser.ts]"]
  node_documents["PDF/DOCX parsers"]
  node_jobskills["Job skill extraction<br/>[skillMatcher.ts]"]
  node_matcher["Skill matching<br/>[skillMatcher.ts]"]
  node_health["Resume health"]
  node_skillview["Skill analysis<br/>[SkillAnalysis.tsx]"]
end

subgraph group_writing["Letter creation"]
  node_generator["Generator workflow<br/>[Generator.tsx]"]
  node_templates["Template selection"]
  node_lettergen["Letter generation"]
  node_polisher["AI polishing"]
  node_preview["Letter editor"]
  node_export["PDF/DOCX export<br/>[exportUtils.ts]"]
end

subgraph group_experience["User experience"]
  node_tutorial["Guided tutorial"]
  node_tour["Spotlight tour<br/>[SpotlightTour.tsx]"]
end

node_user(("Applicant"))
node_browserstore[("Browser storage")]
node_openrouter["OpenRouter API"]

node_user -->|"opens"| node_app
node_app -->|"routes"| node_index
node_index -->|"reads session"| node_auth
node_index -->|"shows unauthenticated"| node_authform
node_authform -->|"signs in/up"| node_auth
node_auth -->|"reads/writes"| node_browserstore
node_index -->|"shows signed-in"| node_generator
node_generator -->|"collects resume"| node_upload
node_upload -.->|"extracts file text"| node_documents
node_generator -->|"parses resume"| node_parser
node_generator -->|"renders resume metrics"| node_health
node_generator -->|"extracts job skills"| node_jobskills
node_generator -->|"matches skills"| node_matcher
node_generator -->|"shows alignment"| node_skillview
node_generator -->|"selects style"| node_templates
node_generator -->|"builds draft"| node_lettergen
node_generator -->|"requests polish"| node_polisher
node_polisher -.->|"polishes via API"| node_openrouter
node_generator -->|"displays draft"| node_preview
node_preview -->|"exports letter"| node_export
node_generator -->|"shows guidance"| node_tutorial
node_generator -->|"shows walkthrough"| node_tour

click node_app "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/App.tsx"
click node_index "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/pages/Index.tsx"
click node_authform "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/AuthForm.tsx"
click node_auth "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/auth.ts"
click node_generator "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/pages/Generator.tsx"
click node_upload "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/ResumeUpload.tsx"
click node_parser "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/resumeParser.ts"
click node_jobskills "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/skillMatcher.ts"
click node_matcher "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/skillMatcher.ts"
click node_health "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/ResumeHealthDashboard.tsx"
click node_skillview "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/SkillAnalysis.tsx"
click node_templates "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/TemplateSelector.tsx"
click node_lettergen "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/coverLetterGenerator.ts"
click node_polisher "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/coverLetterPolisher.ts"
click node_preview "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/CoverLetterPreview.tsx"
click node_export "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/exportUtils.ts"
click node_tutorial "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/InteractiveTutorial.tsx"
click node_tour "https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/SpotlightTour.tsx"

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_index,node_authform,node_auth toneBlue
class node_upload,node_parser,node_documents,node_jobskills,node_matcher,node_health,node_skillview,node_browserstore toneAmber
class node_generator,node_templates,node_lettergen,node_polisher,node_preview,node_export,node_openrouter toneMint
class node_tutorial,node_tour toneRose
class node_user toneIndigo
```

## Components

### App and access

- [App routing](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/App.tsx): `src/App.tsx`
- [Session gate](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/pages/Index.tsx): `src/pages/Index.tsx`
- [Sign-in form](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/AuthForm.tsx): `src/components/AuthForm.tsx`
- [Local auth](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/auth.ts): `src/lib/auth.ts`

### Resume analysis

- [Resume input](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/ResumeUpload.tsx): `src/components/ResumeUpload.tsx`
- [Resume parser](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/resumeParser.ts): `src/lib/resumeParser.ts`
- **PDF/DOCX parsers**
- [Job skill extraction](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/skillMatcher.ts): `src/lib/skillMatcher.ts`
- [Skill matching](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/skillMatcher.ts): `src/lib/skillMatcher.ts`
- [Resume health](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/ResumeHealthDashboard.tsx): `src/components/ResumeHealthDashboard.tsx`
- [Skill analysis](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/SkillAnalysis.tsx): `src/components/SkillAnalysis.tsx`

### Letter creation

- [Generator workflow](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/pages/Generator.tsx): `src/pages/Generator.tsx`
- [Template selection](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/TemplateSelector.tsx): `src/components/TemplateSelector.tsx`
- [Letter generation](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/coverLetterGenerator.ts): `src/lib/coverLetterGenerator.ts`
- [AI polishing](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/coverLetterPolisher.ts): `src/lib/coverLetterPolisher.ts`
- [Letter editor](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/CoverLetterPreview.tsx): `src/components/CoverLetterPreview.tsx`
- [PDF/DOCX export](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/lib/exportUtils.ts): `src/lib/exportUtils.ts`

### User experience

- [Guided tutorial](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/InteractiveTutorial.tsx): `src/components/InteractiveTutorial.tsx`
- [Spotlight tour](https://github.com/jahnavim23/infosys-coverletter/blob/main/src/components/SpotlightTour.tsx): `src/components/SpotlightTour.tsx`

### Other components

- **Applicant**
- **Browser storage**
- **OpenRouter API**

## Connections

- Applicant → App routing: opens
- App routing → Session gate: routes
- Session gate → Local auth: reads session
- Session gate → Sign-in form: shows unauthenticated
- Sign-in form → Local auth: signs in/up
- Local auth → Browser storage: reads/writes
- Session gate → Generator workflow: shows signed-in
- Generator workflow → Resume input: collects resume
- Resume input → PDF/DOCX parsers: extracts file text
- Generator workflow → Resume parser: parses resume
- Generator workflow → Resume health: renders resume metrics
- Generator workflow → Job skill extraction: extracts job skills
- Generator workflow → Skill matching: matches skills
- Generator workflow → Skill analysis: shows alignment
- Generator workflow → Template selection: selects style
- Generator workflow → Letter generation: builds draft
- Generator workflow → AI polishing: requests polish
- AI polishing → OpenRouter API: polishes via API
- Generator workflow → Letter editor: displays draft
- Letter editor → PDF/DOCX export: exports letter
- Generator workflow → Guided tutorial: shows guidance
- Generator workflow → Spotlight tour: shows walkthrough
