jekyll-theme-resume 1.3.0
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.
- checksums.yaml +7 -0
- data/403.html +6 -0
- data/404.html +6 -0
- data/500.html +6 -0
- data/CHANGELOG.md +498 -0
- data/CODE_OF_CONDUCT.md +92 -0
- data/LICENSE.txt +22 -0
- data/README.md +184 -0
- data/SECURITY.md +30 -0
- data/_config.sample.yml +329 -0
- data/_data/locales/ar.yml +85 -0
- data/_data/locales/de.yml +86 -0
- data/_data/locales/en.yml +84 -0
- data/_data/locales/es.yml +86 -0
- data/_data/locales/fr.yml +86 -0
- data/_data/locales/ur.yml +86 -0
- data/_data/social_networks.yml +83 -0
- data/_includes/analytics-body.html +12 -0
- data/_includes/analytics-head.html +36 -0
- data/_includes/avatar.html +84 -0
- data/_includes/dark-mode-toggle.html +202 -0
- data/_includes/data-loader.html +42 -0
- data/_includes/date-formatter.html +63 -0
- data/_includes/grouped-item-list.html +53 -0
- data/_includes/hreflang.html +58 -0
- data/_includes/language-switcher.html +72 -0
- data/_includes/print-social-links.html +23 -0
- data/_includes/resume-section.html +547 -0
- data/_includes/safe-url.html +21 -0
- data/_includes/shared-head.html +51 -0
- data/_includes/social-links.html +54 -0
- data/_includes/vendors/svg-icons/ATTRIBUTION.md +34 -0
- data/_includes/vendors/svg-icons/dev.svg +3 -0
- data/_includes/vendors/svg-icons/dribbble-symbol.svg +3 -0
- data/_includes/vendors/svg-icons/envelope.svg +4 -0
- data/_includes/vendors/svg-icons/facebook.svg +3 -0
- data/_includes/vendors/svg-icons/flickr.svg +4 -0
- data/_includes/vendors/svg-icons/github.svg +3 -0
- data/_includes/vendors/svg-icons/globe-1.svg +3 -0
- data/_includes/vendors/svg-icons/instagram.svg +4 -0
- data/_includes/vendors/svg-icons/linkedin.svg +3 -0
- data/_includes/vendors/svg-icons/medium.svg +3 -0
- data/_includes/vendors/svg-icons/phone.svg +13 -0
- data/_includes/vendors/svg-icons/pinterest.svg +3 -0
- data/_includes/vendors/svg-icons/postcard.svg +14 -0
- data/_includes/vendors/svg-icons/telegram.svg +3 -0
- data/_includes/vendors/svg-icons/whatsapp.svg +3 -0
- data/_includes/vendors/svg-icons/x.svg +3 -0
- data/_includes/vendors/svg-icons/youtube.svg +3 -0
- data/_layouts/default.html +65 -0
- data/_layouts/error.html +138 -0
- data/_layouts/profile.html +123 -0
- data/_layouts/resume.html +238 -0
- data/_plugins/error_pages_generator.rb +71 -0
- data/_plugins/json_resume_generator.rb +79 -0
- data/_plugins/resume_pages_generator.rb +71 -0
- data/_plugins/resume_validator.rb +40 -0
- data/_sass/_all-pages.scss +335 -0
- data/_sass/_base.scss +130 -0
- data/_sass/_dark-mode.scss +387 -0
- data/_sass/_layout.scss +116 -0
- data/_sass/_mixins.scss +136 -0
- data/_sass/_normalize.scss +379 -0
- data/_sass/_profile-page.scss +60 -0
- data/_sass/_resume-ltr.scss +436 -0
- data/_sass/_resume-rtl.scss +91 -0
- data/_sass/_variables.scss +45 -0
- data/assets/css/cv-ltr.scss +31 -0
- data/assets/css/cv-rtl.scss +36 -0
- data/assets/css/main.scss +8 -0
- data/assets/css/profile.scss +9 -0
- data/assets/favicon/resume/about.txt +6 -0
- data/assets/favicon/resume/android-chrome-192x192.png +0 -0
- data/assets/favicon/resume/android-chrome-512x512.png +0 -0
- data/assets/favicon/resume/apple-touch-icon.png +0 -0
- data/assets/favicon/resume/favicon-16x16.png +0 -0
- data/assets/favicon/resume/favicon-32x32.png +0 -0
- data/assets/favicon/resume/favicon.ico +0 -0
- data/assets/favicon/resume/site.webmanifest +1 -0
- data/bin/validate-resume +89 -0
- data/bin/verify +27 -0
- data/docs/README.md +89 -0
- data/docs/explanation/accessibility-decisions.md +27 -0
- data/docs/explanation/architecture.md +44 -0
- data/docs/explanation/dark-mode-approach.md +25 -0
- data/docs/explanation/data-driven-model.md +25 -0
- data/docs/explanation/multilingual-and-rtl-design.md +40 -0
- data/docs/how-to/add-a-language.md +57 -0
- data/docs/how-to/add-a-section.md +35 -0
- data/docs/how-to/add-a-social-platform.md +32 -0
- data/docs/how-to/add-a-test.md +34 -0
- data/docs/how-to/create-a-custom-layout.md +64 -0
- data/docs/how-to/enable-dark-mode.md +43 -0
- data/docs/how-to/link-translations-with-hreflang.md +25 -0
- data/docs/how-to/migrate-v0.9-to-v1.0.md +46 -0
- data/docs/how-to/override-locale-strings.md +51 -0
- data/docs/how-to/override-sass-partials.md +26 -0
- data/docs/how-to/proof-built-html.md +22 -0
- data/docs/how-to/publish-json-resume.md +38 -0
- data/docs/how-to/show-language-proficiency-in-header.md +13 -0
- data/docs/how-to/switch-resume-versions.md +42 -0
- data/docs/how-to/troubleshoot-builds.md +39 -0
- data/docs/how-to/validate-in-ci.md +38 -0
- data/docs/how-to/verify-accessibility.md +28 -0
- data/docs/reference/accessibility-coverage.md +39 -0
- data/docs/reference/config.md +378 -0
- data/docs/reference/data-schemas.md +529 -0
- data/docs/reference/glossary.md +39 -0
- data/docs/reference/includes.md +197 -0
- data/docs/reference/json-resume-fields.md +148 -0
- data/docs/reference/layouts.md +144 -0
- data/docs/reference/locale-keys.md +76 -0
- data/docs/reference/repository-map.md +83 -0
- data/docs/reference/sass-tokens.md +279 -0
- data/docs/reference/testing-suites.md +62 -0
- data/docs/reference/validator-cli.md +203 -0
- data/docs/tutorials/getting-started.md +173 -0
- data/lib/jekyll-theme-resume/json_resume_exporter.rb +334 -0
- data/lib/jekyll-theme-resume/resume_validator.rb +853 -0
- data/lib/jekyll-theme-resume/schemas/LICENSE.md +21 -0
- data/lib/jekyll-theme-resume/schemas/json_resume_v1.0.0.json +500 -0
- data/lib/jekyll-theme-resume.rb +21 -0
- metadata +371 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
# Data schemas (`_data/`)
|
|
2
|
+
|
|
3
|
+
*Audience: site owners*
|
|
4
|
+
|
|
5
|
+
YAML schemas for every resume data file. Each resume section is one YAML file in a per-language data folder under `_data/`. The schemas are identical in every language; only the text values are translated.
|
|
6
|
+
|
|
7
|
+
UI strings, month names, and error page copy are not resume data: they live in the theme's locale files, `_data/locales/<lang>.yml`, documented in [`locale-keys.md`](locale-keys.md).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Overview & Folder Architecture
|
|
12
|
+
|
|
13
|
+
Each language has one folder of the same 13 files. Why the model works this way: [data-driven model](../explanation/data-driven-model.md). Complete starter data for `en`, `ar`, `es`, `fr`, `de`, `ur` is in [`demo/_data/`](../../demo/_data).
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
_data/
|
|
17
|
+
├── ar/
|
|
18
|
+
│ ├── header.yml
|
|
19
|
+
│ ├── experience.yml
|
|
20
|
+
│ ├── education.yml
|
|
21
|
+
│ ├── certifications.yml
|
|
22
|
+
│ ├── courses.yml
|
|
23
|
+
│ ├── volunteering.yml
|
|
24
|
+
│ ├── projects.yml
|
|
25
|
+
│ ├── skills.yml
|
|
26
|
+
│ ├── recognitions.yml
|
|
27
|
+
│ ├── associations.yml
|
|
28
|
+
│ ├── languages.yml
|
|
29
|
+
│ ├── links.yml
|
|
30
|
+
│ ├── publications.yml
|
|
31
|
+
│ ├── references.yml
|
|
32
|
+
│ └── interests.yml
|
|
33
|
+
├── en/
|
|
34
|
+
│ ├── header.yml
|
|
35
|
+
│ ├── experience.yml
|
|
36
|
+
│ ├── education.yml
|
|
37
|
+
│ ├── certifications.yml
|
|
38
|
+
│ ├── courses.yml
|
|
39
|
+
│ ├── volunteering.yml
|
|
40
|
+
│ ├── projects.yml
|
|
41
|
+
│ ├── skills.yml
|
|
42
|
+
│ ├── recognitions.yml
|
|
43
|
+
│ ├── associations.yml
|
|
44
|
+
│ ├── languages.yml
|
|
45
|
+
│ ├── links.yml
|
|
46
|
+
│ ├── publications.yml
|
|
47
|
+
│ ├── references.yml
|
|
48
|
+
│ └── interests.yml
|
|
49
|
+
└── ... # one folder per language in `languages:`
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Each language's `data_path` in `_config.yml` points at its folder: see [`config.md`](config.md#3-languages).
|
|
53
|
+
|
|
54
|
+
The file links below name the English and Arabic demo files; every other language folder mirrors them. Examples use the canonical keys the templates render. If an entry uses only an alias the templates never read (for example `organization` instead of `company`), the validator reports it as a missing required field and names the alias it found; see [validator-cli.md](validator-cli.md#6-validation-rules-catalog-by-section). Optional fields that are absent or empty leave no stray `•` separators.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Resume Content Sections
|
|
59
|
+
|
|
60
|
+
### 1. Experience (`experience.yml`)
|
|
61
|
+
|
|
62
|
+
- **Files:** [`_data/en/experience.yml`](../../demo/_data/en/experience.yml) / [`_data/ar/experience.yml`](../../demo/_data/ar/experience.yml)
|
|
63
|
+
- **Config Toggle:** `resume_section.experience: true`
|
|
64
|
+
- **Behavior:** Roles are grouped by `company` name. Multiple positions at the same employer appear together, sorted by `startdate` (most recent first).
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
# Standard role entry with ISO dates
|
|
68
|
+
- company: "Acme Corporation"
|
|
69
|
+
position: "Senior Product Manager"
|
|
70
|
+
startdate: 2022-03-01
|
|
71
|
+
enddate: Present # Use "Present" for ongoing roles
|
|
72
|
+
location: "San Francisco, CA"
|
|
73
|
+
active: true
|
|
74
|
+
summary: "Led cross-functional team of 12 engineers delivering enterprise AI products."
|
|
75
|
+
|
|
76
|
+
# Role with custom non-continuous duration strings
|
|
77
|
+
- company: "State University"
|
|
78
|
+
position: "Adjunct Lecturer"
|
|
79
|
+
durations:
|
|
80
|
+
- duration: "Jun 2020 – Jan 2021"
|
|
81
|
+
- duration: "& Jun 2022 – Dec 2022"
|
|
82
|
+
location: "Austin, TX"
|
|
83
|
+
active: true
|
|
84
|
+
summary: "Taught undergraduate courses in software architecture and human-computer interaction."
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Display Format:**
|
|
88
|
+
- Company name appears as a prominent section item heading.
|
|
89
|
+
- Multiple roles at the same company are automatically grouped together.
|
|
90
|
+
- Each role displays: **Position • Date Range • Location**.
|
|
91
|
+
- Dates render through [`_includes/date-formatter.html`](../../_includes/date-formatter.html) with month names from the active locale: `2022-03-01` and `2022-03` become `March 2022` (`مارس 2022` in Arabic), and `2022` stays `2022`. See [Date Formats](#date-formats--iso-standards).
|
|
92
|
+
- Summary paragraph displays below the role details when provided and `enable_summary: true` is configured in `_config.yml`.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 2. Education (`education.yml`)
|
|
97
|
+
|
|
98
|
+
- **Files:** [`_data/en/education.yml`](../../demo/_data/en/education.yml) / [`_data/ar/education.yml`](../../demo/_data/ar/education.yml)
|
|
99
|
+
- **Config Toggle:** `resume_section.education: true`
|
|
100
|
+
- **Display fields:** `uni`, `degree`, and `year` (a freeform date string). `uni` is the heading; `degree`, `year` and `location` appear on the details line. `uni`, `degree` and either `year` or `startdate` are required; an entry that sets `institution`/`school` without `uni` fails validation. The validator accepts `startdate` instead of a nonblank `year` (used by the JSON Resume export), but the page shows no date then. Optional `startdate`/`enddate` are validated as ISO dates.
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
- degree: "M.S. in Computer Science"
|
|
104
|
+
uni: "Stanford University"
|
|
105
|
+
year: "Sep 2018 – Jun 2020"
|
|
106
|
+
location: "Stanford, CA"
|
|
107
|
+
active: true
|
|
108
|
+
awards:
|
|
109
|
+
- award: "Graduate Research Fellowship"
|
|
110
|
+
- award: "Dean's Honors List (2019)"
|
|
111
|
+
summary: "Specialized in distributed systems and natural language processing."
|
|
112
|
+
|
|
113
|
+
- degree: "B.S. in Software Engineering"
|
|
114
|
+
uni: "State University"
|
|
115
|
+
year: "2014 – 2018"
|
|
116
|
+
location: "Seattle, WA"
|
|
117
|
+
active: true
|
|
118
|
+
award: "Graduated Magna Cum Laude"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Display Format:**
|
|
122
|
+
- University/institution name appears as a heading.
|
|
123
|
+
- Second line displays: **Degree • Year • Location**.
|
|
124
|
+
- Honors and achievements are rendered as bulleted points under the degree (supporting both single `award` and multiple `awards` lists).
|
|
125
|
+
- Summary paragraph displays beneath honors when provided.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### 3. Certifications (`certifications.yml`)
|
|
130
|
+
|
|
131
|
+
- **Files:** [`_data/en/certifications.yml`](../../demo/_data/en/certifications.yml) / [`_data/ar/certifications.yml`](../../demo/_data/ar/certifications.yml)
|
|
132
|
+
- **Config Toggle:** `resume_section.certifications: true`
|
|
133
|
+
|
|
134
|
+
```yaml
|
|
135
|
+
# Example with verification credential and URL
|
|
136
|
+
- name: "AWS Certified Solutions Architect – Professional"
|
|
137
|
+
issuing_organization: "Amazon Web Services"
|
|
138
|
+
credential_id: "AWS-PSA-987654"
|
|
139
|
+
credential_url: "https://aws.amazon.com/verification"
|
|
140
|
+
issue_date: 2023-04-15
|
|
141
|
+
expiration: 2026-04-15
|
|
142
|
+
active: true
|
|
143
|
+
|
|
144
|
+
# Example with nested courses for personal record-keeping
|
|
145
|
+
- name: "Business Certificate in Financial Management"
|
|
146
|
+
active: true
|
|
147
|
+
issuing_organization: "State University Executive Education"
|
|
148
|
+
credential_id: "ABC123XYZ"
|
|
149
|
+
credential_url: "https://example.com/cert/ABC123XYZ"
|
|
150
|
+
issue_date: 2024-03-15
|
|
151
|
+
expiration: 2027-03-15
|
|
152
|
+
courses: # Optional: INTERNAL USE ONLY - not displayed on resume
|
|
153
|
+
- name: "Accounting for Corporate Business"
|
|
154
|
+
active: true
|
|
155
|
+
issuing_organization: "State University"
|
|
156
|
+
credential_id: "COURSE123"
|
|
157
|
+
credential_url: "https://example.com/course/COURSE123"
|
|
158
|
+
issue_date: 2024-01-10
|
|
159
|
+
expiration:
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
> [!IMPORTANT]
|
|
163
|
+
> The nested `courses:` list within certification entries is designed strictly for **personal record-keeping and linking coursework to parent credentials**. It is **never rendered** on the generated resume. To display coursework visibly on your resume, use [`courses.yml`](#4-courses-coursesyml).
|
|
164
|
+
|
|
165
|
+
**Display Format:**
|
|
166
|
+
- Certification name appears as a bold heading.
|
|
167
|
+
- Second line displays: **Issuing Organization • Issue Date – Expiration Date • Credential ID** (the dates render only when `issue_date` is set; `expiration` is shown only alongside it).
|
|
168
|
+
- Credential ID is rendered as a clickable link if `credential_url` is provided, and the full destination URL is printed in parentheses in physical and PDF outputs.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### 4. Courses (`courses.yml`)
|
|
173
|
+
|
|
174
|
+
- **Files:** [`_data/en/courses.yml`](../../demo/_data/en/courses.yml) / [`_data/ar/courses.yml`](../../demo/_data/ar/courses.yml)
|
|
175
|
+
- **Config Toggle:** `resume_section.courses: true`
|
|
176
|
+
|
|
177
|
+
```yaml
|
|
178
|
+
- name: "Deep Learning Specialization"
|
|
179
|
+
issuing_organization: "DeepLearning.AI / Coursera"
|
|
180
|
+
credential_id: "COURSERA-DL-1234"
|
|
181
|
+
credential_url: "https://coursera.org/verify/COURSERA-DL-1234"
|
|
182
|
+
startdate: 2024-01-10
|
|
183
|
+
enddate: 2024-03-20
|
|
184
|
+
active: true
|
|
185
|
+
summary: "Comprehensive sequence covering CNNs, RNNs, Transformers, and optimization algorithms."
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Display Format:**
|
|
189
|
+
- Course name appears as a heading.
|
|
190
|
+
- Second line displays: **Issuing Organization • Start Date – End Date**. The dates render only when `startdate` is set; `enddate` is shown only alongside it.
|
|
191
|
+
- Summary paragraph displays if provided and `enable_summary: true` is configured in `_config.yml`.
|
|
192
|
+
- Credential ID displays with an interactive link when `credential_url` is provided.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### 5. Volunteering (`volunteering.yml`)
|
|
197
|
+
|
|
198
|
+
- **Files:** [`_data/en/volunteering.yml`](../../demo/_data/en/volunteering.yml) / [`_data/ar/volunteering.yml`](../../demo/_data/ar/volunteering.yml)
|
|
199
|
+
- **Config Toggle:** `resume_section.volunteering: true`
|
|
200
|
+
|
|
201
|
+
```yaml
|
|
202
|
+
- company: "Code for Good"
|
|
203
|
+
position: "Technical Mentor"
|
|
204
|
+
startdate: 2021-06-01
|
|
205
|
+
enddate: Present
|
|
206
|
+
location: "Remote"
|
|
207
|
+
active: true
|
|
208
|
+
summary: "Mentored aspiring engineers from underrepresented backgrounds on web development and open source contribution."
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Display Format:**
|
|
212
|
+
- Same layout structure as the [Experience](#1-experience-experienceyml) section: grouped by the `company` key (the organization name) and sorted chronologically.
|
|
213
|
+
- Displays: **Position • Date Range • Location** followed by the summary paragraph when `enable_summary: true`.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### 6. Projects (`projects.yml`)
|
|
218
|
+
|
|
219
|
+
- **Files:** [`_data/en/projects.yml`](../../demo/_data/en/projects.yml) / [`_data/ar/projects.yml`](../../demo/_data/ar/projects.yml)
|
|
220
|
+
- **Config Toggle:** `resume_section.projects: true`
|
|
221
|
+
|
|
222
|
+
```yaml
|
|
223
|
+
- project: "Open Source Data Pipeline"
|
|
224
|
+
role: "Author & Maintainer"
|
|
225
|
+
duration: "Jan 2023 – Present"
|
|
226
|
+
url: "https://github.com/yourusername/pipeline"
|
|
227
|
+
active: true
|
|
228
|
+
description: "High-throughput streaming ETL pipeline written in Go and Apache Kafka, processing 5M+ daily events."
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Display Format:**
|
|
232
|
+
- Project title appears as a bold heading (rendered as a clickable link if `url` is specified).
|
|
233
|
+
- Second line displays: **Role • Duration**.
|
|
234
|
+
- Project description appears as a paragraph below.
|
|
235
|
+
- In print and PDF versions, external URLs are automatically echoed in parentheses.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
### 7. Skills (`skills.yml`)
|
|
240
|
+
|
|
241
|
+
- **Files:** [`_data/en/skills.yml`](../../demo/_data/en/skills.yml) / [`_data/ar/skills.yml`](../../demo/_data/ar/skills.yml)
|
|
242
|
+
- **Config Toggle:** `resume_section.skills: true`
|
|
243
|
+
|
|
244
|
+
```yaml
|
|
245
|
+
- skill: "Cloud Architecture & Infrastructure"
|
|
246
|
+
active: true
|
|
247
|
+
level: 4 # optional integer from 1 to 5; other values produce a validator warning
|
|
248
|
+
description: "Expert in AWS, GCP, Terraform, Docker, and Kubernetes. Designed and deployed multi-region high-availability infrastructure."
|
|
249
|
+
|
|
250
|
+
- skill: "Product Strategy & Technical Leadership"
|
|
251
|
+
active: true
|
|
252
|
+
description: "Roadmapping, OKR tracking, cross-functional mentoring, agile sprint leadership, and stakeholder communication."
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Display Format:**
|
|
256
|
+
- Skill name appears as a subheading (`<h4>`).
|
|
257
|
+
- Description appears as a detailed narrative paragraph immediately below the subheading.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
### 8. Recognition (`recognitions.yml`)
|
|
262
|
+
|
|
263
|
+
- **Files:** [`_data/en/recognitions.yml`](../../demo/_data/en/recognitions.yml) / [`_data/ar/recognitions.yml`](../../demo/_data/ar/recognitions.yml)
|
|
264
|
+
- **Config Toggle:** `resume_section.recognitions: true`
|
|
265
|
+
|
|
266
|
+
> [!NOTE]
|
|
267
|
+
> The configuration toggle and render order key is **`recognitions`** (plural), matching the data file **`recognitions.yml`**. The singular `recognition` key was removed in v1.0.0.
|
|
268
|
+
|
|
269
|
+
```yaml
|
|
270
|
+
- award: "Innovator of the Year"
|
|
271
|
+
organization: "Global Tech Summit"
|
|
272
|
+
year: "2023"
|
|
273
|
+
active: true
|
|
274
|
+
summary: "Awarded for exceptional contributions to open-source developer tooling and developer velocity."
|
|
275
|
+
|
|
276
|
+
- award: "Dean's Excellence Award"
|
|
277
|
+
organization: "State University"
|
|
278
|
+
year: "2019, 2020"
|
|
279
|
+
active: true
|
|
280
|
+
summary: "Recognized for academic achievement and research excellence in computer engineering."
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**Display Format:**
|
|
284
|
+
- Award name appears as a bold heading.
|
|
285
|
+
- Second line displays: **Awarding Organization • Year**.
|
|
286
|
+
- Summary description appears as a paragraph.
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### 9. Associations (`associations.yml`)
|
|
291
|
+
|
|
292
|
+
- **Files:** [`_data/en/associations.yml`](../../demo/_data/en/associations.yml) / [`_data/ar/associations.yml`](../../demo/_data/ar/associations.yml)
|
|
293
|
+
- **Config Toggle:** `resume_section.associations: true`
|
|
294
|
+
|
|
295
|
+
```yaml
|
|
296
|
+
- organization: "Association for Computing Machinery (ACM)"
|
|
297
|
+
role: "Senior Member"
|
|
298
|
+
year: "2019 – Present"
|
|
299
|
+
url: "https://www.acm.org"
|
|
300
|
+
active: true
|
|
301
|
+
summary: "Active contributor to SIGMOD working groups on data systems and data governance."
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**Display Format:**
|
|
305
|
+
- Organization name appears as a heading (clickable link if `url` is provided).
|
|
306
|
+
- Second line displays: **Role • Year**.
|
|
307
|
+
- Summary paragraph describes candidate involvement and leadership.
|
|
308
|
+
- In print mode, the destination URL is echoed in parentheses.
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
### 10. Languages (`languages.yml`)
|
|
313
|
+
|
|
314
|
+
- **Files:** [`_data/en/languages.yml`](../../demo/_data/en/languages.yml) / [`_data/ar/languages.yml`](../../demo/_data/ar/languages.yml)
|
|
315
|
+
- **Config Toggles:**
|
|
316
|
+
- `resume_section.lang_header: true`: Renders a one-line language summary in the header contact block (requires `display_header_contact_info: true`); this replaces the standalone section.
|
|
317
|
+
- `resume_section.languages: true`: Renders a standalone two-column table section.
|
|
318
|
+
|
|
319
|
+
```yaml
|
|
320
|
+
- language: "English"
|
|
321
|
+
description: "Native / Bilingual proficiency"
|
|
322
|
+
descrp_short: "Native" # Used for the header language line
|
|
323
|
+
active: true
|
|
324
|
+
|
|
325
|
+
- language: "Arabic"
|
|
326
|
+
description: "Professional working proficiency"
|
|
327
|
+
descrp_short: "Professional"
|
|
328
|
+
active: true
|
|
329
|
+
|
|
330
|
+
- language: "German"
|
|
331
|
+
description: "Elementary working proficiency"
|
|
332
|
+
descrp_short: "Elementary"
|
|
333
|
+
active: true
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**Display Format:**
|
|
337
|
+
- **Table Mode (`resume_section.languages: true`, `lang_header: false`):** Renders a responsive two-column table in the main body. Each entry displays: **Language – Description**.
|
|
338
|
+
- **Header Line Mode (`resume_section.lang_header: true`):** Renders one line in the header contact block, `Language (descrp_short)` entries joined by the locale's list separator, using the `descrp_short` attribute. Requires `display_header_contact_info: true`.
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
### 11. Links (`links.yml`)
|
|
343
|
+
|
|
344
|
+
- **Files:** [`_data/en/links.yml`](../../demo/_data/en/links.yml) / [`_data/ar/links.yml`](../../demo/_data/ar/links.yml)
|
|
345
|
+
- **Config Toggle:** `resume_section.links: true`
|
|
346
|
+
|
|
347
|
+
```yaml
|
|
348
|
+
- description: "Technical Blog & Architecture Articles"
|
|
349
|
+
url: "https://blog.yourdomain.com"
|
|
350
|
+
active: true
|
|
351
|
+
|
|
352
|
+
- description: "GitHub Open Source Dossier"
|
|
353
|
+
url: "https://github.com/yourusername"
|
|
354
|
+
active: true
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Display Format:**
|
|
358
|
+
- Clean bulleted list of clickable text links.
|
|
359
|
+
- External URLs are echoed in parentheses during print and PDF rendering.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
### 12. Interests (`interests.yml`)
|
|
364
|
+
|
|
365
|
+
- **Files:** [`_data/en/interests.yml`](../../demo/_data/en/interests.yml) / [`_data/ar/interests.yml`](../../demo/_data/ar/interests.yml)
|
|
366
|
+
- **Config Toggle:** `resume_section.interests: true`
|
|
367
|
+
|
|
368
|
+
```yaml
|
|
369
|
+
- description: "Distributed systems research and open-source software"
|
|
370
|
+
- description: "Landscape photography and digital storytelling"
|
|
371
|
+
- description: "Long-distance trail running and mountaineering"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Display Format:**
|
|
375
|
+
- Unordered bulleted list under the "Outside Interests" section heading.
|
|
376
|
+
- Does not require an active flag: any item listed in the file will render.
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
### 13. Publications (`publications.yml`)
|
|
381
|
+
|
|
382
|
+
- **Files:** [`_data/en/publications.yml`](../../demo/_data/en/publications.yml) / [`_data/ar/publications.yml`](../../demo/_data/ar/publications.yml)
|
|
383
|
+
- **Config Toggle:** `resume_section.publications: true`
|
|
384
|
+
|
|
385
|
+
```yaml
|
|
386
|
+
- name: "On the Distinction of Tobacco Ashes"
|
|
387
|
+
publisher: "The Strand Magazine"
|
|
388
|
+
release_date: 1889-03-01 # YYYY, YYYY-MM, or YYYY-MM-DD
|
|
389
|
+
url: "https://example.com/monographs/tobacco-ashes"
|
|
390
|
+
summary: "A monograph cataloguing 140 varieties of tobacco ash."
|
|
391
|
+
active: true
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
`name` is required; `publisher`, `release_date`, `url` (http/https) and `summary` are optional.
|
|
395
|
+
|
|
396
|
+
**Display Format:**
|
|
397
|
+
- Name, linked to `url` when set (the URL is echoed in print, `dir="ltr"` in RTL locales).
|
|
398
|
+
- `publisher • release date` (localized, same format as certifications).
|
|
399
|
+
- `summary` is always shown; it is not gated by `enable_summary`.
|
|
400
|
+
- Schema.org `CreativeWork` microdata.
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
### 14. References (`references.yml`)
|
|
405
|
+
|
|
406
|
+
- **Files:** [`_data/en/references.yml`](../../demo/_data/en/references.yml) / [`_data/ar/references.yml`](../../demo/_data/ar/references.yml)
|
|
407
|
+
- **Config Toggle:** `resume_section.references: true`
|
|
408
|
+
|
|
409
|
+
```yaml
|
|
410
|
+
- name: "Dr. John H. Watson, M.D."
|
|
411
|
+
reference: "I have never known a more precise and fearless investigator."
|
|
412
|
+
active: true
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
`name` and `reference` are both required. No other fields exist.
|
|
416
|
+
|
|
417
|
+
**Display Format:** a `<blockquote>` with the reference text and a `<cite>` naming the referee.
|
|
418
|
+
|
|
419
|
+
**Privacy:** references are rendered on the page and exported to `resume.json` exactly as written. Publish only what the referee agreed to make public; set `active: false` to hold an entry back.
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## Header & Executive Summary (`header.yml`)
|
|
424
|
+
|
|
425
|
+
- **Files:** [`_data/en/header.yml`](../../demo/_data/en/header.yml) / [`_data/ar/header.yml`](../../demo/_data/ar/header.yml)
|
|
426
|
+
- **Config Toggle:** `languages.<lang>.header_intro: true` (per language)
|
|
427
|
+
|
|
428
|
+
Contains the executive bio summary rendered directly beneath the candidate name, job title, and social links bar:
|
|
429
|
+
|
|
430
|
+
```yaml
|
|
431
|
+
# _data/en/header.yml
|
|
432
|
+
intro: >-
|
|
433
|
+
Results-oriented engineering leader with 10+ years of experience designing scalable distributed systems, cloud platforms, and bilingual consumer products. Passionate about developer tooling, accessibility, and high-performance architecture.
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
```yaml
|
|
437
|
+
# _data/ar/header.yml
|
|
438
|
+
intro: >-
|
|
439
|
+
قائد هندسي متميز يتمتع بخبرة تزيد عن 10 سنوات في تصميم الأنظمة الموزعة والمنصات السحابية والتطبيقات ثنائية اللغة. شغوف بأدوات المطورين ومعايير النفاذ الرقمي والبنى التحتية عالية الأداء.
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
**Display Format:**
|
|
443
|
+
- Appears as a prominent narrative paragraph immediately below candidate name, title, contact row, and social links in the resume header.
|
|
444
|
+
- Only displays when `languages.<lang>.header_intro: true` is set for that language in `_config.yml`.
|
|
445
|
+
- Fully supports basic HTML inline formatting (e.g., `<strong>`, `<em>`).
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Error Page Copy
|
|
450
|
+
|
|
451
|
+
Error page text is not resume data. The `error_pages` schema is in [`locale-keys.md`](locale-keys.md#error_pages); the `layout: error` front matter and Home/Reload behavior are in [`layouts.md`](layouts.md#4-errorhtml-multilingual-http-error-suite).
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## General Guidelines
|
|
456
|
+
|
|
457
|
+
### Date Formats & ISO Standards
|
|
458
|
+
|
|
459
|
+
1. **Structured Dates (`startdate`, `enddate`, `issue_date`, `expiration`, recognition `date`):**
|
|
460
|
+
- Use ISO format: `YYYY-MM-DD`, `YYYY-MM`, or `YYYY`. Quoted and unquoted values both work.
|
|
461
|
+
- Every language formats dates through [`_includes/date-formatter.html`](../../_includes/date-formatter.html), using the `months` list in `_data/locales/<lang>.yml`:
|
|
462
|
+
|
|
463
|
+
| Value | Default style (`<month> <year>`) | `MDY` style (certifications, courses, date of birth) |
|
|
464
|
+
|---|---|---|
|
|
465
|
+
| `2024-03-15` | March 2024 | March 15, 2024 |
|
|
466
|
+
| `2024-03` | March 2024 | March 2024 |
|
|
467
|
+
| `2024` | 2024 | 2024 |
|
|
468
|
+
| any other text | printed as written | printed as written |
|
|
469
|
+
- For ongoing positions leave `enddate` blank or use a word from the locale's `present_values` (for example `Present`); it renders as the locale's `ui.present`. Accepted words per language: [`locale-keys.md`](locale-keys.md#present-values).
|
|
470
|
+
|
|
471
|
+
2. **Freeform Display Strings (`year`, `duration`):**
|
|
472
|
+
- Used in education, projects, recognitions, and associations.
|
|
473
|
+
- Use HTML entities like `–` for en-dash (–) and `&` for ampersand (&).
|
|
474
|
+
|
|
475
|
+
### Active / Inactive Visibility Flags
|
|
476
|
+
|
|
477
|
+
Every list section except interests uses the boolean `active:` flag:
|
|
478
|
+
- `active: true`: Item renders on the resume.
|
|
479
|
+
- `active: false`: Item is preserved in your YAML record but omitted from generated HTML.
|
|
480
|
+
- No `active` key: the item does not render either, and the validator warns. `interests.yml` is the exception: its items have no flag and always render.
|
|
481
|
+
|
|
482
|
+
### YAML Formatting & Special Characters
|
|
483
|
+
|
|
484
|
+
- Wrap values containing colons, quotes, or dashes in double quotes:
|
|
485
|
+
```yaml
|
|
486
|
+
name: "AWS Certified: Solutions Architect"
|
|
487
|
+
```
|
|
488
|
+
- Multiline summaries should use YAML folded blocks (`>-`) or literal blocks (`|`):
|
|
489
|
+
```yaml
|
|
490
|
+
summary: >-
|
|
491
|
+
First line of summary text that will flow continuously
|
|
492
|
+
without unwanted line breaks.
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### Section Mapping Summary
|
|
496
|
+
|
|
497
|
+
| Section Name | Config Key (`resume_section`) | Render Order Key (`resume_section_order`) | YAML File Name |
|
|
498
|
+
|---|---|---|---|
|
|
499
|
+
| Experience | `experience` | `experience` | `experience.yml` |
|
|
500
|
+
| Education | `education` | `education` | `education.yml` |
|
|
501
|
+
| Certifications | `certifications` | `certifications` | `certifications.yml` |
|
|
502
|
+
| Courses | `courses` | `courses` | `courses.yml` |
|
|
503
|
+
| Volunteering | `volunteering` | `volunteering` | `volunteering.yml` |
|
|
504
|
+
| Projects | `projects` | `projects` | `projects.yml` |
|
|
505
|
+
| Skills | `skills` | `skills` | `skills.yml` |
|
|
506
|
+
| Recognition | `recognitions` | `recognitions` | `recognitions.yml` |
|
|
507
|
+
| Associations | `associations` | `associations` | `associations.yml` |
|
|
508
|
+
| Languages | `languages` / `lang_header` | `languages` | `languages.yml` |
|
|
509
|
+
| Links | `links` | `links` | `links.yml` |
|
|
510
|
+
| Interests | `interests` | `interests` | `interests.yml` |
|
|
511
|
+
| Publications | `publications` | `publications` | `publications.yml` |
|
|
512
|
+
| References | `references` | `references` | `references.yml` |
|
|
513
|
+
| Header Intro | `languages.<lang>.header_intro` | *(rendered in header)* | `header.yml` |
|
|
514
|
+
|
|
515
|
+
## JSON Resume enrichment
|
|
516
|
+
|
|
517
|
+
Existing data does not need to change. Export mapping and rules: [`json-resume-fields.md`](json-resume-fields.md). For richer exports, add these optional fields:
|
|
518
|
+
|
|
519
|
+
- Experience and volunteering: `url` and `highlights` (array of strings).
|
|
520
|
+
- Education: `area`, `study_type`, `score`, `url`, `courses` (array of strings). Existing `startdate` and `enddate` are supported; display-oriented `year` remains.
|
|
521
|
+
- Projects: `startdate`, `enddate`, `roles`, `highlights`, `keywords`. The last three are arrays of strings; existing scalar `role` works without `roles`.
|
|
522
|
+
- Recognitions: an ISO `date`, independently of the display-oriented `year`.
|
|
523
|
+
- Skills: textual `level_label` and an array of `keywords`. Numeric `level` retains its existing 1–5 meaning and is not converted to an invented proficiency label.
|
|
524
|
+
- Interests: `keywords` as an array of strings.
|
|
525
|
+
- Per-language config: `postal_code`, `city`, `country_code`, `region`. These are exported as `basics.location` whenever `display_header_contact_info: true`, unless `json_resume.privacy.export_contact_info: false`; see [Contact fields by privacy setting](json-resume-fields.md#contact-fields-by-privacy-setting).
|
|
526
|
+
|
|
527
|
+
Use `startdate`/`enddate` consistently. No `start_date`/`end_date` aliases are added. The source validator checks added list fields, skill labels, project dates, recognition dates, and relevant URLs; the exporter also validates output formats.
|
|
528
|
+
|
|
529
|
+
A `skills.yml` example is in [Publish the JSON Resume export](../how-to/publish-json-resume.md#3-optionally-enrich-skills).
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Glossary
|
|
2
|
+
|
|
3
|
+
*Audience: site owners and theme developers*
|
|
4
|
+
|
|
5
|
+
Definitions of terms used across the documentation, each linking to the page that owns the full detail.
|
|
6
|
+
|
|
7
|
+
**active flag**: The boolean `active:` key on list items. `active: true` renders the item, `active: false` keeps it in the YAML but omits it from the HTML; interests are the exception and have no flag. See [data schemas](data-schemas.md).
|
|
8
|
+
|
|
9
|
+
**canonical key vs alias**: The canonical key is the field name the templates actually render (for example `company`); an alias is another name the templates never read (for example `organization`). An entry that sets only an alias fails validation, and the error names the alias found. See [validator CLI](validator-cli.md).
|
|
10
|
+
|
|
11
|
+
**data-loader**: The include [`data-loader.html`](../../_includes/data-loader.html), which binds `resume_data` by walking `site.data` along a dot-separated data path. See [includes](includes.md).
|
|
12
|
+
|
|
13
|
+
**data path**: The value of `languages.<lang>.data_path`, a dot-separated path to the folder under `_data/` holding that language's resume YAML files (for example `en` for `_data/en/`). See [config](config.md).
|
|
14
|
+
|
|
15
|
+
**default language**: The `default_lang` setting (default `en`): the language used when a page has no `lang`, for the hreflang `x-default` link, and for error page button labels. See [config](config.md).
|
|
16
|
+
|
|
17
|
+
**effective locale**: The locale a language actually uses after merging: the theme's `_data/locales/<lang>.yml` with the site's own `_data/locales/<lang>.yml` deep-merged over it. See [locale keys](locale-keys.md#overriding-theme-locales).
|
|
18
|
+
|
|
19
|
+
**FOUC**: Flash of unstyled or wrong-theme content, the brief moment a page paints in the wrong color scheme before the stored preference is applied. An inline script in `shared-head.html` prevents it. See [dark mode approach](../explanation/dark-mode-approach.md#avoiding-a-flash-of-the-wrong-theme).
|
|
20
|
+
|
|
21
|
+
**locale**: The per-language file `_data/locales/<lang>.yml` holding text direction, font, UI strings, month names, "present" words, and error page copy. See [locale keys](locale-keys.md).
|
|
22
|
+
|
|
23
|
+
**parity**: The requirement that every language has the same key set in its locale and the same section files in its data folder; the validator compares each language against the reference language. See [validator CLI](validator-cli.md).
|
|
24
|
+
|
|
25
|
+
**pinned**: Explicitly set to a color scheme, as opposed to following the system preference: `data-color-scheme` or `data-theme` on `:root` overrides the automatic dark mode. See [dark mode approach](../explanation/dark-mode-approach.md).
|
|
26
|
+
|
|
27
|
+
**"Present" value**: A word in an `enddate` field that means "ongoing" and renders as the locale's `ui.present` label instead of a date. See [locale keys](locale-keys.md#present-values).
|
|
28
|
+
|
|
29
|
+
**profile page**: The standalone landing page rendered with `layout: profile`. See [layouts](layouts.md).
|
|
30
|
+
|
|
31
|
+
**reference (primary) language**: The language every other language is compared against for parity checks: `--primary` (default `en`) if it has a locale, else `default_lang`, else the first language. See [validator CLI](validator-cli.md).
|
|
32
|
+
|
|
33
|
+
**resume page (CV)**: A page rendered with `layout: resume` plus `lang: <code>`; one layout serves every language. See [layouts](layouts.md).
|
|
34
|
+
|
|
35
|
+
**section**: One resume block (such as experience or education), rendered by `resume-section.html` in the order of `resume_section_order` when its `resume_section.<name>` flag is truthy. See [config](config.md) and [includes](includes.md).
|
|
36
|
+
|
|
37
|
+
**strict mode**: `validate_resume_strict: true`: build-time validation raises a fatal error when there are validation errors (and, with `validate_resume_fail_on_warnings: true`, on warnings too). See [validator and build checks](validator-cli.md#5-jekyll-build-time-validation).
|
|
38
|
+
|
|
39
|
+
**`t_id`**: A front-matter key shared by translations of the same page; it drives hreflang alternates and lets the language switcher find the exact counterpart page. Generated pages use `t_id: resume` or `t_id: profile`. See [includes](includes.md).
|