simple-resume 0.1.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- simple_resume/__init__.py +132 -0
- simple_resume/core/__init__.py +47 -0
- simple_resume/core/colors.py +215 -0
- simple_resume/core/config.py +672 -0
- simple_resume/core/constants/__init__.py +207 -0
- simple_resume/core/constants/colors.py +98 -0
- simple_resume/core/constants/files.py +28 -0
- simple_resume/core/constants/layout.py +58 -0
- simple_resume/core/dependencies.py +258 -0
- simple_resume/core/effects.py +154 -0
- simple_resume/core/exceptions.py +261 -0
- simple_resume/core/file_operations.py +68 -0
- simple_resume/core/generate/__init__.py +21 -0
- simple_resume/core/generate/exceptions.py +69 -0
- simple_resume/core/generate/html.py +233 -0
- simple_resume/core/generate/pdf.py +659 -0
- simple_resume/core/generate/plan.py +131 -0
- simple_resume/core/hydration.py +55 -0
- simple_resume/core/importers/__init__.py +3 -0
- simple_resume/core/importers/json_resume.py +284 -0
- simple_resume/core/latex/__init__.py +60 -0
- simple_resume/core/latex/context.py +56 -0
- simple_resume/core/latex/conversion.py +227 -0
- simple_resume/core/latex/escaping.py +68 -0
- simple_resume/core/latex/fonts.py +93 -0
- simple_resume/core/latex/formatting.py +81 -0
- simple_resume/core/latex/sections.py +218 -0
- simple_resume/core/latex/types.py +84 -0
- simple_resume/core/markdown.py +127 -0
- simple_resume/core/models.py +102 -0
- simple_resume/core/palettes/__init__.py +38 -0
- simple_resume/core/palettes/common.py +73 -0
- simple_resume/core/palettes/data/default_palettes.json +58 -0
- simple_resume/core/palettes/exceptions.py +33 -0
- simple_resume/core/palettes/fetch_types.py +52 -0
- simple_resume/core/palettes/generators.py +137 -0
- simple_resume/core/palettes/registry.py +76 -0
- simple_resume/core/palettes/resolution.py +123 -0
- simple_resume/core/palettes/sources.py +162 -0
- simple_resume/core/paths.py +21 -0
- simple_resume/core/protocols.py +134 -0
- simple_resume/core/py.typed +0 -0
- simple_resume/core/render/__init__.py +37 -0
- simple_resume/core/render/manage.py +199 -0
- simple_resume/core/render/plan.py +405 -0
- simple_resume/core/result.py +226 -0
- simple_resume/core/resume.py +609 -0
- simple_resume/core/skills.py +60 -0
- simple_resume/core/validation.py +321 -0
- simple_resume/py.typed +0 -0
- simple_resume/shell/__init__.py +3 -0
- simple_resume/shell/assets/static/css/README.md +213 -0
- simple_resume/shell/assets/static/css/common.css +641 -0
- simple_resume/shell/assets/static/css/fonts.css +42 -0
- simple_resume/shell/assets/static/css/preview.css +82 -0
- simple_resume/shell/assets/static/css/print.css +99 -0
- simple_resume/shell/assets/static/fonts/AvenirLTStd-Book.otf +0 -0
- simple_resume/shell/assets/static/fonts/AvenirLTStd-Light.otf +0 -0
- simple_resume/shell/assets/static/fonts/AvenirLTStd-Medium.otf +0 -0
- simple_resume/shell/assets/static/fonts/AvenirLTStd-Oblique.otf +0 -0
- simple_resume/shell/assets/static/fonts/AvenirLTStd-Roman.otf +0 -0
- simple_resume/shell/assets/static/fonts/fontawesome/Font Awesome 6 Brands-Regular-400.otf +0 -0
- simple_resume/shell/assets/static/fonts/fontawesome/Font Awesome 6 Free-Solid-900.otf +0 -0
- simple_resume/shell/assets/static/images/default_profile_1.jpg +0 -0
- simple_resume/shell/assets/static/images/default_profile_2.png +0 -0
- simple_resume/shell/assets/static/schema.json +236 -0
- simple_resume/shell/assets/static/themes/README.md +208 -0
- simple_resume/shell/assets/static/themes/bold.yaml +64 -0
- simple_resume/shell/assets/static/themes/classic.yaml +64 -0
- simple_resume/shell/assets/static/themes/executive.yaml +64 -0
- simple_resume/shell/assets/static/themes/minimal.yaml +64 -0
- simple_resume/shell/assets/static/themes/modern.yaml +64 -0
- simple_resume/shell/assets/templates/html/cover.html +129 -0
- simple_resume/shell/assets/templates/html/demo.html +13 -0
- simple_resume/shell/assets/templates/html/resume_base.html +453 -0
- simple_resume/shell/assets/templates/html/resume_no_bars.html +316 -0
- simple_resume/shell/assets/templates/html/resume_with_bars.html +362 -0
- simple_resume/shell/cli/__init__.py +35 -0
- simple_resume/shell/cli/main.py +975 -0
- simple_resume/shell/cli/palette.py +75 -0
- simple_resume/shell/cli/random_palette_demo.py +407 -0
- simple_resume/shell/config.py +96 -0
- simple_resume/shell/effect_executor.py +211 -0
- simple_resume/shell/file_opener.py +308 -0
- simple_resume/shell/generate/__init__.py +37 -0
- simple_resume/shell/generate/core.py +650 -0
- simple_resume/shell/generate/lazy.py +284 -0
- simple_resume/shell/io_utils.py +199 -0
- simple_resume/shell/palettes/__init__.py +1 -0
- simple_resume/shell/palettes/fetch.py +63 -0
- simple_resume/shell/palettes/loader.py +321 -0
- simple_resume/shell/palettes/remote.py +179 -0
- simple_resume/shell/pdf_executor.py +52 -0
- simple_resume/shell/py.typed +0 -0
- simple_resume/shell/render/__init__.py +1 -0
- simple_resume/shell/render/latex.py +308 -0
- simple_resume/shell/render/operations.py +240 -0
- simple_resume/shell/resume_extensions.py +737 -0
- simple_resume/shell/runtime/__init__.py +7 -0
- simple_resume/shell/runtime/content.py +190 -0
- simple_resume/shell/runtime/generate.py +497 -0
- simple_resume/shell/runtime/lazy.py +138 -0
- simple_resume/shell/runtime/lazy_import.py +173 -0
- simple_resume/shell/service_locator.py +80 -0
- simple_resume/shell/services.py +256 -0
- simple_resume/shell/session/__init__.py +6 -0
- simple_resume/shell/session/config.py +35 -0
- simple_resume/shell/session/manage.py +386 -0
- simple_resume/shell/strategies.py +181 -0
- simple_resume/shell/themes/__init__.py +35 -0
- simple_resume/shell/themes/loader.py +230 -0
- simple_resume-0.1.9.dist-info/METADATA +201 -0
- simple_resume-0.1.9.dist-info/RECORD +116 -0
- simple_resume-0.1.9.dist-info/WHEEL +4 -0
- simple_resume-0.1.9.dist-info/entry_points.txt +5 -0
- simple_resume-0.1.9.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Preview Styles for Simple Resume
|
|
3
|
+
*
|
|
4
|
+
* Enhancements for web browser preview mode.
|
|
5
|
+
* These styles make the resume look better in a browser context.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* ========================================================================
|
|
9
|
+
PREVIEW FRAME
|
|
10
|
+
======================================================================== */
|
|
11
|
+
|
|
12
|
+
/* The frame wraps the page when in preview mode */
|
|
13
|
+
.frame {
|
|
14
|
+
/* Add subtle shadow for depth */
|
|
15
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
16
|
+
|
|
17
|
+
/* Center the preview */
|
|
18
|
+
margin: 20px auto;
|
|
19
|
+
|
|
20
|
+
/* Ensure it doesn't stretch too wide */
|
|
21
|
+
max-width: fit-content;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ========================================================================
|
|
25
|
+
BROWSER-SPECIFIC ENHANCEMENTS
|
|
26
|
+
======================================================================== */
|
|
27
|
+
|
|
28
|
+
/* Smooth font rendering in browsers */
|
|
29
|
+
body {
|
|
30
|
+
-webkit-font-smoothing: antialiased;
|
|
31
|
+
-moz-osx-font-smoothing: grayscale;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Interactive elements */
|
|
35
|
+
a:hover {
|
|
36
|
+
opacity: 0.8;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* ========================================================================
|
|
40
|
+
SCROLLING & VIEWPORT
|
|
41
|
+
======================================================================== */
|
|
42
|
+
|
|
43
|
+
/* Ensure smooth scrolling */
|
|
44
|
+
html {
|
|
45
|
+
scroll-behavior: smooth;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Add some breathing room */
|
|
49
|
+
body {
|
|
50
|
+
padding: 20px 0;
|
|
51
|
+
min-height: 100vh;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ========================================================================
|
|
55
|
+
RESPONSIVE PREVIEW
|
|
56
|
+
======================================================================== */
|
|
57
|
+
|
|
58
|
+
@media screen and (max-width: 250mm) {
|
|
59
|
+
.frame {
|
|
60
|
+
/* Scale down for smaller screens */
|
|
61
|
+
transform-origin: top center;
|
|
62
|
+
margin: 10px auto;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
body {
|
|
66
|
+
padding: 10px;
|
|
67
|
+
overflow-x: auto;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* ========================================================================
|
|
72
|
+
DEBUG HELPERS (development only)
|
|
73
|
+
======================================================================== */
|
|
74
|
+
|
|
75
|
+
/*
|
|
76
|
+
* Uncomment these for debugging layout issues:
|
|
77
|
+
*
|
|
78
|
+
* .sidebar { outline: 1px solid red; }
|
|
79
|
+
* .body { outline: 1px solid blue; }
|
|
80
|
+
* .content { outline: 1px solid green; }
|
|
81
|
+
* .description-container { outline: 1px solid orange; }
|
|
82
|
+
*/
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Print/PDF Styles for Simple Resume
|
|
3
|
+
*
|
|
4
|
+
* PDF-specific styles and WeasyPrint workarounds.
|
|
5
|
+
* Used for PDF generation via WeasyPrint.
|
|
6
|
+
*
|
|
7
|
+
* Note: @page size is dynamically set via inline CSS for each resume
|
|
8
|
+
* based on resume_config values. This file contains base print rules.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* ========================================================================
|
|
12
|
+
PAGE RULES
|
|
13
|
+
======================================================================== */
|
|
14
|
+
|
|
15
|
+
@page {
|
|
16
|
+
/* Base page rule - actual size is set dynamically via inline CSS */
|
|
17
|
+
margin: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@page resume {
|
|
21
|
+
/* Named page for resume content flow */
|
|
22
|
+
margin: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* ========================================================================
|
|
26
|
+
PRINT-SPECIFIC LAYOUT
|
|
27
|
+
======================================================================== */
|
|
28
|
+
|
|
29
|
+
@media print {
|
|
30
|
+
html, body {
|
|
31
|
+
margin: 0 !important;
|
|
32
|
+
padding: 0 !important;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.page {
|
|
36
|
+
page-break-after: always;
|
|
37
|
+
page-break-inside: avoid;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Ensure sidebar flows across pages properly */
|
|
41
|
+
.sidebar-container {
|
|
42
|
+
page-break-inside: auto;
|
|
43
|
+
break-inside: auto;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Prevent orphan headings */
|
|
47
|
+
h2, h3 {
|
|
48
|
+
page-break-after: avoid;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Keep content blocks together when possible */
|
|
52
|
+
.content {
|
|
53
|
+
page-break-inside: auto;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.description-container {
|
|
57
|
+
page-break-inside: auto;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Section headings should not be separated from content */
|
|
61
|
+
.section-heading {
|
|
62
|
+
page-break-after: avoid;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* ========================================================================
|
|
67
|
+
WEASYPRINT WORKAROUNDS
|
|
68
|
+
======================================================================== */
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* WeasyPrint has some CSS limitations. Document known issues here.
|
|
72
|
+
*
|
|
73
|
+
* Known issues:
|
|
74
|
+
* - calc() with CSS variables can be unreliable in some contexts
|
|
75
|
+
* - Some flexbox edge cases may render differently than browsers
|
|
76
|
+
* - @font-face src: format() hint is optional but recommended
|
|
77
|
+
*
|
|
78
|
+
* Workarounds applied:
|
|
79
|
+
* - Use explicit dimensions where possible instead of calc()
|
|
80
|
+
* - Test all flexbox layouts thoroughly
|
|
81
|
+
* - Font paths use relative URLs from template location
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
/* Ensure proper box-sizing for WeasyPrint */
|
|
85
|
+
*, *::before, *::after {
|
|
86
|
+
box-sizing: border-box;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* WeasyPrint handles background gradients well, but explicit sizing helps */
|
|
90
|
+
.page {
|
|
91
|
+
-webkit-print-color-adjust: exact;
|
|
92
|
+
print-color-adjust: exact;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Ensure SVG icons render properly in PDF */
|
|
96
|
+
.icon svg,
|
|
97
|
+
.icon-inline svg {
|
|
98
|
+
overflow: visible;
|
|
99
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://athola.github.io/simple-resume/schema.json",
|
|
4
|
+
"title": "simple-resume YAML schema",
|
|
5
|
+
"description": "JSON Schema for simple-resume YAML/JSON inputs. Use this schema in YAML editors (e.g., VS Code YAML extension) for autocomplete and validation.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": true,
|
|
8
|
+
"required": ["full_name", "email", "config"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"template": {
|
|
11
|
+
"description": "Template to render with. Known templates are provided, but custom templates are allowed.",
|
|
12
|
+
"anyOf": [
|
|
13
|
+
{"enum": ["resume_no_bars", "resume_with_bars", "demo"]},
|
|
14
|
+
{"type": "string", "pattern": "^[A-Za-z0-9_-]+$"}
|
|
15
|
+
],
|
|
16
|
+
"default": "resume_no_bars"
|
|
17
|
+
},
|
|
18
|
+
"theme": {
|
|
19
|
+
"description": "Optional named theme. Theme config is merged into config as defaults.",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"enum": ["classic", "bold", "minimal", "modern", "executive"]
|
|
22
|
+
},
|
|
23
|
+
"full_name": {"type": "string"},
|
|
24
|
+
"email": {"type": "string", "format": "email"},
|
|
25
|
+
"job_title": {"type": "string"},
|
|
26
|
+
"phone": {"type": "string"},
|
|
27
|
+
"web": {"type": "string"},
|
|
28
|
+
"linkedin": {"type": "string"},
|
|
29
|
+
"github": {"type": "string"},
|
|
30
|
+
"image_uri": {"type": "string"},
|
|
31
|
+
"image_link": {"type": "string"},
|
|
32
|
+
"headline": {"type": "string"},
|
|
33
|
+
"description": {"type": "string", "description": "Markdown-supported pitch/summary."},
|
|
34
|
+
"address": {"type": "array", "items": {"type": "string"}},
|
|
35
|
+
|
|
36
|
+
"titles": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"description": "Optional label overrides used by templates.",
|
|
39
|
+
"additionalProperties": {"type": "string"}
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
"expertise": {"type": "array", "items": {"type": "string"}},
|
|
43
|
+
"certification": {"type": "array", "items": {"type": "string"}},
|
|
44
|
+
"keyskills": {"type": "array", "items": {"type": "string"}},
|
|
45
|
+
|
|
46
|
+
"skills": {
|
|
47
|
+
"description": "Sidebar skills with proficiency values (0-100).",
|
|
48
|
+
"type": "object",
|
|
49
|
+
"additionalProperties": {"type": "number"}
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
"languages": {
|
|
53
|
+
"description": "Sidebar languages with proficiency values (0-100).",
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": {"type": "number"}
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
"body": {
|
|
59
|
+
"description": "Main resume sections. Each key is a section heading, mapped to a list of entries.",
|
|
60
|
+
"type": "object",
|
|
61
|
+
"additionalProperties": {
|
|
62
|
+
"type": "array",
|
|
63
|
+
"items": {"$ref": "#/$defs/bodyEntry"}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
"config": {"$ref": "#/$defs/config"},
|
|
68
|
+
|
|
69
|
+
"meta": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"description": "Internal metadata (e.g., palette metadata).",
|
|
72
|
+
"additionalProperties": true
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
"$defs": {
|
|
77
|
+
"hexColor": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"pattern": "^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
|
|
80
|
+
"examples": ["#0395DE", "#FFF"]
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
"dimension": {
|
|
84
|
+
"description": "A numeric value (number/int) or a string with optional units (e.g., '8.6mm').",
|
|
85
|
+
"anyOf": [
|
|
86
|
+
{"type": "number"},
|
|
87
|
+
{"type": "integer"},
|
|
88
|
+
{"type": "string", "pattern": "^-?\\d+(?:\\.\\d+)?(?:mm|pt|px)?$"}
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
"bodyEntry": {
|
|
93
|
+
"type": "object",
|
|
94
|
+
"additionalProperties": true,
|
|
95
|
+
"properties": {
|
|
96
|
+
"start": {"type": ["string", "number"]},
|
|
97
|
+
"end": {"type": ["string", "number"]},
|
|
98
|
+
"title": {"type": "string"},
|
|
99
|
+
"title_link": {"type": "string"},
|
|
100
|
+
"company": {"type": "string"},
|
|
101
|
+
"company_link": {"type": "string"},
|
|
102
|
+
"description": {"type": "string"},
|
|
103
|
+
"tech_stack": {
|
|
104
|
+
"description": "Optional list of technologies.",
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {"type": "string"}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
"palette": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"additionalProperties": true,
|
|
114
|
+
"properties": {
|
|
115
|
+
"source": {"type": "string", "description": "Palette source (e.g., 'registry', 'generator', 'remote', or direct colors)."},
|
|
116
|
+
"name": {"type": "string"},
|
|
117
|
+
"type": {"type": "string", "description": "Generator type (e.g., 'hcl')."},
|
|
118
|
+
"colors": {"type": "array", "items": {"$ref": "#/$defs/hexColor"}},
|
|
119
|
+
"size": {"type": "integer", "minimum": 1},
|
|
120
|
+
"seed": {"type": "integer"},
|
|
121
|
+
"hue_range": {
|
|
122
|
+
"type": "array",
|
|
123
|
+
"items": {"type": "number"},
|
|
124
|
+
"minItems": 2,
|
|
125
|
+
"maxItems": 2
|
|
126
|
+
},
|
|
127
|
+
"luminance_range": {
|
|
128
|
+
"type": "array",
|
|
129
|
+
"items": {"type": "number"},
|
|
130
|
+
"minItems": 2,
|
|
131
|
+
"maxItems": 2
|
|
132
|
+
},
|
|
133
|
+
"chroma": {"type": "number"},
|
|
134
|
+
"keywords": {"type": "array", "items": {"type": "string"}},
|
|
135
|
+
"num_results": {"type": "integer", "minimum": 1},
|
|
136
|
+
"order_by": {"type": "string"}
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
"config": {
|
|
141
|
+
"type": "object",
|
|
142
|
+
"description": "Rendering configuration. Most fields are optional; defaults are applied by simple-resume.",
|
|
143
|
+
"additionalProperties": true,
|
|
144
|
+
"properties": {
|
|
145
|
+
"template": {
|
|
146
|
+
"description": "Template override (used by core planning); usually matches top-level template.",
|
|
147
|
+
"anyOf": [
|
|
148
|
+
{"enum": ["resume_no_bars", "resume_with_bars", "demo"]},
|
|
149
|
+
{"type": "string", "pattern": "^[A-Za-z0-9_-]+$"}
|
|
150
|
+
],
|
|
151
|
+
"default": "resume_no_bars"
|
|
152
|
+
},
|
|
153
|
+
"output_mode": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"enum": ["markdown", "latex"],
|
|
156
|
+
"default": "markdown"
|
|
157
|
+
},
|
|
158
|
+
"color_scheme": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"description": "Palette name (e.g., 'Professional Blue') or 'generator ...' shorthand.",
|
|
161
|
+
"default": "default"
|
|
162
|
+
},
|
|
163
|
+
"theme": {
|
|
164
|
+
"description": "Theme name (alternative location to top-level theme).",
|
|
165
|
+
"type": "string",
|
|
166
|
+
"enum": ["classic", "bold", "minimal", "modern", "executive"]
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
"palette": {"$ref": "#/$defs/palette"},
|
|
170
|
+
|
|
171
|
+
"page_width": {"$ref": "#/$defs/dimension", "default": 210},
|
|
172
|
+
"page_height": {"$ref": "#/$defs/dimension", "default": 297},
|
|
173
|
+
"sidebar_width": {"$ref": "#/$defs/dimension", "default": 65},
|
|
174
|
+
|
|
175
|
+
"padding": {"$ref": "#/$defs/dimension", "default": 12},
|
|
176
|
+
"sidebar_padding_left": {"$ref": "#/$defs/dimension", "default": 10},
|
|
177
|
+
"sidebar_padding_right": {"$ref": "#/$defs/dimension", "default": 10},
|
|
178
|
+
"sidebar_padding_top": {"$ref": "#/$defs/dimension", "default": 0},
|
|
179
|
+
"sidebar_padding_bottom": {"$ref": "#/$defs/dimension", "default": 12},
|
|
180
|
+
|
|
181
|
+
"pitch_padding_top": {"$ref": "#/$defs/dimension", "default": 10},
|
|
182
|
+
"pitch_padding_bottom": {"$ref": "#/$defs/dimension", "default": 8},
|
|
183
|
+
"pitch_padding_left": {"$ref": "#/$defs/dimension", "default": 6},
|
|
184
|
+
|
|
185
|
+
"h2_padding_left": {"$ref": "#/$defs/dimension", "default": 6},
|
|
186
|
+
"h2_padding_top": {"$ref": "#/$defs/dimension", "default": 8},
|
|
187
|
+
"h3_padding_top": {"$ref": "#/$defs/dimension", "default": 7},
|
|
188
|
+
|
|
189
|
+
"section_heading_margin_top": {"$ref": "#/$defs/dimension", "default": 7},
|
|
190
|
+
"section_heading_margin_bottom": {"$ref": "#/$defs/dimension", "default": 1},
|
|
191
|
+
"section_heading_text_margin": {"$ref": "#/$defs/dimension", "default": -6},
|
|
192
|
+
"section_icon_design_scale": {"$ref": "#/$defs/dimension", "default": 1},
|
|
193
|
+
"entry_margin_bottom": {"$ref": "#/$defs/dimension", "default": 4},
|
|
194
|
+
"tech_stack_margin_bottom": {"$ref": "#/$defs/dimension", "default": 2},
|
|
195
|
+
|
|
196
|
+
"section_icon_circle_size": {"$ref": "#/$defs/dimension", "default": 7.8},
|
|
197
|
+
"section_icon_circle_x_offset": {"$ref": "#/$defs/dimension", "default": 0},
|
|
198
|
+
"section_icon_design_size": {"$ref": "#/$defs/dimension", "default": 3.5},
|
|
199
|
+
"section_icon_design_x_offset": {"$ref": "#/$defs/dimension", "default": 0},
|
|
200
|
+
"section_icon_design_y_offset": {"$ref": "#/$defs/dimension", "default": 0},
|
|
201
|
+
|
|
202
|
+
"date_container_width": {"$ref": "#/$defs/dimension", "default": 15},
|
|
203
|
+
"date_container_padding_left": {"$ref": "#/$defs/dimension"},
|
|
204
|
+
"description_container_padding_left": {"$ref": "#/$defs/dimension", "default": 4},
|
|
205
|
+
"skill_container_padding_top": {"$ref": "#/$defs/dimension", "default": 3},
|
|
206
|
+
"skill_spacer_padding_top": {"$ref": "#/$defs/dimension", "default": 3},
|
|
207
|
+
"profile_image_padding_bottom": {"$ref": "#/$defs/dimension", "default": 8},
|
|
208
|
+
|
|
209
|
+
"frame_padding": {"$ref": "#/$defs/dimension", "default": 15},
|
|
210
|
+
|
|
211
|
+
"cover_padding_top": {"$ref": "#/$defs/dimension", "default": 15},
|
|
212
|
+
"cover_padding_bottom": {"$ref": "#/$defs/dimension", "default": 15},
|
|
213
|
+
"cover_padding_h": {"$ref": "#/$defs/dimension", "default": 20},
|
|
214
|
+
|
|
215
|
+
"contact_icon_size": {"$ref": "#/$defs/dimension", "default": 5},
|
|
216
|
+
"contact_icon_margin_top": {"$ref": "#/$defs/dimension", "default": 0.5},
|
|
217
|
+
"contact_text_padding_left": {"$ref": "#/$defs/dimension", "default": 2},
|
|
218
|
+
|
|
219
|
+
"bold_font_weight": {"type": "integer", "default": 600},
|
|
220
|
+
"description_font_size": {"$ref": "#/$defs/dimension", "default": 8.5},
|
|
221
|
+
"date_font_size": {"$ref": "#/$defs/dimension", "default": 9},
|
|
222
|
+
"sidebar_font_size": {"$ref": "#/$defs/dimension", "default": 8.5},
|
|
223
|
+
|
|
224
|
+
"theme_color": {"$ref": "#/$defs/hexColor", "default": "#0395DE"},
|
|
225
|
+
"sidebar_color": {"$ref": "#/$defs/hexColor", "default": "#F6F6F6"},
|
|
226
|
+
"sidebar_text_color": {"$ref": "#/$defs/hexColor", "default": "#000000"},
|
|
227
|
+
"bar_background_color": {"$ref": "#/$defs/hexColor", "default": "#DFDFDF"},
|
|
228
|
+
"date2_color": {"$ref": "#/$defs/hexColor", "default": "#616161"},
|
|
229
|
+
"frame_color": {"$ref": "#/$defs/hexColor", "default": "#757575"},
|
|
230
|
+
"heading_icon_color": {"$ref": "#/$defs/hexColor", "default": "#0395DE"},
|
|
231
|
+
"bold_color": {"$ref": "#/$defs/hexColor", "default": "#585858"},
|
|
232
|
+
"sidebar_bold_color": {"$ref": "#/$defs/hexColor"}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Theme Gallery for Simple Resume
|
|
2
|
+
|
|
3
|
+
This directory contains pre-built theme presets that you can use as-is or customize to create your own unique resume style.
|
|
4
|
+
|
|
5
|
+
## Available Themes
|
|
6
|
+
|
|
7
|
+
| Theme | Description | Best For |
|
|
8
|
+
|-------|-------------|----------|
|
|
9
|
+
| **modern** | Clean, contemporary design with soft blue-gray tones | Tech, startups, creative roles |
|
|
10
|
+
| **classic** | Traditional professional design with navy/burgundy | Finance, law, consulting |
|
|
11
|
+
| **bold** | High-contrast with vibrant accents | Design, marketing, standout applications |
|
|
12
|
+
| **minimal** | Light and airy with maximum whitespace | Academic, research, writing |
|
|
13
|
+
| **executive** | Sophisticated dark with gold accents | C-suite, senior leadership |
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
### Option 1: Copy and Customize
|
|
18
|
+
|
|
19
|
+
1. Copy a theme file (e.g., `modern.yaml`) to your project
|
|
20
|
+
2. Rename it (e.g., `my-theme.yaml`)
|
|
21
|
+
3. Modify the values you want to change
|
|
22
|
+
4. Reference it in your resume YAML:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
# In your resume.yaml, copy the config section from the theme
|
|
26
|
+
config:
|
|
27
|
+
palette:
|
|
28
|
+
source: generator
|
|
29
|
+
type: hcl
|
|
30
|
+
size: 5
|
|
31
|
+
seed: 2024
|
|
32
|
+
hue_range: [200, 220]
|
|
33
|
+
luminance_range: [0.35, 0.75]
|
|
34
|
+
chroma: 0.12
|
|
35
|
+
# ... rest of config
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Option 2: Use Theme Values Directly
|
|
39
|
+
|
|
40
|
+
Copy just the `config:` block from any theme into your resume YAML:
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
# my_resume.yaml
|
|
44
|
+
template: resume_with_bars
|
|
45
|
+
full_name: Jane Developer
|
|
46
|
+
job_title: Software Engineer
|
|
47
|
+
|
|
48
|
+
# Paste the config block from modern.yaml, classic.yaml, etc.
|
|
49
|
+
config:
|
|
50
|
+
palette:
|
|
51
|
+
source: generator
|
|
52
|
+
type: hcl
|
|
53
|
+
size: 5
|
|
54
|
+
seed: 2024
|
|
55
|
+
hue_range: [200, 220]
|
|
56
|
+
luminance_range: [0.35, 0.75]
|
|
57
|
+
chroma: 0.12
|
|
58
|
+
|
|
59
|
+
page_width: 210
|
|
60
|
+
page_height: 297
|
|
61
|
+
# ... etc
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Customization Guide
|
|
65
|
+
|
|
66
|
+
### Color Palette
|
|
67
|
+
|
|
68
|
+
The palette generator creates harmonious colors automatically:
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
config:
|
|
72
|
+
palette:
|
|
73
|
+
source: generator
|
|
74
|
+
type: hcl # HCL color space (perceptually uniform)
|
|
75
|
+
size: 5 # Number of colors to generate
|
|
76
|
+
seed: 2024 # Change this for different colors!
|
|
77
|
+
hue_range: [200, 220] # Color hue range (0-360)
|
|
78
|
+
luminance_range: [0.35, 0.75] # Light to dark range (0-1)
|
|
79
|
+
chroma: 0.12 # Color saturation (0-1)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Quick color adjustments:**
|
|
83
|
+
|
|
84
|
+
- Want different colors? → Change `seed` to any number
|
|
85
|
+
- Want warmer colors? → Use `hue_range: [0, 60]` (red-yellow)
|
|
86
|
+
- Want cooler colors? → Use `hue_range: [180, 270]` (cyan-purple)
|
|
87
|
+
- Want darker sidebar? → Lower `luminance_range` (e.g., `[0.10, 0.30]`)
|
|
88
|
+
- Want more vibrant? → Increase `chroma` (e.g., `0.25`)
|
|
89
|
+
|
|
90
|
+
### Hue Reference Chart
|
|
91
|
+
|
|
92
|
+
| Hue Range | Colors |
|
|
93
|
+
|-----------|--------|
|
|
94
|
+
| 0-30 | Red, Orange |
|
|
95
|
+
| 30-60 | Orange, Yellow |
|
|
96
|
+
| 60-120 | Yellow, Green |
|
|
97
|
+
| 120-180 | Green, Cyan |
|
|
98
|
+
| 180-240 | Cyan, Blue |
|
|
99
|
+
| 240-300 | Blue, Purple |
|
|
100
|
+
| 300-360 | Purple, Red |
|
|
101
|
+
|
|
102
|
+
### Layout Dimensions
|
|
103
|
+
|
|
104
|
+
All dimensions are in millimeters (mm) for print accuracy:
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
config:
|
|
108
|
+
# Page size (A4 default)
|
|
109
|
+
page_width: 210
|
|
110
|
+
page_height: 297
|
|
111
|
+
padding: 12 # Overall page padding
|
|
112
|
+
|
|
113
|
+
# Sidebar
|
|
114
|
+
sidebar_width: 60 # Width of left sidebar
|
|
115
|
+
sidebar_padding_top: 5
|
|
116
|
+
sidebar_padding_bottom: 5
|
|
117
|
+
sidebar_padding_left: 5
|
|
118
|
+
sidebar_padding_right: 5
|
|
119
|
+
|
|
120
|
+
# Profile image
|
|
121
|
+
profile_width: 50 # Profile photo width
|
|
122
|
+
profile_image_padding_bottom: 6
|
|
123
|
+
|
|
124
|
+
# Main content
|
|
125
|
+
pitch_padding_top: 10 # Space above summary
|
|
126
|
+
pitch_padding_bottom: 5
|
|
127
|
+
pitch_padding_left: 5
|
|
128
|
+
h2_padding_left: 5 # Section header indent
|
|
129
|
+
h2_width: 140 # Section header width
|
|
130
|
+
|
|
131
|
+
# Experience entries
|
|
132
|
+
h3_padding_top: 3 # Space above job titles
|
|
133
|
+
date_container_width: 25 # Date column width
|
|
134
|
+
description_container_padding_left: 5
|
|
135
|
+
skill_container_padding_top: 2
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Section Icons
|
|
139
|
+
|
|
140
|
+
Customize the circular icons next to section headings:
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
config:
|
|
144
|
+
section_icon_circle_size: "10mm" # Circle diameter
|
|
145
|
+
section_icon_circle_x_offset: "0mm" # Horizontal adjustment
|
|
146
|
+
section_icon_design_size: "5mm" # Icon size inside circle
|
|
147
|
+
section_icon_design_x_offset: "0mm" # Icon horizontal position
|
|
148
|
+
section_icon_design_y_offset: "0mm" # Icon vertical position
|
|
149
|
+
section_heading_text_margin: "-5mm" # Text margin from icon
|
|
150
|
+
section_heading_marker_margin_left: "-10mm"
|
|
151
|
+
section_heading_marker_line_height: "15mm"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Creating Your Own Theme
|
|
155
|
+
|
|
156
|
+
1. **Start from an existing theme** - Copy the one closest to your vision
|
|
157
|
+
2. **Change the seed** - Get new colors instantly with a different `seed` value
|
|
158
|
+
3. **Adjust hue_range** - Pick your brand colors
|
|
159
|
+
4. **Fine-tune luminance** - Control light/dark balance
|
|
160
|
+
5. **Test with preview** - Use `--preview` flag to see changes in browser
|
|
161
|
+
|
|
162
|
+
### Example: Creating a "Tech Startup" Theme
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
config:
|
|
166
|
+
# Vibrant purple-pink tech colors
|
|
167
|
+
palette:
|
|
168
|
+
source: generator
|
|
169
|
+
type: hcl
|
|
170
|
+
size: 5
|
|
171
|
+
seed: 42
|
|
172
|
+
hue_range: [280, 330] # Purple to pink
|
|
173
|
+
luminance_range: [0.30, 0.70]
|
|
174
|
+
chroma: 0.20 # Vibrant but professional
|
|
175
|
+
|
|
176
|
+
# Compact modern layout
|
|
177
|
+
sidebar_width: 55
|
|
178
|
+
padding: 10
|
|
179
|
+
h3_padding_top: 3
|
|
180
|
+
date_container_width: 12
|
|
181
|
+
|
|
182
|
+
# Smaller, subtle icons
|
|
183
|
+
section_icon_circle_size: "7mm"
|
|
184
|
+
section_icon_design_size: "3.5mm"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Tips for Great Themes
|
|
188
|
+
|
|
189
|
+
1. **Contrast matters** - Verify text readability on sidebar backgrounds
|
|
190
|
+
2. **Consistency** - Keep padding values proportional (e.g., all multiples of 5)
|
|
191
|
+
3. **Test with real content** - Long names and descriptions reveal layout issues
|
|
192
|
+
4. **Print preview** - Colors look different on screen vs paper
|
|
193
|
+
5. **PDF check** - Always generate a PDF to verify final output
|
|
194
|
+
|
|
195
|
+
## Sharing Your Theme
|
|
196
|
+
|
|
197
|
+
Created a great theme? Consider contributing it back!
|
|
198
|
+
|
|
199
|
+
1. Add your theme YAML to this directory
|
|
200
|
+
2. Include a descriptive header comment
|
|
201
|
+
3. Test with multiple sample resumes
|
|
202
|
+
4. Submit a pull request
|
|
203
|
+
|
|
204
|
+
## See Also
|
|
205
|
+
|
|
206
|
+
- [CSS Architecture](../css/README.md) - How CSS styling works
|
|
207
|
+
- [Palette Generator](../../../../wiki/Palette-Generator.md) - Deep dive on color generation
|
|
208
|
+
- [Sample Resumes](../../../../../../sample/input/) - Example resumes using different themes
|