feat(cv): prioritize ATS template choices

This commit is contained in:
cesnimda
2026-09-01 09:08:16 +02:00
parent 928822d73b
commit 694fdb870a
9 changed files with 95 additions and 31 deletions
+4 -3
View File
@@ -39,7 +39,8 @@ content and deliberate colour/typography/spacing choices remain untouched.
fields that differ from the defaults and declare its `SupportedSettings` when the defaults do not apply.
2. Nothing else is wired manually. It appears in `GET /api/cv/themes`, the Template tab and dashboard create flow.
`GET /api/cv/themes/{id}/preview` renders isolated in-memory sample data for a real visual thumbnail;
preview data is never persisted.
preview data is never persisted. The shared template gallery is ATS-first by default, can reveal
every design, and is reused by both the creation flow and editor.
3. Add a focused visual/PDF regression only when the template introduces a genuinely new layout behaviour.
Add a `CvBuilderTests.Every_catalog_theme_renders_valid_html` already loops the whole catalog, so a new
@@ -58,8 +59,8 @@ sections and monospaced utility details).
`[text](url)` via `ThemedCvRenderer.Inline` — everything is HTML-escaped first, then a whitelist is
re-applied, so no user tag survives. Storage stays plain text (no HTML, no sanitiser dependency).
- **ATS-friendliness** is a data flag: `CvTheme.AtsFriendly` (set on the single-column themes),
surfaced in `GET /api/cv/themes` and badged in the Customize tab. Two-column (sidebar) themes are not
flagged, as sidebar layouts can trip naive resume parsers.
surfaced in `GET /api/cv/themes`, sorted first and badged in both template choosers. Two-column
(sidebar) themes are not flagged, as sidebar layouts can trip naive resume parsers.
- **Print quality**: ordinary entries use `break-inside: avoid-page`; content classified as too tall
for a page is allowed to flow between bullets/paragraphs so Chromium cannot clip an unsplittable
block. Section headings avoid a following break, list items carry widow/orphan rules, and long