Summary
Add a position target style concept that captures the fundamental differences between position types and drives defaults throughout the app — page length targets, content depth, formatting style, and emphasis.
Motivation
The current design uses fixed page-count thresholds (≤2 pages = green, etc.) and a single set of content-selection heuristics regardless of the kind of position being applied for. In practice, these differ significantly:
| Dimension |
Academic / Research / Medical |
Industry / Corporate |
| Ideal CV length |
3–10+ pages (comprehensive) |
1–2 pages (concise) |
| Publications |
Required, comprehensive |
Omit or 2–3 highlights max |
| Teaching / service |
Include |
Omit |
| Bullet style |
Full sentences, methodology detail |
Impact-first, metric-driven |
| Summary |
Research statement |
3-line career summary |
| ATS emphasis |
Journal names, grant agencies, methods |
Keywords, tools, outcomes |
Without a position type concept, the app either uses wrong defaults or forces the user to manually override many settings for every session.
Proposed approach
Define a position target style as a named preset (stored in config.yaml and overridable per-session) with the following fields:
position_styles:
industry:
label: "Industry / Corporate"
page_target: 2 # pages; used for badge thresholds in settings bar
page_warn_pct: 10 # amber when >10% over target
page_error_pct: 25 # red when >25% over target
include_publications: false
include_teaching: false
bullet_style: "impact" # impact-first, metric-driven
summary_style: "career" # 3-line career summary
ats_mode: "keywords"
academic:
label: "Academic / Research"
page_target: null # no upper limit; no colour warning
page_warn_pct: null
page_error_pct: null
include_publications: true
include_teaching: true
bullet_style: "detail" # full methodology
summary_style: "statement" # research/teaching statement
ats_mode: "methods"
medical_clinical:
label: "Medical / Clinical"
page_target: null
include_publications: true
include_teaching: true
bullet_style: "clinical"
summary_style: "statement"
ats_mode: "clinical"
government:
label: "Government / Federal"
page_target: null # federal resumes often 4–6 pages
bullet_style: "detail"
summary_style: "career"
ats_mode: "keywords"
The active position style would be:
- Set during job intake (user selects or the LLM infers from the job description)
- Overridable per-session in the settings bar
- Used to set defaults for page-count badge thresholds, include/exclude suggestions, bullet rewrite tone, and summary style
UI integration points
- Job intake: Add "Position type" selector (dropdown or LLM-inferred with confirmation)
- Settings bar (§5 of redesign): Show active style: "Style: Industry ▾" with override dropdown
- Page count badge: Use
page_target from the active style for threshold colours instead of fixed values
- LLM prompts: Pass position style as context to customisation and rewrite prompts
- Master CV tab: Allow per-section "include by default for [style]" flags
Out of scope for this issue
- Custom user-defined styles (future)
- Per-section style overrides (future)
- Style inference from job description (can be a separate issue)
Related
tasks/ui-redesign-proposal.md §5 (page count badge now references this issue)
config.yaml — where presets would be stored
scripts/utils/cv_orchestrator.py — where include/exclude and rewrite logic lives
Summary
Add a position target style concept that captures the fundamental differences between position types and drives defaults throughout the app — page length targets, content depth, formatting style, and emphasis.
Motivation
The current design uses fixed page-count thresholds (≤2 pages = green, etc.) and a single set of content-selection heuristics regardless of the kind of position being applied for. In practice, these differ significantly:
Without a position type concept, the app either uses wrong defaults or forces the user to manually override many settings for every session.
Proposed approach
Define a position target style as a named preset (stored in
config.yamland overridable per-session) with the following fields:The active position style would be:
UI integration points
page_targetfrom the active style for threshold colours instead of fixed valuesOut of scope for this issue
Related
tasks/ui-redesign-proposal.md§5 (page count badge now references this issue)config.yaml— where presets would be storedscripts/utils/cv_orchestrator.py— where include/exclude and rewrite logic lives