Skip to content

v5.0.0 Json resume - #463

Merged
Shuunen merged 10 commits into
masterfrom
json-resume
Aug 24, 2026
Merged

v5.0.0 Json resume#463
Shuunen merged 10 commits into
masterfrom
json-resume

Conversation

@Shuunen

@Shuunen Shuunen commented Aug 20, 2026

Copy link
Copy Markdown
Owner

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.

Toolingsrc/bin/json-resume-validator.cli.ts validates 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.ts renders every resume with every theme to HTML and PDF and builds an index page of preview cards; --theme <name> narrows the run.

Themeblue-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 in data/keyword.txt emphasized in free texts.

Infrastructurepnpm 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

CODE PATHS                                              COVERAGE
[+] src/bin/json-resume-validator.cli.ts                lines 100%  branches 100%
[+] src/bin/json-resume-render.cli.ts                   lines 100%  branches 100%
[+] src/themes/blue-buzz/index.js                       lines 100%  branches 100%

COVERAGE: 375/375 lines (100%)  |  329/329 branches (100%)  |  GAPS: 0

275 tests across 48 suites in 5 test files. Coverage gate: PASS (100%) — vitest.config.ts sets thresholds: { 100: true }, so a gap fails pnpm check.

Pre-Landing Review

No blocking issues. Two sub-threshold observations, neither actioned:

  • src/themes/blue-buzz/index.js:15 reads ../../../data/keyword.txt at import time, coupling the theme to this repo's layout. The package is private: true, and failing loudly matches the project's stated style.
  • src/bin/json-resume-render.cli.ts:381 joins a resume's image path 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 prints files × themes rather than renders attempted. Left as is: src/tests/render-browser.test.ts:174-184 locks this in deliberately. Worth knowing that a corrupt data/*.json passes CI silently.
  • Browser pages are closed in finally on both the PDF and screenshot paths; every render path is caught in renderOne, so no browser leak is reachable.
  • Typography rules use /u without /g, so exec carries no lastIndex state 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 @page plus @media print deliberately.

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 dev then /qa to walk the rendered index.

TODOS

No TODO items completed in this PR. 2 remaining: a --lang render flag (P3) and site illustrations (P4, waiting on the new site).

Documentation

  • README.md — added a Checks section covering pnpm check, both resume validators and data/keyword.txt.
  • CHANGELOG.md — the 5.0.0 entry now covers the typography checks, the keyword emphasis, the --theme flag, the src/ layout and the turbo pipeline, and is dated the day it ships.

Test plan

  • pnpm check green: 6/6 turbo tasks, 275 tests, 100% line and branch coverage
  • CI green on this branch

@Shuunen Shuunen changed the title Json resume v5.0.0 Json resume Aug 20, 2026
@Shuunen
Shuunen force-pushed the json-resume branch 2 times, most recently from 5c26fb7 to a6e2623 Compare August 24, 2026 20:12
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.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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/node project references, turbo.json, oxlint/oxfmt, catalog-based deps, packageManager).
  • Adds the JSON Resume tooling and the blue-buzz theme (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.

Comment thread README.md Outdated
Comment thread package.json Outdated
Co-authored-by: Shuunen <439158+Shuunen@users.noreply.github.com>
@Shuunen
Shuunen merged commit cfc8b5d into master Aug 24, 2026
2 checks passed
@Shuunen
Shuunen deleted the json-resume branch August 24, 2026 21:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants