refactor(career): Phase 1 increment — user-facing terminology + component split
UI-only restructuring of the Career Profile surface. No change to
database models, CareerProfiles schema, CvVariants, extraction APIs, AI
services, CV rendering, or public CV.
Terminology -> user-facing (i18n strings):
- "Structured CV editor" -> "Career information"
- "CV structure overview" -> "Profile sections"
- "Summary bullets" -> "Professional summary"
- "Core skills" -> "Skills"
- "Analyze sections" -> "Read sections"
- "Original extraction" -> "Original import"
- hardcoded "Master career profile" -> "Career profile"
Help text de-jargoned; the Career information help now frames it as the
source the CV Builder consumes.
Component split (first step): extract ProfileCompleteness (completeness
meter + missing chips + version history) into src/views/career/. Display
only, props in, no state or API.
Save path untouched: api.put("/career/profile", { profile, cvText }). A
new test pins that exact call as the refactor invariant so the remaining
section extraction cannot silently change save behaviour. Existing
profile-page tests re-pointed to the new labels; every behavioural
assertion (save, parse, field values) kept.
Verified: tsc clean, production build clean, 136 frontend tests pass
(135 + 1 invariant). Sidebar fix from the previous task still passes.
Backend untouched.
The remaining Phase 1 work (per-section editor components, hiding the
template-driven builder and structure-overview blocks, actionable
per-section empty states) is staged in docs/career-workspace-ux-refactor.md
because it touches the live extraction test surface and is best verified
by driving the authenticated UI. This increment is a clean, non-regressing
checkpoint.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -218,20 +218,20 @@ export const translations = {
|
||||
profileCvUploadFailed: "Failed to upload CV.",
|
||||
profileCvTextLabel: "Profile CV / master resume text",
|
||||
profileCvTextHelp: "Keep this updated and specific. Include recent roles, tools, achievements, measurable outcomes, and the work you want to be hired for next. If extraction misses something, edit it here manually.",
|
||||
profileCvStructuredDefaultHint: "The structured CV stays front and center. Open the original extraction only when you need to verify or clean up parser output.",
|
||||
profileCvRawPanelTitle: "Original extraction",
|
||||
profileCvRawPanelHelp: "Usually messy, but useful for checking what the parser actually pulled from the uploaded file.",
|
||||
profileCvStructuredDefaultHint: "Your career information stays front and center. Open the original import only when you need to check or clean up what was read from your file.",
|
||||
profileCvRawPanelTitle: "Original import",
|
||||
profileCvRawPanelHelp: "Usually messy, but useful for checking what was actually read from the uploaded file.",
|
||||
profileCvPreferredUploads: "Supported uploads: PDF, DOCX, TXT, MD, PNG, JPG, JPEG, WEBP.",
|
||||
profileCvSectionTools: "Section rewrite tools",
|
||||
profileCvStructureOverview: "CV structure overview",
|
||||
profileCvStructureOverviewHelp: "Parse your current CV text into reusable sections so you can spot missing structure before tailoring.",
|
||||
profileCvStructureParse: "Analyze sections",
|
||||
profileCvStructureParsing: "Analyzing sections...",
|
||||
profileCvStructureParsed: "CV structure analyzed.",
|
||||
profileCvStructureParseFailed: "Failed to analyze CV structure.",
|
||||
profileCvStructureEmpty: "No parsed sections yet.",
|
||||
profileCvStructuredEditor: "Structured CV editor",
|
||||
profileCvStructuredEditorHelp: "Edit reusable CV data directly so generators and matching can work from stable fields instead of raw text alone.",
|
||||
profileCvStructureOverview: "Profile sections",
|
||||
profileCvStructureOverviewHelp: "Read your current CV text into sections so you can see what your profile will contain.",
|
||||
profileCvStructureParse: "Read sections",
|
||||
profileCvStructureParsing: "Reading sections...",
|
||||
profileCvStructureParsed: "Sections read from your CV.",
|
||||
profileCvStructureParseFailed: "Couldn't read sections from your CV.",
|
||||
profileCvStructureEmpty: "No sections read yet.",
|
||||
profileCvStructuredEditor: "Career information",
|
||||
profileCvStructuredEditorHelp: "Your career facts. The CV Builder uses this information to create documents — edit it here and every CV stays up to date.",
|
||||
profileCvExtractionHistory: "Extraction history",
|
||||
profileCvExtractionHistoryHelp: "See which parser run produced the current structured profile and reprocess from the stored source artifact when needed.",
|
||||
profileCvExtractionHistoryEmpty: "No extraction runs yet.",
|
||||
@@ -249,8 +249,8 @@ export const translations = {
|
||||
profileCvContactLocation: "Location",
|
||||
profileCvContactWebsite: "Website",
|
||||
profileCvContactLinkedIn: "LinkedIn",
|
||||
profileCvStructuredSummary: "Summary bullets",
|
||||
profileCvStructuredSkills: "Core skills",
|
||||
profileCvStructuredSummary: "Professional summary",
|
||||
profileCvStructuredSkills: "Skills",
|
||||
profileCvStructuredInterests: "Interests",
|
||||
profileCvStructuredLanguages: "Languages",
|
||||
profileCvStructuredJobs: "Work experience",
|
||||
|
||||
Reference in New Issue
Block a user