diff --git a/REDESIGN_PLAN.md b/REDESIGN_PLAN.md index 4cdbfddc3..b08748d89 100644 --- a/REDESIGN_PLAN.md +++ b/REDESIGN_PLAN.md @@ -1,6 +1,6 @@ # Reactive Resume redesign plan ("Desk & Paper") -Status: approved on 28 Sep 2026 (every §9 recommendation accepted). Work happens on `redesign/desk-and-paper`. M0 to M6 are done; see §11 and §12. +Status: approved on 28 Sep 2026 (every §9 recommendation accepted). Work happens on `redesign/desk-and-paper`. M0 to M7 are done; see §11 and §12. **PDF engine (28 Sep 2026):** the react-pdf rendering engine (`packages/pdf`) and Semantic CSS are replaced with [Forme](https://www.formepdf.com/) in the next phase of this redesign. Until then the redesign hosts them as they are: no per-template PDF work, render-performance work or CSS-editor restyling. Engine-dependent items are marked "waits for Forme". @@ -1106,3 +1106,82 @@ Verification: - knip, `turbo boundaries` and Biome are clean (this also fixed Biome findings in `index.html` from M1), and catalogs are extracted. - E2E: updated `dashboard-lifecycle` (rename, duplicate, Trash, restore and delete now), `lock-resume`, `cover-letter-library`, `json-export-import`, `preview-direction`, `section-recovery` and `auth`; `resume-views` became `documents-views`. Added `documents-new`: Start blank naming the resume after its headline, and Copy for a job linking the copy to its application. - The full suite passes against the dev server except the known dev-only server-PDF steps (33 passed, 7 opt-in diagnostics skipped). `hyphenation`, `public-resume-locale`, `documents-new`, `dashboard-lifecycle`, `cover-letter-library`, `json-export-import` and `share-history` pass against the production build. + +### M7 · Check (done 28 Sep 2026) + +What changed: + +- **Live checks (`packages/resume/src/ats`):** + - Every rule has a category: contact details, dates, layout, section headings or writing. The report scores the applicable rules (the English heading rule applies to English resumes only) as passed ÷ applicable × 100, per category too. + - Findings get a key that uses entry ids instead of array indexes, so reordering keeps it. + - New rule `TWO_COLUMN_LAYOUT` (C4): a two-column template printing a sidebar. +- **Check state:** `metadata.check = { ignored, hiddenTerms }` in the resume data (§3.9). It's optional, so existing resumes don't change, and public viewers don't receive it. Ignored findings don't count against the score. +- **Panel:** + - The 84 px score ring (accent, or warn below 80) eases to each new score. Next to it: the verdict, "n of m checks pass · n things to review" and "Live · updates as you edit". + - Tabs: Issues (n) · Job match (x/y) · Writing. +- **Issues:** + - Numbered cards with category, title, a plain explanation and the fix, pinned to their block on the page with a numbered warn pin and a wavy underline. Picking a card or a pin outlines both. + - One-step fixes apply with an undo toast, and the score and badge update at once: + - https:// for a link; + - hide the photo; + - one column; + - move to the main column; + - add to page 1; + - the standard heading; + - minimum type size, line height or margins; + - Switch to one column. + - The other issues open their field in Write. + - Show on page and Ignore (Keep for the two-column issue). "n issues are ignored · Show them again" brings them back. + - Category rows with "n of m" or "n to review", open when they need attention. + - The limit statement. + - "Also check the exported PDF" runs the PDF engine and reports in a toast, with its full report behind Show. +- **Job match:** + - It reads the posting of the application the resume is linked to (`resume.application_id`, now returned by `resume.getById`). + - Without one (C2): link an application, or paste a posting for this visit. A pasted posting can be saved as an application, which links it. A linked application without a posting takes one here. + - "x of y posting terms appear · not scored". Missing terms ask first ("appears n× in the posting"), then offer Add to Skills or "Not true for me, hide it"; hidden terms persist with Show again. Covered terms tint their entries on the page. + - Terms show as the posting writes them ("C#", not "csharp"). +- **Writing:** + - An opt-in AI review. Before it runs it says what it sends and to which provider, with Change. + - `ai.atsReview` takes the resume's bullets and paragraphs as passages. Rewrites of them come back as proposals; other advice shows as notes with impact and Show on page. "What's working" and "A model's opinion, not a verdict" follow. + - Errors stay in the tab (C3), with Retry and Open AI settings. + - Without a provider, the tab explains that and links to settings. +- **Proposal core** (shared with M10): + - Proposals target one passage, a whole `
` or `