v5.0.0 Json resume - #463
Conversation
5c26fb7 to
a6e2623
Compare
The folio stops being a hand maintained page. Remove the Vue, Vite & Tailwind site : its pages, components, layouts, locales, utils, assets and the tests that covered them, along with the tooling that only served it, eslint, postcss, tailwind, dependency-cruiser and the nonce script. The old typescript resume data goes too, the JSON Resume files replace it.
The themes are workspace packages and their versions live in the catalog block of pnpm-workspace.yaml, the single source of truth. pnpm check runs types, format, lint, both resume validators and the tests through turbo, so an unchanged step is served from cache. Linting moves from eslint to oxlint & oxfmt, vitest enforces a 100% coverage threshold, and CI runs pnpm check.
One JSON Resume file per language, a French CV and an English resume, refreshed from LinkedIn. Next to them : the profile photos, the company logos the work & volunteer entries point at through their image field, the keyword file the blue-buzz theme emphasizes, and the project images moved over from the old site.
Validate every resume against the official schema, plus the checks the schema does not enforce : it has no required field at all, so an empty object would pass. Require a name and at least one filled section, and check the typography of every prose string, a resume is a printed document : typographic apostrophes and quotes, en dashes, the ellipsis character, single spaces, French non-breaking spaces before : ; ! ? and thousands separators.
A local JSON Resume theme mimicking the DoYouBuzz minimal design : blue #50a3d9 accent, Open Sans, profile on top then a 70/30 two columns body, experiences on the left and side widgets on the right. It localizes its section titles in english or french from the resume canonical name, and emphasizes the words listed in data/keyword.txt wherever they appear in a free text.
Render every resume with every theme to standalone html, print each one to A4 pdf through Chrome, shoot a preview screenshot and build an index page listing the themes as cards. --theme narrows the run to one or more themes, --out picks the output folder. A theme that fails is reported and skipped, the other ones still produce their output.
Run each cli in a subprocess, the way a user does, so the entrypoints themselves are covered : the exit codes, the usage text, and what they write to stdout on a valid resume, a broken one and a missing file.
The screenshots of the past folio designs and the inspiration boards were only living in the site assets. Move them under docs/ with their notes so they survive the site removal and stay available for the next one.
README covers the themes, the render options and the checks, CLAUDE.md the layout and the code & testing practices, TESTING.md the full testing guide, TODOS.md the two open items carried over from the old site. The changelog records the whole move and the version goes to 5.0.0 : nothing from the previous page carries over.
There was a problem hiding this comment.
🔵 Needs a closer look
It is a repository-wide rewrite (full site removal plus new CLIs, theme, toolchain, and tests) whose core logic files fall outside the reviewable diff, so it warrants final human review.
Pull request overview
This PR is the v5.0.0 pivot that turns the folio from a hand-maintained Vue/Vite/Tailwind website into a JSON Resume repository. The resumes in data/ become the source of truth and are rendered to standalone HTML and PDF through a set of themes. The old site (pages, components, Vue utils/tests, Tailwind/PostCSS config) is removed, and a new src/ layout, CLIs, a local blue-buzz theme, a turbo pipeline, and a 100%-coverage test suite take its place.
Changes:
- Removes the legacy Vue site (utils, tests, snapshots, Tailwind config) and replaces the toolchain (new
tsconfig.app/nodeproject references,turbo.json,oxlint/oxfmt, catalog-based deps,packageManager). - Adds the JSON Resume tooling and the
blue-buzztheme (style.css, keyword emphasis, localized section titles) plus new tests (render-browser.test.ts,cli-e2e.test.ts). - Refreshes docs (
README.md,CHANGELOG.md,TESTING.md,TODOS.md) and scripts for the new workflow.
File summaries
| File | Description |
|---|---|
package.json |
New scripts (render/check/lint/test), version 5.0.0, catalog deps, packageManager; test:update regresses to watch mode. |
README.md |
New "Json Resume Themes"/"Checks" sections; render:blue is described as english-only but renders every resume. |
vitest.config.ts |
Coverage scoped to src, minimal reporter, 100% thresholds. |
turbo.json |
New root-task pipeline with caching inputs/outputs for check/lint/test. |
tsconfig.json / tsconfig.app.json / tsconfig.node.json |
Split into solution + app/node project references. |
src/themes/blue-buzz/style.css |
New theme stylesheet (blue accent, 70/30 layout, print rules). |
src/tests/render-browser.test.ts, src/tests/cli-e2e.test.ts |
New coverage for the render CLI and both CLIs as subprocesses. |
TESTING.md / TODOS.md / CHANGELOG.md |
New/updated docs for the testing guide, remaining work, and the 5.0.0 release. |
utils/*.ts, tests/*.ts, tailwind.config.cjs |
Removed legacy Vue site utilities, their tests/snapshots, and Tailwind config. |
pnpm-workspace.yaml, .oxlintrc.json, .oxfmtrc.jsonc, .github/workflows/ci.yml |
Workspace catalog, lint/format config, and CI adjusted to the new toolchain. |
data/keyword.txt, data/icons/*.svg |
Emphasis keyword list and company logos referenced by the resumes. |
Review details
- Files reviewed: 88/234 changed files
- Comments generated: 2
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Shuunen <439158+Shuunen@users.noreply.github.com>
Summary
The folio stops being a hand maintained website and becomes a JSON Resume repository: the resumes in
data/are the source of truth, and they are rendered to standalone HTML and PDF with a set of themes.Resumes — two JSON Resume files, a French CV and an English resume, refreshed from LinkedIn, with the profile photos and the company logos the work & volunteer entries point at.
Tooling —
src/bin/json-resume-validator.cli.tsvalidates the resumes against the official schema plus the checks the schema does not enforce (a name, at least one filled section, and the typography of every prose string).src/bin/json-resume-render.cli.tsrenders every resume with every theme to HTML and PDF and builds an index page of preview cards;--theme <name>narrows the run.Theme —
blue-buzz, a local theme mimicking the DoYouBuzz minimal design: blue accent, profile on top, 70/30 two column body, section titles localized from the resume itself, and the words indata/keyword.txtemphasized in free texts.Infrastructure —
pnpm check(types, format, lint, both resume validators, tests) runs through turbo and is what CI runs. The Vue / Vite / Tailwind site, its pages, components and assets are removed, along with the old PDF and DOCX resumes.Test Coverage
275 tests across 48 suites in 5 test files. Coverage gate: PASS (100%) —
vitest.config.tssetsthresholds: { 100: true }, so a gap failspnpm check.Pre-Landing Review
No blocking issues. Two sub-threshold observations, neither actioned:
src/themes/blue-buzz/index.js:15reads../../../data/keyword.txtat import time, coupling the theme to this repo's layout. The package isprivate: true, and failing loudly matches the project's stated style.src/bin/json-resume-render.cli.ts:381joins a resume'simagepath onto the output folder, so a../value would write outside it. Local CLI over the author's own data.Adversarial Review
src/bin/json-resume-render.cli.ts:483-491— one unreadable resume among several is reported on stdout, then dropped: the run still exits 0 and the summary printsfiles × themesrather than renders attempted. Left as is:src/tests/render-browser.test.ts:174-184locks this in deliberately. Worth knowing that a corruptdata/*.jsonpasses CI silently.finallyon both the PDF and screenshot paths; every render path is caught inrenderOne, so no browser leak is reachable./uwithout/g, soexeccarries nolastIndexstate between files.Codex was not installed, so this pass is Claude only.
Design Review
Design Review (lite): 0 findings — no
outline: none, no!important, no sub-16px font sizes. Print output uses@pageplus@media printdeliberately.Eval Results
No prompt-related files changed — evals skipped.
Scope Drift
Scope Check: CLEAN. Intent was the pivot to a JSON Resume repo; the diff delivers exactly that and nothing beyond it.
Plan Completion
No plan file detected — the only artifact on this branch is
/ship's own test plan, which holds verification steps rather than work items.Verification Results
Skipped — no dev server on port 8089. Run
pnpm devthen/qato walk the rendered index.TODOS
No TODO items completed in this PR. 2 remaining: a
--langrender flag (P3) and site illustrations (P4, waiting on the new site).Documentation
README.md— added a Checks section coveringpnpm check, both resume validators anddata/keyword.txt.CHANGELOG.md— the 5.0.0 entry now covers the typography checks, the keyword emphasis, the--themeflag, thesrc/layout and the turbo pipeline, and is dated the day it ships.Test plan
pnpm checkgreen: 6/6 turbo tasks, 275 tests, 100% line and branch coverage