User flows and state management for Resume Matcher.
Dashboard → Upload Master Resume → Tailor for Job → View/Edit → Download PDF
1. Dashboard (/dashboard)
No master: "Initialize Master Resume" card
Has master: "Master Resume" card + tailored tiles
Create: "+" card opens /tailor
Auto-refreshes on window focus
2. Resume Viewer (/resumes/[id])
Read-only display at 250mm width
Actions: Back, Edit, Download PDF, Delete
Delete shows confirmation + success dialogs
Job description textarea (min 50 chars)
Process: Upload JD → Improve → Redirect to viewer
Left panel: Editor (forms + formatting)
Right panel: WYSIWYG preview
Tabs: Resume | Cover Letter | Outreach
Data priority: URL param → Context → localStorage → defaults
System status (cached)
LLM configuration (6 providers)
Last fetched indicator + manual refresh
Pagination Rules
Sections CAN span pages
Individual items stay together
Pages ≥50% full before break
Headers never orphaned
Key
Purpose
master_resume_id
Master resume UUID
resume_builder_draft
Auto-saved form
resume_builder_settings
Template prefs
Initial fetch on app start
30-min auto-refresh
Optimistic counter updates
Click Delete → Confirmation dialog
API: DELETE /resumes/{id}
Clear localStorage if master
Success dialog → Redirect to dashboard
Action
Result
Rename
Click pencil icon
Reorder
Up/down arrows
Hide
Eye icon (hidden sections still editable)
Delete
Hides default, removes custom
Add
"Add Section" button
import { fetchResume , API_BASE } from '@/lib/api' ;
// Resume operations
fetchResume , fetchResumeList , updateResume , deleteResume
uploadJobDescriptions , improveResume , downloadResumePdf
// Config operations
fetchLlmConfig , updateLlmConfig , testLlmConnection