@ossy/resumes
v3.9.0
Published
Resumes feature package — create, view, and manage professional resumes with experience and profile sections
Readme
@ossy/resumes
Resumes feature package for the Ossy platform — provides resume creation, viewing, and management pages that are auto-discovered by @ossy/app when the package is installed.
What's included
Pages
| File | Page id | Default paths |
|---|---|---|
| home.page.jsx | resumes/home | /resumes (en + sv) |
| Resume.page.jsx | resume | /resumes/:resumeId (en + sv) |
| ResumeCreate.page.jsx | resumes/create | /resumes/create (en), /resumes/skapa (sv) |
| Consulting.page.jsx | resumes/consulting | /resumes/consulting (en), /resumes/konsulting (sv) |
Components & hooks
| Export | Description |
|---|---|
| useResumes | Hook to list and create resume directories |
| useResume | Hook to load a resume directory, linked profile resource, and experience documents |
| Resumes | Grid of resume preview cards |
| ResumesList | Authenticated list of resumes with loading/error states |
| Resume | Full resume view with sidebar (profile via @ossy/profile) |
| ResumeCreate | Form to create a new resume |
| ResumeSidebar | Options sidebar — profile image, summary, experiences, remove |
| Definition | Presentation metadata for store/sidebar (id, title, description, icon, status) — see ENTITLEMENTS.md |
| cover | Marketing cover copy ({ title, text }) |
| features | Marketing feature list |
Export
| Format | Module | Notes |
|---|---|---|
| PNG | download-resume-image.js | DOM capture of the A4 sheet |
| PDF | download-resume-pdf.js | DOM capture embedded on an A4 PDF page |
| Word (.docx) | download-resume-docx.js / build-resume-docx.js | Editable document from shaped profile + experiences |
Schemas
Resume content schemas live in src/*.schema.js and are auto-discovered at build time. Canonical ids are exported from schema-ids.js:
| Schema | Id | File |
|--------|----|------|
| Resume experience | @ossy/resumes/schema/resume-experience | resume-experience.schema.js |
Profile summary and image are stored as @ossy/profile/schema/profile documents (from @ossy/profile), not as a local resume-summary schema. Each resume directory holds one profile resource plus zero or more experience documents.
Experience descriptions (Markdown)
Experience Description is a richtext field authored as Markdown (lists, links, emphasis). ResumeExperience renders it with @ossy/design-system MarkdownViewer — the same pattern as tool docs (@ossy/tools). Plain text continues to work without Markdown syntax.
A dedicated Markdown resource type (instead of structured experiences) remains a possible follow-up; this package keeps the structured experience model and uses MD only for description bodies.
Data model
- Resume directory — a folder resource under the resumes location (
useResumes/useResume) - Profile —
@ossy/profile/schema/profilechild document; image id stored oncontent.imageId - Experience —
@ossy/resumes/schema/resume-experiencechild documents
useResume returns { resume, profileId, profileResource, experiences, setProfileImage, createProfile, createExperience, remove }. The Resume page loads shaped profile data via useProfile(profileId).
Usage
npm install @ossy/resumes @ossy/profile @ossy/resources
npm run build@ossy/app discovers the pages automatically by reading the "ossy": { "src": "./src" } field in this package's package.json.
TODOs / known cross-feature dependencies
ResourceFactory (high priority)
ModaUpdateResumeExperience originally imported ResourceFactory from website-ossy/src/resources/ResourceFactory.jsx. This is a complex component with many sub-dependencies (DocumentView, DocumentEdit, ImageResource, etc.).
Workaround: ModaUpdateResumeExperience now accepts an optional ResourceFactory prop. Pass the component from your app to restore full editing functionality:
import { ResourceFactory } from '../resources/ResourceFactory.jsx'
<ModaUpdateResumeExperience id={id} ResourceFactory={ResourceFactory} />Long-term fix: Extract an @ossy/resources package.
SalesPage (medium priority)
home.page.jsx and Consulting.page.jsx originally showed a SalesPage for unauthenticated users from website-ossy/src/sales/Sales.page.jsx. The unauthenticated state currently shows a minimal placeholder.
Long-term fix: Extract an @ossy/sales package.
Peer dependencies
| Package | Version |
|---|---|
| @ossy/app | >=1.0.0 |
| @ossy/connected-components | >=1.0.0 |
| @ossy/design-system | >=1.0.0 |
| @ossy/profile | >=1.0.0 |
| @ossy/resources | >=1.0.0 |
| @ossy/router-react | >=1.0.0 |
| @ossy/sdk-react | >=1.0.0 |
| ramda | >=0.29.0 |
| react | >=19.0.0 <20.0.0 |
