feat: add sidebar-cv Typst theme with typography/color settings#549
Open
tamaygz wants to merge 28 commits into
Open
feat: add sidebar-cv Typst theme with typography/color settings#549tamaygz wants to merge 28 commits into
tamaygz wants to merge 28 commits into
Conversation
Add a new "Sidebar CV" Typst theme inspired by the user's CV design. Features a tinted left sidebar with photo, name, headline, summary, skills, languages, and contact details, with the main content area on the right for professional experience and other sections. Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/ffb0aacb-46e9-4725-b797-661aeab6cca3 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
- Split name across two lines with wide 8pt tracking - Larger 26pt name, regular weight (not bold) to match original - Bold italic headline at 12pt - Sidebar section headings: 12pt, 2pt tracking, centered gray line - Main section headings: 16pt, 2pt tracking, teal accent - Entry titles: 11pt bold uppercase with pipe separator - Date/location line: 8.5pt small caps - Body text: paragraph style with 14pt first-line indent - Contact block includes full name above address - Sidebar padding and main padding adjusted for balance Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/594f2a8d-264d-4452-b4dc-b72043d0aea0 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…nder, add render test Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/5cdbc21b-75a7-404a-b924-11244bd099c5 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/e3118850-ef0c-4c4f-8d81-c09166de85dc Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/e3118850-ef0c-4c4f-8d81-c09166de85dc Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/e3118850-ef0c-4c4f-8d81-c09166de85dc Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/e3118850-ef0c-4c4f-8d81-c09166de85dc Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/b170f5ab-08d8-4b0e-b5df-5e3a42fa5364 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/b170f5ab-08d8-4b0e-b5df-5e3a42fa5364 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/b170f5ab-08d8-4b0e-b5df-5e3a42fa5364 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…ons to resolve __HEADING_FONT__ in headlineBlock Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/66941e30-cbe6-44db-b58a-545f85c9091b Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…s across pages Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/79257a19-1228-49e8-bf5a-f63e197cd112 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…ad accent code, unused helpers Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/c8f2791b-a148-4afc-8540-6dda89897c66 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/c8f2791b-a148-4afc-8540-6dda89897c66 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…page to fix forward reference error Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/4c63970e-d825-45ae-a351-c3473f101e47 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/24cbe393-7096-4927-b73a-9b1388367b26 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…, check all 5 style settings in badge Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/24cbe393-7096-4927-b73a-9b1388367b26 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/b1e97374-96ec-4a6d-b9c7-7206e25511fc Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/f4e27866-ad7d-422a-8969-d5a98cd86e1c Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/f4e27866-ad7d-422a-8969-d5a98cd86e1c Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/3d93d8b1-2c33-402c-939a-85c9864b7bd3 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
… merge conflict Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/db209ea8-96f7-467e-b1ca-866de661dace Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
- types.ts: add LatexResumeOrderedSectionKey type, sectionOrder field in LatexResumeDocument, and type aliases (ResumeRenderDocument, NormalizeResumeJsonOptions, etc.) - document.ts: add ORDERABLE_SECTION_KEYS, getOrderedSectionKeys(), improved stripHtml preserving bold/italic tags, sectionOrder field in normalizeResumeJsonToLatexDocument, buildResumeRenderDocument alias - index.ts: export buildResumeRenderDocument alongside normalizeResumeJsonToLatexDocument - typst.ts: add escapeRawTypst + HTML-aware escapeTypstText, renderOrderedCoreSections, convertDocFieldsToTypst; wire sectionOrder into buildTypstDocument; use convertDocFieldsToTypst for adapted themes - typst.test.ts: add section ordering, HTML formatting, and convertDocFieldsToTypst tests; import convertDocFieldsToTypst - document.test.ts: add "preserves basic formatting tags and strips other HTML tags" test Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/fad5eadd-65e5-48a3-8dda-1d0de30b38e6 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…egex comment Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/fad5eadd-65e5-48a3-8dda-1d0de30b38e6 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
…, kanban, section-ordering) Merge upstream commits: - 4d86871 Profile items in header (DaKheera47#553) - e183cdd Show bold text in local PDF renderers (DaKheera47#551) - 199ad9c fix: kanban horizontal auto-scroll (DaKheera47#550) - 60107ef chore: release 0.8.0 - 239dde3 Ordering resume sections (DaKheera47#545) Conflict resolutions: - types.ts: keep LatexResumeStyle/LatexResumeStyleOverrides (our feature) - document.ts: keep buildStyle/normalizeColorToHex/componentToHex/clamp (our feature) - document.test.ts: keep color normalization test (our feature) - index.ts: use NormalizeResumeJsonOptions, keep LatexResumeStyleOverrides import - typst.ts: keep LatexResumeStyleOverrides import, simplified tagStack.pop(), normalizeTypstDocumentPicturePath; remove duplicate renderOrderedCoreSections brought in by merge - typst.test.ts: keep picture path normalization tests (our feature) Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
… resolveTypstStyleOverrides return type Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/b3e79194-7bbc-4a92-9a61-53ab3e09f241 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…aths in settings/index.test.tsx Agent-Logs-Url: https://github.com/tamaygz/job-ops/sessions/0418b07a-41f6-4e0a-98d6-f26d1433b952 Co-authored-by: tamaygz <92460164+tamaygz@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds a new Typst resume theme (“Sidebar CV”) and introduces end-to-end support for user-configurable Typst typography/color overrides via Settings, flowing through settings storage, PDF fingerprinting/regeneration, and the Typst renderer.
Changes:
- Added a new adapted Typst theme (
sidebar-cv) and updated theme metadata generation. - Introduced Typst style override settings (fonts + colors) in the shared settings model/registry and integrated a new Settings UI section to manage them.
- Wired style overrides into Typst PDF generation, PDF fingerprinting, and auto-regeneration; expanded renderer support for resume-derived style metadata and picture path normalization.
Reviewed changes
Copilot reviewed 28 out of 29 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| shared/src/types/settings.ts | Extends AppSettings with Typst style override setting keys. |
| shared/src/testing/factories.ts | Updates createAppSettings test factory to include new Typst style settings. |
| shared/src/settings-registry.ts | Adds Typst style settings definitions + exports HEX_COLOR_REGEX. |
| shared/src/generated/typst-themes.ts | Adds sidebar-cv to generated Typst theme values/labels/descriptions. |
| orchestrator/src/server/tailoring-flow.test.ts | Updates mocked fingerprint context to include new Typst style fields. |
| orchestrator/src/server/services/resume-renderer/typst.ts | Adds style placeholder replacement, picture path normalization, and style override plumbing through Typst rendering. |
| orchestrator/src/server/services/resume-renderer/typst.test.ts | Adds coverage for style placeholders, section ordering, picture path normalization, and sidebar theme render smoke test. |
| orchestrator/src/server/services/resume-renderer/typst-themes/sidebar-cv/theme.json | Introduces the new theme manifest. |
| orchestrator/src/server/services/resume-renderer/typst-themes/sidebar-cv/main.typ | Adds the new Sidebar CV Typst template using shared style placeholders. |
| orchestrator/src/server/services/resume-renderer/typst-themes/compact/theme.json | Removes unused accent token from native theme tokens. |
| orchestrator/src/server/services/resume-renderer/typst-themes/compact/main.typ | Updates compact template to use shared font/color placeholders. |
| orchestrator/src/server/services/resume-renderer/typst-themes/clean-print-cv/main.typ | Applies shared font/color placeholders to adapted clean-print-cv template. |
| orchestrator/src/server/services/resume-renderer/typst-themes/classic/theme.json | Removes unused accent token from native theme tokens. |
| orchestrator/src/server/services/resume-renderer/typst-themes/classic/main.typ | Updates classic template to use shared font/color placeholders. |
| orchestrator/src/server/services/resume-renderer/types.ts | Adds resume style metadata types + typstStyleOverrides plumbing types. |
| orchestrator/src/server/services/resume-renderer/index.ts | Passes typstStyleOverrides through renderResumePdf to Typst renderer. |
| orchestrator/src/server/services/resume-renderer/document.ts | Extracts/normalizes resume design typography/colors into document.style. |
| orchestrator/src/server/services/resume-renderer/document.test.ts | Adds tests for style extraction and color normalization fallbacks. |
| orchestrator/src/server/services/pdf.ts | Resolves Typst style overrides from settings and supplies them during Typst rendering. |
| orchestrator/src/server/services/pdf-fingerprint.ts | Includes Typst style settings in fingerprint context/fingerprint for Typst renderer. |
| orchestrator/src/server/services/pdf-fingerprint.test.ts | Updates fingerprint test context for new Typst style fields. |
| orchestrator/src/server/services/auto-pdf-regeneration.ts | Adds new Typst style keys to settings invalidation set for regeneration. |
| orchestrator/src/server/services/auto-pdf-regeneration.test.ts | Updates auto-regeneration tests for expanded fingerprint context. |
| orchestrator/src/client/pages/settings/types.ts | Adds TypstStyleValues derived-settings shape for the UI. |
| orchestrator/src/client/pages/settings/index.tsx | Integrates new “Typst Theme Style” section and maps form/state to new setting fields. |
| orchestrator/src/client/pages/settings/index.test.tsx | Updates settings page tests for the new SettingsPage module path. |
| orchestrator/src/client/pages/settings/components/TypstStyleSettingsSection.tsx | Adds UI controls for Typst font/color overrides with previews and pickers. |
| orchestrator/src/client/App.tsx | Updates Settings page import to the new pages/settings entry. |
| orchestrator/src/client/App.test.tsx | Updates Settings page mock path to match the new import. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces a new Typst Template (Sidebar CV) + a new "Typst Theme Style" section in the settings page, allowing users to customize fonts and colors for Typst-rendered PDF resumes. It adds new settings fields, updates the UI to support these customizations, and ensures the new options are handled throughout the settings logic and tests.
Settings UI and Functionality Enhancements:
TypstStyleSettingsSectioncomponent that provides UI controls for users to override Typst PDF resume fonts (body and heading) and colors (primary, text, background, secondary background), with live previews and color pickers. (orchestrator/src/client/pages/settings/components/TypstStyleSettingsSection.tsx)orchestrator/src/client/pages/SettingsPage.tsx) [1] [2] [3] [4] [5] [6] [7]Settings Data Model and State Management:
orchestrator/src/client/pages/SettingsPage.tsx,orchestrator/src/client/pages/settings/types.ts) [1] [2] [3] [4] [5] [6]Tests and Defaults:
orchestrator/src/server/services/auto-pdf-regeneration.test.ts) [1] [2]New Sidebar Template:

Settings:
