v3.24.0Minor
Profile Core Package, Cover Letter Templates, Typed Section Editor, and Master Profile Import
---
Added(32)
- New
@veriworkly/profile-corepackage with a shared MasterProfile schema, normalizer, validator, migration pipeline, and document projections used by Studio, Portfolio, and the server - Three new cover letter templates: Minimalist, Executive, and ATS Essential
- VeriWorkly Special resume template with a gradient accent rail and dark sidebar
- TypedSectionEditor component replaces the old ad-hoc per-section architecture
- Import from Master Profile in the portfolio editor pre-fills all sections in one click
- Corrupt master profiles no longer crash the editor; the service salvages valid fields and falls back to defaults
- 614 passing tests across server, Studio, and Portfolio before release
@veriworkly/profile-core(new package): Shared workspace package containing the canonical MasterProfile Zod schema, normalizer (normalizeMasterProfile), validator (validateMasterProfile), v1-to-v2 migration pipeline, and document projections (projectToResume,projectToCoverLetter,projectToPortfolio). Common helpers for phone formatting, sanitization, and primitive coercion are also included. Studio, Portfolio, and the server now all import from this single source. The build is wired intobuild:profile-coreand pulled intobuild,build:studio,build:portfolio, andbuild:server.- Server profileImportService: Rewrote document seeding to use
projectToResumeandprojectToCoverLetterfrom profile-core. Removed 200+ lines of inline schema code. - Server masterProfileValidator: Now a thin wrapper around
profile-core validateMasterProfile. Reduced from 350+ lines of inlined Zod to under 30 lines. - document-workspace-service.seedFromMasterProfile: New server-side method that creates either a RESUME or COVER_LETTER document from a stored master profile, handling both document kinds from a single entry point.
- Minimalist: Full-width stacked masthead, generous whitespace, flush left type. Designed for roles where clean presentation matters more than structure.
- Executive: Centered double-rule masthead with a traditional dateline-over-address layout. Closest to a formal business letter format.
- ATS Essential: Classic left-aligned block letter with no decorative elements. The most parser-safe structure of the three.
SectionVisibilitySettingswas rewritten with drag-to-reorder. MasterProfileClientrewritten with sidebar navigation, dirty-state tracking, and auto-save bannerEditorEntryRedirectnow routes/editorto the resume list instead of a blank shell- Login page supports
returnToquery param for post-login redirects AdditionalSectionsadds typed section cards for achievements, awards, certifications, volunteer, interests, languages, and referencesAppearanceAndVisibilitySectionsextracted as a dedicated settings paneldocument-events.ts: new service trackingdocument-create,document-open, and export eventsauth_login_successmetric added to the analytics service ---document-creation: resume and cover letter creation from master profile and blank, corrupt-profile recoverydocument-import: JSON import round-trip for both document kindsdocument-projections: 24 assertions covering allprojectToResumeandprojectToCoverLetterfield mappingsmaster-profile-migrations: v1-to-v2 migration pipeline andNewerSchemaVersionErrorguardmaster-profile: 27 tests covering lifecycle read/write, backup on corrupt, partial-invalid salvage, and never-throws invariantresume-export-source: HTML, Markdown, and DOCX export source puritytyped-sections: TypedSectionEditor renders all 13 section kinds correctlymaster-profile-projection(Portfolio): purity, determinism, and deep-clone invariant using profile-core test utilities- Playwright E2E bootstrap under
tests/browser/withvitest.browser.config.ts - Server:
master-profile-roundtrip,profile-import, andDocumentServicecontract tests --- - #195 — [Fix] [Portfolio]: Resolve text selection styling in globals.css ---
Improved(16)
content-identity.ts: stable identity helpers for sections and itemslink-types.ts: typed link-kind registry (social, portfolio, other)DocumentStateCard,LinksEditor,ListEditorControls,useIndexedListEditor: new editor componentsuseFlushPendingSavesOnExit: flushes pending saves before tab close to avoid data lossexport-dom-markers.ts: annotates the DOM with page-break hints for HTML exportresume-render-items.ts: per-section hydration outside the React tree, used by export tests- JSON import pipeline for both resume and cover letter document types
- Field-level validation rules module
export-markdownfully rewritten to respect section visibility flagsexport-htmladds proper page-break markers for multi-page layoutsresume-storerestructured with explicit loading, dirty, and error state slices- Cover letter editor split into focused sub-components with a modular store
- Portfolio
EditorCommandBargains keyboard shortcut hints - OpenAPI spec updated with new cover letter template enum values and version references
cover-letter-builder.mdxupdated from 2 templates to 5 with per-template descriptions- Font loading moved to CSS, removing the
DocumentFontLoadercomponent that caused a flash on editor mount ---
Fixed(3)
- Corrupt master profile no longer crashes the editor. The service now salvages valid partial fields and falls back to defaults rather than throwing.
DocumentFontLoaderflash on editor mount fixed by moving font loading to CSS.- Portfolio
globals.csstext selection styling fixed for Firefox (PR #195). ---
#auto-synced