# Career schema — typed artifacts for skills, work history, talks, positioning, and publication. # All types include `linked_nodes` referencing IDs from .ontology/core.ncl. # This creates the DAG connection between career artifacts and the ontology. # # Output: .ontology/career.ncl exports to JSON → Nu script generates YAML for cv_repo. # ── Skill ──────────────────────────────────────────────────────────────────── let proficiency_tier_type = [| 'Expert, 'Advanced, 'Intermediate, 'Foundational |] in let skill_type = { id | String, name | String, tier | proficiency_tier_type, proficiency | Number, years | Number | default = 0, linked_nodes | Array String | default = [], evidence | Array String | default = [], note | String | default = "", } in # ── Work Experience ─────────────────────────────────────────────────────────── let work_experience_type = { id | String, company | String, company_url | String | default = "", position | String, date_start | String, date_end | String | default = "present", location | String | default = "", description | String | default = "", achievements | Array String | default = [], tools | Array String | default = [], linked_nodes | Array String | default = [], } in # ── Talk / Activity ─────────────────────────────────────────────────────────── let talk_status_type = [| 'Idea, 'Proposed, 'Accepted, 'Delivered, 'Archived |] in let talk_type = { id | String, title | String, event | String, date | String | default = "", location | String | default = "", description | String | default = "", slides_url | String | default = "", video_url | String | default = "", repository | String | default = "", status | talk_status_type, linked_nodes | Array String | default = [], } in # ── Positioning Strategy ────────────────────────────────────────────────────── let positioning_type = { id | String, name | String, core_message | String, target | String, linked_nodes | Array String | default = [], note | String | default = "", } in # ── Company Target ───────────────────────────────────────────────────────────── let company_status_type = [| 'Active, 'Watching, 'Inactive, 'Applied, 'Closed |] in let company_target_type = { id | String, name | String, url | String | default = "", status | company_status_type, fit_signals | Array String | default = [], linked_nodes | Array String | default = [], note | String | default = "", } in # ── Publication Card ────────────────────────────────────────────────────────── # Project cards for blog grid, CV, and proposals. # project_node references a node ID in .ontology/core.ncl. let project_pub_status_type = [| 'Active, 'Beta, 'Maintenance, 'Archived, 'Stealth |] in # Career overlay for a project card. # project_node references the canonical card in the portfolio repo. # Only career-specific fields live here — display metadata lives in portfolio/projects/{id}/card.ncl. let publication_card_type = { project_node | String, featured | Bool | default = false, sort_order | Number | default = 0, # Optional overrides — when career context needs a different tagline than the portfolio card tagline_override | String | default = "", } in # ── Root export ─────────────────────────────────────────────────────────────── { ProficiencyTier = proficiency_tier_type, TalkStatus = talk_status_type, CompanyStatus = company_status_type, ProjectPubStatus = project_pub_status_type, Skill = skill_type, WorkExperience = work_experience_type, Talk = talk_type, Positioning = positioning_type, CompanyTarget = company_target_type, PublicationCard = publication_card_type, CareerConfig = { skills | Array skill_type | default = [], experiences | Array work_experience_type | default = [], talks | Array talk_type | default = [], positioning | Array positioning_type | default = [], companies | Array company_target_type | default = [], publications | Array publication_card_type | default = [], }, }