Spec: Introduce Projects Skills
Spec: Introduce Projects Skills
Overview
Introduce a structured
skillsfront matter field for all project pages under_work/projects/, using the canonical vocabulary in_data/skills.ymland a rendering pattern aligned with the resume entries.
Status: done
Context & Background
Project pages in _work/projects/*.md currently expose skills as free-form Markdown bullets inside the page body. These lists are inconsistent in structure and quality: some are nested by category, some contain outdated or overly specific technologies, some contain duplicates, and some are placeholders such as n/a.
The resume and education entries already use a structured front matter skills array backed by the canonical vocabulary in _data/skills.yml, and render it through a Liquid loop. _resume/education/high-school/high-school-diploma.md also demonstrates the desired exception pattern for rare or historically relevant non-canonical skills: render the canonical page.skills list first, then append additional plain Markdown bullets afterward.
The _work/projects/ collection feeds the “Featured” section in work.md, but the listing page itself MUST remain unchanged. This effort is limited to the individual project pages and their skill representation.
User Story
As the maintainer of my personal website I want project pages to use structured, canonical skills So that project skills are more consistent, easier to maintain, and displayed with the same pattern already used in the resume section
Scope
In Scope
- Add a front matter
skillsarray to every file in_work/projects/*.md - Normalize each project’s primary skills to 6-7 items using
_data/skills.yml - Prefer predominantly technical skills for each project
- Replace the current free-form project skills sections with a Liquid loop over
page.skills - Preserve rare or historically valuable non-canonical skills only as manual Markdown bullets after the
page.skillsloop, following the pattern used in_resume/education/high-school/high-school-diploma.md - Clean up placeholders, nested skill group labels, duplicates, and legacy wording in project skill sections
Out of Scope
- Modifying
work.mdor the “Featured” listing behavior - Adding new canonical skills to
_data/skills.yml - Changing project descriptions, dates, links, showcase assets, or other unrelated metadata
- Refactoring collection layouts or introducing shared includes/layouts for project skills rendering
Pre-development Checks
- Inventory all current
### Skillssections in_work/projects/*.mdand identify nested lists, duplicates, placeholders, and rare skills worth preserving - Confirm the exact 6-7 canonical skills for each project using
_data/skills.ymlas the only allowed vocabulary for front matter - Verify that the rendering pattern for rare skills matches
_resume/education/high-school/high-school-diploma.md - Verify that no change to
work.mdis required to complete this task
Acceptance Criteria
-
GIVEN a project file in
_work/projects/*.mdWHEN I inspect its front matter THEN it contains askillsarray with 6-7 items and every item exists in_data/skills.yml -
GIVEN a project page with a
### Skillssection WHEN the page is rendered THEN the canonical skills are displayed via a Liquid loop overpage.skills -
GIVEN a project with rare or historically relevant skills not present in
_data/skills.ymlWHEN those skills should still be shown THEN they are rendered only as plain Markdown bullets after thepage.skillsloop, following the pattern in_resume/education/high-school/high-school-diploma.md -
GIVEN a project page whose current skills are nested, duplicated, overly specific, or set to
n/aWHEN the migration is completed THEN the structuredskillsarray contains only canonical vocabulary and the page no longer relies on the old free-form list structure -
GIVEN the
work.mdpage WHEN this task is completed THEN its content and behavior remain unchanged
Verification
Method: manual steps
Commands:
# Inspect structured skills and rendering pattern across all project files
rg -n "^skills:|^### Skills|page\\.skills|^- " _work/projects
# Verify the site builds after the migration
bundle exec jekyll build
Expected output:
- Every file in _work/projects/ contains a front matter skills array with 6-7 canonical skills
- Every project page renders canonical skills through page.skills in the Skills section
- Rare non-canonical skills, when present, appear only as manual bullets after the loop
- Jekyll build completes successfully
- work.md remains unchanged
Technical Constraints
- MUST use exact skills from
_data/skills.ymlfor the front matterskillsarray - MUST add 6-7 skills per project
- SHOULD keep the structured
skillsarray predominantly technical - MUST render structured project skills via
page.skills - MUST preserve rare non-canonical skills only as manual bullets after the
page.skillsloop when they add historical or explanatory value - MUST NOT modify
work.md - MUST NOT add or rename canonical skills in
_data/skills.yml - SHOULD remove placeholders such as
n/a, nested group headings, duplicates, and outdated free-form wording from the structured skills representation