Skip to content

feat: Position target style presets (academic/research vs. industry) #126

Description

@warnes

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:

  1. Set during job intake (user selects or the LLM infers from the job description)
  2. Overridable per-session in the settings bar
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions