Files
srbhr--resume-matcher/docs/agent/architecture/frontend-workflow.md
T
wehub-resource-sync 5bdf4cc89a
Publish Docker Image / publish (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:39:36 +08:00

89 lines
2.2 KiB
Markdown

# Frontend Workflow
> User flows and state management for Resume Matcher.
## Core User Flow
```
Dashboard → Upload Master Resume → Tailor for Job → View/Edit → Download PDF
```
## Pages
### 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
### 3. Tailor (`/tailor`)
- Job description textarea (min 50 chars)
- Process: Upload JD → Improve → Redirect to viewer
### 4. Builder (`/builder`)
- **Left panel:** Editor (forms + formatting)
- **Right panel:** WYSIWYG preview
- **Tabs:** Resume | Cover Letter | Outreach
- Data priority: URL param → Context → localStorage → defaults
### 5. Settings (`/settings`)
- 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
## State Management
### localStorage
| Key | Purpose |
|-----|---------|
| `master_resume_id` | Master resume UUID |
| `resume_builder_draft` | Auto-saved form |
| `resume_builder_settings` | Template prefs |
### StatusCache Context
- Initial fetch on app start
- 30-min auto-refresh
- Optimistic counter updates
## Delete Flow
1. Click Delete → Confirmation dialog
2. API: `DELETE /resumes/{id}`
3. Clear localStorage if master
4. Success dialog → Redirect to dashboard
## Section Management
| 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 |
## API Client
```typescript
import { fetchResume, API_BASE } from '@/lib/api';
// Resume operations
fetchResume, fetchResumeList, updateResume, deleteResume
uploadJobDescriptions, improveResume, downloadResumePdf
// Config operations
fetchLlmConfig, updateLlmConfig, testLlmConnection
```