v3.24.0 - Profile Core Package, Cover Letter Templates, Typed Section Editor, and Master Profile Import
v3.24.0
VeriWorkly v3.24.0 ships the new @veriworkly/profile-core monorepo package, three new cover letter templates, a branded VeriWorkly Special resume template, a registry-driven typed section editor, and one-click master profile import for portfolio users.
Highlights
- 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
New features
Profile core package
-
@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.
Cover letter templates
-
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.
SVG thumbnails for all three templates are published to both Studio and the marketing site.
VeriWorkly Special resume template
A branded template with a gradient accent rail on the left sidebar and a dark header band. Available in both web and PDF rendering modes.
TypedSectionEditor
Replaces DraggableSection and GenericCustomSection with a single registry-driven dispatch component. All 13 section types (basics, experience, education, skills, projects, certifications, achievements, awards, languages, interests, volunteer, publications, references) route through one component. Section forms gained new fields: GPA and honors in Education, employment-type picker in Experience, tech-stack tags and URL pairs in Projects, proficiency level in Languages, DOI and publisher in Publications, available-on-request toggle in References, and a character counter in Summary.
SectionVisibilitySettings was rewritten with drag-to-reorder.
Portfolio master profile import
A new Import from Master Profile button in the portfolio editor calls projectToPortfolio on the user's saved master profile and pre-fills every portfolio section. No manual copy-paste required.
Document editor improvements
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 layouts
Studio app shell
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 panel
Analytics
document-events.ts: new service trackingdocument-create,document-open, and export eventsauth_login_successmetric added to the analytics service
Improved
resume-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
- 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).
Test coverage
New contract and integration tests added in this release:
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
Full changelog
- #195 — [Fix] [Portfolio]: Resolve text selection styling in globals.css
Contributors
Thank you to everyone who contributed code to this release:
Thank you for using VeriWorkly!