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.
Files changed (123) hide show
  1. checksums.yaml +7 -0
  2. data/403.html +6 -0
  3. data/404.html +6 -0
  4. data/500.html +6 -0
  5. data/CHANGELOG.md +498 -0
  6. data/CODE_OF_CONDUCT.md +92 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +184 -0
  9. data/SECURITY.md +30 -0
  10. data/_config.sample.yml +329 -0
  11. data/_data/locales/ar.yml +85 -0
  12. data/_data/locales/de.yml +86 -0
  13. data/_data/locales/en.yml +84 -0
  14. data/_data/locales/es.yml +86 -0
  15. data/_data/locales/fr.yml +86 -0
  16. data/_data/locales/ur.yml +86 -0
  17. data/_data/social_networks.yml +83 -0
  18. data/_includes/analytics-body.html +12 -0
  19. data/_includes/analytics-head.html +36 -0
  20. data/_includes/avatar.html +84 -0
  21. data/_includes/dark-mode-toggle.html +202 -0
  22. data/_includes/data-loader.html +42 -0
  23. data/_includes/date-formatter.html +63 -0
  24. data/_includes/grouped-item-list.html +53 -0
  25. data/_includes/hreflang.html +58 -0
  26. data/_includes/language-switcher.html +72 -0
  27. data/_includes/print-social-links.html +23 -0
  28. data/_includes/resume-section.html +547 -0
  29. data/_includes/safe-url.html +21 -0
  30. data/_includes/shared-head.html +51 -0
  31. data/_includes/social-links.html +54 -0
  32. data/_includes/vendors/svg-icons/ATTRIBUTION.md +34 -0
  33. data/_includes/vendors/svg-icons/dev.svg +3 -0
  34. data/_includes/vendors/svg-icons/dribbble-symbol.svg +3 -0
  35. data/_includes/vendors/svg-icons/envelope.svg +4 -0
  36. data/_includes/vendors/svg-icons/facebook.svg +3 -0
  37. data/_includes/vendors/svg-icons/flickr.svg +4 -0
  38. data/_includes/vendors/svg-icons/github.svg +3 -0
  39. data/_includes/vendors/svg-icons/globe-1.svg +3 -0
  40. data/_includes/vendors/svg-icons/instagram.svg +4 -0
  41. data/_includes/vendors/svg-icons/linkedin.svg +3 -0
  42. data/_includes/vendors/svg-icons/medium.svg +3 -0
  43. data/_includes/vendors/svg-icons/phone.svg +13 -0
  44. data/_includes/vendors/svg-icons/pinterest.svg +3 -0
  45. data/_includes/vendors/svg-icons/postcard.svg +14 -0
  46. data/_includes/vendors/svg-icons/telegram.svg +3 -0
  47. data/_includes/vendors/svg-icons/whatsapp.svg +3 -0
  48. data/_includes/vendors/svg-icons/x.svg +3 -0
  49. data/_includes/vendors/svg-icons/youtube.svg +3 -0
  50. data/_layouts/default.html +65 -0
  51. data/_layouts/error.html +138 -0
  52. data/_layouts/profile.html +123 -0
  53. data/_layouts/resume.html +238 -0
  54. data/_plugins/error_pages_generator.rb +71 -0
  55. data/_plugins/json_resume_generator.rb +79 -0
  56. data/_plugins/resume_pages_generator.rb +71 -0
  57. data/_plugins/resume_validator.rb +40 -0
  58. data/_sass/_all-pages.scss +335 -0
  59. data/_sass/_base.scss +130 -0
  60. data/_sass/_dark-mode.scss +387 -0
  61. data/_sass/_layout.scss +116 -0
  62. data/_sass/_mixins.scss +136 -0
  63. data/_sass/_normalize.scss +379 -0
  64. data/_sass/_profile-page.scss +60 -0
  65. data/_sass/_resume-ltr.scss +436 -0
  66. data/_sass/_resume-rtl.scss +91 -0
  67. data/_sass/_variables.scss +45 -0
  68. data/assets/css/cv-ltr.scss +31 -0
  69. data/assets/css/cv-rtl.scss +36 -0
  70. data/assets/css/main.scss +8 -0
  71. data/assets/css/profile.scss +9 -0
  72. data/assets/favicon/resume/about.txt +6 -0
  73. data/assets/favicon/resume/android-chrome-192x192.png +0 -0
  74. data/assets/favicon/resume/android-chrome-512x512.png +0 -0
  75. data/assets/favicon/resume/apple-touch-icon.png +0 -0
  76. data/assets/favicon/resume/favicon-16x16.png +0 -0
  77. data/assets/favicon/resume/favicon-32x32.png +0 -0
  78. data/assets/favicon/resume/favicon.ico +0 -0
  79. data/assets/favicon/resume/site.webmanifest +1 -0
  80. data/bin/validate-resume +89 -0
  81. data/bin/verify +27 -0
  82. data/docs/README.md +89 -0
  83. data/docs/explanation/accessibility-decisions.md +27 -0
  84. data/docs/explanation/architecture.md +44 -0
  85. data/docs/explanation/dark-mode-approach.md +25 -0
  86. data/docs/explanation/data-driven-model.md +25 -0
  87. data/docs/explanation/multilingual-and-rtl-design.md +40 -0
  88. data/docs/how-to/add-a-language.md +57 -0
  89. data/docs/how-to/add-a-section.md +35 -0
  90. data/docs/how-to/add-a-social-platform.md +32 -0
  91. data/docs/how-to/add-a-test.md +34 -0
  92. data/docs/how-to/create-a-custom-layout.md +64 -0
  93. data/docs/how-to/enable-dark-mode.md +43 -0
  94. data/docs/how-to/link-translations-with-hreflang.md +25 -0
  95. data/docs/how-to/migrate-v0.9-to-v1.0.md +46 -0
  96. data/docs/how-to/override-locale-strings.md +51 -0
  97. data/docs/how-to/override-sass-partials.md +26 -0
  98. data/docs/how-to/proof-built-html.md +22 -0
  99. data/docs/how-to/publish-json-resume.md +38 -0
  100. data/docs/how-to/show-language-proficiency-in-header.md +13 -0
  101. data/docs/how-to/switch-resume-versions.md +42 -0
  102. data/docs/how-to/troubleshoot-builds.md +39 -0
  103. data/docs/how-to/validate-in-ci.md +38 -0
  104. data/docs/how-to/verify-accessibility.md +28 -0
  105. data/docs/reference/accessibility-coverage.md +39 -0
  106. data/docs/reference/config.md +378 -0
  107. data/docs/reference/data-schemas.md +529 -0
  108. data/docs/reference/glossary.md +39 -0
  109. data/docs/reference/includes.md +197 -0
  110. data/docs/reference/json-resume-fields.md +148 -0
  111. data/docs/reference/layouts.md +144 -0
  112. data/docs/reference/locale-keys.md +76 -0
  113. data/docs/reference/repository-map.md +83 -0
  114. data/docs/reference/sass-tokens.md +279 -0
  115. data/docs/reference/testing-suites.md +62 -0
  116. data/docs/reference/validator-cli.md +203 -0
  117. data/docs/tutorials/getting-started.md +173 -0
  118. data/lib/jekyll-theme-resume/json_resume_exporter.rb +334 -0
  119. data/lib/jekyll-theme-resume/resume_validator.rb +853 -0
  120. data/lib/jekyll-theme-resume/schemas/LICENSE.md +21 -0
  121. data/lib/jekyll-theme-resume/schemas/json_resume_v1.0.0.json +500 -0
  122. data/lib/jekyll-theme-resume.rb +21 -0
  123. metadata +371 -0
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Joel Glovier
4
+ Copyright (c) 2025 Khaldoon Mutahar
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,184 @@
1
+ # jekyll-theme-resume
2
+
3
+ [![CI Test Suite](https://github.com/kmutahar/jekyll-theme-resume/actions/workflows/ci.yml/badge.svg)](https://github.com/kmutahar/jekyll-theme-resume/actions/workflows/ci.yml) [![Latest release](https://img.shields.io/github/v/release/kmutahar/jekyll-theme-resume?display_name=tag)](https://github.com/kmutahar/jekyll-theme-resume/releases) [![Gem Version](https://badge.fury.io/rb/jekyll-theme-resume.svg?icon=si%3Arubygems)](https://badge.fury.io/rb/jekyll-theme-resume)
4
+
5
+ A flexible Jekyll theme for clean, data-driven, multilingual resume/CV websites. Ships English, Arabic, Spanish, French, German, and Urdu; any other language is added from your site alone. Created and maintained by Khaldoon Mutahar. See the latest version on the [Releases page](https://github.com/kmutahar/jekyll-theme-resume/releases).
6
+
7
+ **Links:** [RubyGems](https://rubygems.org/gems/jekyll-theme-resume) · [Live demo](https://www.mutahr.me/jekyll-theme-resume) · [Source](https://github.com/kmutahar/jekyll-theme-resume)
8
+ Inspired by and originally forked from [Joel Glovier’s resume template](https://github.com/jglovier/resume-template/). Joel’s version was a basic English-only theme with limited customization (e.g., no section reordering); this project has since evolved into a fully separate theme authored by Khaldoon.
9
+
10
+ ## Features
11
+
12
+ - **Multilingual support**: One layout (`resume.html`) renders every language, LTR or RTL, from per-language locale files (`_data/locales/<lang>.yml`) with localized UI strings, month names, and fonts (Cairo for Arabic, Noto Nastaliq Urdu for Urdu)
13
+ - **Dark mode**: System preference detection (`prefers-color-scheme`) with optional interactive toggle, `localStorage` persistence, and zero-FOUC inline script
14
+ - **Data-driven architecture**: All resume content stored in YAML files, supporting multiple data paths and versioning
15
+ - **Resume sections**: Experience, Education, Certifications, Courses, Volunteering, Projects, Skills, Recognition, Associations, Languages, Links, Interests, Publications, References
16
+ - **Accessibility features**: Semantic landmarks, keyboard navigation, localized skip links, and labelled social controls. See the [Accessibility coverage](docs/reference/accessibility-coverage.md) for coverage and known limitations.
17
+ - **Modern favicon suite**: High-resolution favicons (Apple touch icon, 32x32, 16x16, webmanifest) with subpath-safe URLs and `_config.yml` override support
18
+ - **Print-friendly**: Optimized for PDF generation and printing with bidirectional text isolation (`dir="ltr"`) for URLs
19
+ - **SEO ready**: Built-in support for multilingual SEO, standardized canonical tags via `jekyll-seo-tag`, sitemaps, and feeds
20
+ - **JSON Resume Export**: Multilingual builds generate standards-validated JSON Resume files at `/<lang>/resume.json` (on by default; opt out with `json_resume.enabled: false`).
21
+ - **Automatic pages**: Missing CV and profile pages are generated for each configured language; hand-authored pages take precedence.
22
+ - **Data validation**: `validate-resume` CLI and build-time checks for schemas, dates, URLs, and parity across every configured language
23
+
24
+ ## Quick Start
25
+
26
+ ### Installation
27
+
28
+ 1. Add to your Jekyll site's `Gemfile`, inside `group :jekyll_plugins`. The `:jekyll_plugins` group loads the theme’s bundled generators and validator. Alternatively, explicitly list `jekyll-theme-resume` under `plugins:` in `_config.yml` (as the sample does); a plain Gemfile entry plus `theme:` alone is insufficient:
29
+ ```ruby
30
+ group :jekyll_plugins do
31
+ gem "jekyll-theme-resume"
32
+ end
33
+ ```
34
+
35
+ 2. Add to your `_config.yml`:
36
+ ```yaml
37
+ theme: jekyll-theme-resume
38
+ ```
39
+
40
+ 3. Install dependencies:
41
+ ```bash
42
+ bundle install
43
+ ```
44
+
45
+ > **Upgrading from v0.9.0?** v1.0.0 removes the `resume-en` / `resume-ar` layouts and every `*_en` / `*_ar` config key with no compatibility aliases. Follow the migration table in the [migration guide](docs/how-to/migrate-v0.9-to-v1.0.md).
46
+
47
+ ### Next steps
48
+
49
+ Follow [Getting Started](docs/tutorials/getting-started.md) for a complete walkthrough from an empty folder to a running two-language resume. The theme generates the CV and profile page for every language you configure (see [the languages table](docs/reference/config.md#3-languages)), and the sample data for six languages lives in `demo/_data/`.
50
+
51
+ ## Documentation
52
+
53
+ The documentation is organized by what you need. Start at the [documentation index](docs/README.md).
54
+
55
+ | I want to... | Go to |
56
+ |---|---|
57
+ | Build my first resume site | [Getting Started](docs/tutorials/getting-started.md) (tutorial) |
58
+ | Do one task: add a language, override strings, publish JSON, validate in CI | [How-to guides](docs/README.md#how-to-guides) |
59
+ | Look up a setting, schema, or flag | [Reference](docs/README.md#reference) |
60
+ | Understand why the theme works this way | [Explanation](docs/README.md#explanation) |
61
+ | Contribute or follow the project rules | [AGENTS.md](AGENTS.md) · [Changelog](CHANGELOG.md) |
62
+
63
+ Most-used reference pages: [Configuration reference](docs/reference/config.md) (**start here** for `_config.yml`), [Data schemas](docs/reference/data-schemas.md), [Locale keys](docs/reference/locale-keys.md), [Validator and build checks](docs/reference/validator-cli.md), [JSON Resume export reference](docs/reference/json-resume-fields.md), and [Accessibility coverage](docs/reference/accessibility-coverage.md).
64
+
65
+ ## Project Structure
66
+
67
+ ```text
68
+ jekyll-theme-resume/
69
+ ├── _layouts/ # HTML templates (default, resume, profile, error)
70
+ ├── _includes/ # Reusable components (section dispatcher, date formatter, avatar, toggles)
71
+ ├── _sass/ # SCSS (LTR main styles, RTL overrides, dark mode tokens, print styles)
72
+ ├── _plugins/ # Error page generator and build-time resume validator
73
+ ├── _data/locales/ # Locale dictionaries: en, ar, es, fr, de, ur
74
+ ├── lib/ # Gem entrypoint and validator engine
75
+ ├── bin/ # validate-resume CLI
76
+ ├── assets/ # CSS entrypoints (cv-ltr, cv-rtl), images, favicons
77
+ ├── _config.sample.yml # Annotated configuration for consuming sites
78
+ ├── demo/ # Separate demo-site submodule, including six-language data
79
+ └── docs/ # Documentation: tutorial, how-to guides, reference, explanation
80
+ ```
81
+
82
+ ## Key Concepts
83
+
84
+ ### Data Paths
85
+
86
+ Each language reads its data from the folder named by `languages.<lang>.data_path`:
87
+ ```yaml
88
+ languages:
89
+ en:
90
+ data_path: en # _data/en/*
91
+ ar:
92
+ data_path: ar # _data/ar/*
93
+ ```
94
+
95
+ Use one folder per language even for a single-language site; adding a language later is then one more folder. Dot paths (`"2025-06.v1"`) select nested, versioned datasets, and `""` reads `_data/` itself.
96
+
97
+ See the [Configuration reference](docs/reference/config.md#3-languages) for every per-language key.
98
+
99
+ ### Sample Files
100
+
101
+ `demo/_data/{en,ar,es,fr,de,ur}/` hold a complete Sherlock Holmes demo resume in six languages, covering all section types. Copy the folders you need to your site.
102
+
103
+ ### Locales
104
+
105
+ Month names, "Present" labels, section titles, fonts, and text direction come from `_data/locales/<lang>.yml`, shipped inside the gem for all six languages. Override single strings or add a new language from your site's own `_data/locales/`; see [Override locale strings](docs/how-to/override-locale-strings.md) and [Add a language](docs/how-to/add-a-language.md).
106
+
107
+ ## Development
108
+
109
+ To develop this theme locally:
110
+
111
+ ```bash
112
+ # Initialize the demo submodule, then install dependencies
113
+ git submodule update --init --recursive
114
+ bundle install
115
+
116
+ # Serve the six-language demo from the demo submodule
117
+ bundle exec jekyll serve --source demo --destination _site
118
+ # (Or with live reload and incremental builds)
119
+ bundle exec jekyll serve --source demo --destination _site --livereload --incremental
120
+
121
+ # Build static output
122
+ bundle exec jekyll build --source demo --destination _site
123
+
124
+ # Clean cached Jekyll build artifacts
125
+ bundle exec jekyll clean
126
+
127
+ # Validate resume data schemas and parity (CLI or Rake)
128
+ ./bin/validate-resume demo/_data
129
+ bundle exec rake validate
130
+
131
+ # Check that the theme's own templates only reference real data keys (CLI or Rake)
132
+ ./bin/check-data-keys demo/_data
133
+ bundle exec rake check_data_keys
134
+
135
+ # Data validator, template key checker, RuboCop, and every test suite
136
+ bundle exec rake
137
+
138
+ # Verify built HTML (separate from the default Rake task)
139
+ bundle exec rake "proof[_site,demo/_config.yml]"
140
+
141
+ # Build the gem
142
+ gem build jekyll-theme-resume.gemspec
143
+
144
+ # List packaged files (must include locales and bin, exclude tests)
145
+ gem spec jekyll-theme-resume-*.gem files
146
+ rm -f jekyll-theme-resume-*.gem
147
+
148
+ # Dependency Audit
149
+ bundle outdated
150
+ bundle update
151
+
152
+ # Automated Version Release (updates gemspec, changelog, commits, and tags)
153
+ ./bin/release <version>
154
+ ./bin/release --bump
155
+ ```
156
+
157
+ For more details on resume schema checks, see [Validator and build checks](docs/reference/validator-cli.md). Contributor and agent rules are in [AGENTS.md](AGENTS.md).
158
+
159
+ ## Requirements
160
+
161
+ - Ruby 3.3+; this repository’s CI matrix tests 3.3, 3.4, and 4.0.
162
+ - Jekyll `~> 4.4` (4.4 or later, below 5.0), as specified in the gemspec.
163
+ - Runtime plugin dependencies (Jekyll loads them automatically when `theme:` is set; the sample config also lists them under `plugins:` to make them explicit):
164
+ - `jekyll-feed`
165
+ - `jekyll-seo-tag`
166
+ - `jekyll-sitemap`
167
+ - `jekyll-redirect-from`
168
+
169
+ ## Contributing
170
+
171
+ Bug reports and pull requests are welcome on GitHub. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://www.contributor-covenant.org/) code of conduct.
172
+
173
+ ## License
174
+
175
+ The theme is available as open source under the terms of the [MIT License](LICENSE.txt).
176
+
177
+ ## Support
178
+
179
+ - 📖 Check the [Documentation](#documentation) for detailed information
180
+ - 🐛 Report issues on [GitHub Issues](https://github.com/kmutahar/jekyll-theme-resume/issues)
181
+
182
+ ---
183
+
184
+ **Created by Khaldoon Mutahar** | MIT License
data/SECURITY.md ADDED
@@ -0,0 +1,30 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We take the security of our resume theme and the dependencies it delivers to our users seriously. Because this theme is distributed as a RubyGem package used to build static sites, we actively patch vulnerabilities discovered in our runtime plugin requirements.
6
+
7
+ The following versions of `jekyll-theme-resume` currently receive security updates:
8
+
9
+ | Version | Supported | Notes |
10
+ | ------- | ------------------ | ----------------------------------- |
11
+ | 1.0.x | :white_check_mark: | Current stable release branch. |
12
+ | 0.9.x | :white_check_mark: | Maintenance & security patches. |
13
+ | < 0.9 | :x: | Legacy branches; please upgrade. |
14
+
15
+ ## Our Dependency Monitoring
16
+
17
+ The checked-in [Dependabot configuration](.github/dependabot.yml) schedules daily Bundler dependency updates and weekly GitHub Actions updates. The repository also contains [Mend configuration](.whitesource) with a `LOW` minimum issue severity. These files describe configuration, not proof that a hosted service is enabled or that all alerts are resolved. No CodeQL workflow is checked in.
18
+
19
+ ## Reporting a Vulnerability
20
+
21
+ If you discover a security vulnerability within this theme or find an unpatched runtime dependency risk, please do not disclose it publicly via GitHub Issues. Instead, report it responsibly through private channels:
22
+
23
+ 1. **Email the Maintainer:** Send a detailed report to **contact@mutahar.me**.
24
+ 2. **Include Details:** Please provide a description of the vulnerability, the version affected, and a proof-of-concept or steps to reproduce the issue if possible.
25
+
26
+ ### What to Expect
27
+
28
+ * **Acknowledgment:** You will receive a response acknowledging your report within 48 hours.
29
+ * **Triage & Status Updates:** We will update you at least once a week while working on a resolution.
30
+ * **Resolution:** If the vulnerability is accepted, a patched release (e.g., a new patch gem version) will be published, and credit will be given to the reporter if desired.
@@ -0,0 +1,329 @@
1
+ # ==============================================================================
2
+ # MULTILINGUAL JEKYLL RESUME THEME - MASTER SAMPLE CONFIGURATION
3
+ # ==============================================================================
4
+ # This configuration file contains all supported settings for the theme.
5
+ # Copy this file to your site's root as `_config.yml` and customize it.
6
+ # Working defaults are uncommented. Optional and advanced overrides are commented.
7
+ # ==============================================================================
8
+
9
+ # ==============================================================================
10
+ # 1. SITE IDENTITY & LOCALIZATION
11
+ # ==============================================================================
12
+ theme: jekyll-theme-resume
13
+ title: "Your Full Name"
14
+ description: >- # Ignore newlines until next key; used for SEO meta descriptions
15
+ A brief description of your site or professional tagline.
16
+ url: "https://your-domain.com" # Full site URL (protocol + host), e.g. https://example.com
17
+ baseurl: "" # Subpath if hosted in a subdirectory (e.g., /resume); keep "" if at root
18
+ timezone: UTC # Timezone for date rendering (e.g., UTC, America/New_York, Asia/Riyadh)
19
+
20
+ # Language comes from page.lang or default_lang (Section 6.5).
21
+ # Direction comes from _data/locales/<lang>.yml; no site-wide lang/dir keys are used.
22
+
23
+ # ==============================================================================
24
+ # 2. FAVICONS & WEB APP MANIFEST (Optional - defaults to theme bundled assets)
25
+ # ==============================================================================
26
+ # Override these with relative paths in your site repository if you provide custom icons:
27
+ # favicon: "assets/favicon/resume/favicon.ico"
28
+ # apple_touch_icon: "assets/favicon/resume/apple-touch-icon.png"
29
+ # favicon_32: "assets/favicon/resume/favicon-32x32.png"
30
+ # favicon_16: "assets/favicon/resume/favicon-16x16.png"
31
+
32
+ # ==============================================================================
33
+ # 3. PERSONAL INFORMATION & TITLES (Required)
34
+ # ==============================================================================
35
+ # Name, job title, address, and avatar alt text are per-language in Section 6.5
36
+ # (languages.<lang>.name / .resume_title / .address / .avatar_alt). There is no
37
+ # site-wide name or title key in v1.0.0.
38
+
39
+ # ==============================================================================
40
+ # 4. PROFILE PICTURE / AVATAR SETTINGS
41
+ # ==============================================================================
42
+ # Master toggle for displaying profile picture in the resume header
43
+ resume_avatar: true
44
+
45
+ # Custom image source (relative path like 'assets/images/me.jpg' or full URL 'https://example.com/avatar.jpg')
46
+ # Defaults to theme default '/assets/images/Profile-min.jpg' if not specified
47
+ # avatar_url: "assets/images/Profile-min.jpg"
48
+
49
+ # Accessible alt text falls back to languages.<lang>.avatar_alt (Section 6.5),
50
+ # then languages.<lang>.name, then locale.ui.photo_alt if neither is set.
51
+
52
+ # Clickable avatar link destination and behavior
53
+ # Set to false to render as a plain standalone <img> without an <a> wrapper
54
+ # avatar_link: "/" # Destination URL (default: "/")
55
+ # avatar_link_target: "_self" # Target attribute: "_self" (recommended) or "_blank"
56
+
57
+ # ==============================================================================
58
+ # 5. CONTACT INFORMATION (Required: at least email)
59
+ # ==============================================================================
60
+ contact_info:
61
+ email: "sherlock@example.com" # Required for contact CTA button
62
+ phone: "+44 20 7946 0958" # Optional
63
+ # Address is per-language: languages.<lang>.address (Section 6.5)
64
+ # dob: 1990-01-01 # Optional Date of Birth (YYYY-MM-DD)
65
+ #
66
+ # Advanced: alternate contact info used when enable_live: true
67
+ # email_live: "live@example.com"
68
+ # phone_live: "+1 555 000 0000"
69
+
70
+ # ==============================================================================
71
+ # 6. SOCIAL MEDIA LINKS (Optional - only add platforms you actively use)
72
+ # ==============================================================================
73
+ # Supported platforms render interactive SVG icons on page and text in print.
74
+ # `email` renders a native mailto: link with an accessible label (Feature 1.7):
75
+ social_links:
76
+ email: "you@example.com"
77
+ github: https://github.com/yourusername
78
+ linkedin: https://www.linkedin.com/in/yourhandle/
79
+ twitter: https://twitter.com/yourhandle
80
+ # telegram: https://t.me/yourhandle
81
+ # medium: https://medium.com/@yourhandle
82
+ # website: https://yourwebsite.com
83
+ # whatsapp: https://wa.me/1234567890
84
+ # instagram: https://instagram.com/yourhandle
85
+ # facebook: https://facebook.com/yourhandle
86
+ # youtube: https://youtube.com/@yourhandle
87
+ # devto: https://dev.to/yourhandle
88
+ # dribbble: https://dribbble.com/yourhandle
89
+ # flickr: https://flickr.com/people/yourhandle
90
+ # pinterest: https://pinterest.com/yourhandle
91
+ # mastodon: https://mastodon.social/@yourhandle # Emits <link rel="me"> in default layout
92
+
93
+ # ==============================================================================
94
+ # 6.5 LANGUAGES (v1.0.0 locale-agnostic `layout: resume`)
95
+ # ==============================================================================
96
+ # Direction and fonts come from _data/locales/<lang>.yml, never from here.
97
+ # Each entry's data_path/url/header_intro/name/resume_title/address/avatar_alt
98
+ # feed the single `_layouts/resume.html` layout for that language.
99
+ #
100
+ # Two more keys are optional and consumed only by `layout: profile` (the
101
+ # bio-link homepage, not the CV):
102
+ # about - Free-form bio rendered under the name. Markdown, raw HTML, or
103
+ # plain text all work (piped through markdownify).
104
+ # name_html - Override for the <h1> name markup. Without it, the layout
105
+ # auto-bolds the last space-separated word (the common
106
+ # single-surname case). Set this for compound surnames,
107
+ # particles ("van der Berg"), or hyphenated names where that
108
+ # guess would bold the wrong part.
109
+ languages:
110
+ en:
111
+ data_path: en
112
+ url: /en/cv/
113
+ header_intro: true
114
+ name: "Your Full Name"
115
+ resume_title: "Your Job Title"
116
+ address: "Your City, Your Country"
117
+ avatar_alt: "Your profile photo"
118
+ # about: >-
119
+ # A brief bio for your homepage. Supports **Markdown**, <a href="https://example.com">raw HTML</a>, or plain text.
120
+ # name_html: "Your <b>Full Name</b>"
121
+ ar:
122
+ data_path: ar
123
+ url: /ar/cv/
124
+ header_intro: true
125
+ name: "اسمك الكامل"
126
+ resume_title: "مسماك الوظيفي"
127
+ address: "مدينتك، بلدك"
128
+ avatar_alt: "صورتك الشخصية"
129
+ # about: >-
130
+ # نبذة مختصرة لصفحتك الرئيسية.
131
+ # name_html: "اسمك <b>الكامل</b>"
132
+ es:
133
+ data_path: es
134
+ url: /es/cv/
135
+ header_intro: true
136
+ name: "Tu Nombre Completo"
137
+ resume_title: "Tu Cargo"
138
+ address: "Tu Ciudad, Tu País"
139
+ avatar_alt: "Tu foto de perfil"
140
+ # about: >-
141
+ # Una breve biografía para tu página principal.
142
+ # name_html: "Tu <b>Nombre Completo</b>"
143
+ fr:
144
+ data_path: fr
145
+ url: /fr/cv/
146
+ header_intro: true
147
+ name: "Votre Nom Complet"
148
+ resume_title: "Votre Poste"
149
+ address: "Votre Ville, Votre Pays"
150
+ avatar_alt: "Votre photo de profil"
151
+ # about: >-
152
+ # Une brève biographie pour votre page d'accueil.
153
+ # name_html: "Votre <b>Nom Complet</b>"
154
+ de:
155
+ data_path: de
156
+ url: /de/cv/
157
+ header_intro: true
158
+ name: "Ihr Vollständiger Name"
159
+ resume_title: "Ihre Berufsbezeichnung"
160
+ address: "Ihre Stadt, Ihr Land"
161
+ avatar_alt: "Ihr Profilbild"
162
+ # about: >-
163
+ # Eine kurze Biografie für Ihre Startseite.
164
+ # name_html: "Ihr <b>Vollständiger Name</b>"
165
+ ur:
166
+ data_path: ur
167
+ url: /ur/cv/
168
+ header_intro: true
169
+ name: "آپ کا پورا نام"
170
+ resume_title: "آپ کا عہدہ"
171
+ address: "آپ کا شہر، آپ کا ملک"
172
+ avatar_alt: "آپ کی پروفائل تصویر"
173
+ # about: >-
174
+ # آپ کے ہوم پیج کے لیے ایک مختصر تعارف۔
175
+ # name_html: "آپ کا <b>پورا نام</b>"
176
+
177
+ default_lang: en # Drives hreflang x-default and fallback lookups
178
+
179
+ # A languages.<lang> entry with no hand-authored CV/profile page gets one auto-generated
180
+ # (CV at languages.<lang>.url, profile at "/" for default_lang or "/<lang>/" otherwise).
181
+ # Set false to require every language to have its own hand-authored page. Override per
182
+ # language with languages.<lang>.auto_generate_pages: true/false.
183
+ resume_auto_generate_pages: true
184
+
185
+ # ==============================================================================
186
+ # 7. RESUME DISPLAY & BEHAVIOR CONTROLS
187
+ # ==============================================================================
188
+ # Language dropdown (fixed top-left, lists every other configured language)
189
+ resume_language_switcher: true # Toggle floating language switcher (default: true)
190
+
191
+ # Header display toggles
192
+ display_header_contact_info: true # Show contact info row in header
193
+ # Per-language header intro toggle: languages.<lang>.header_intro (Section 6.5)
194
+
195
+ # Job search status button in header:
196
+ # true -> Display contact button linked to contact_info.email
197
+ # false -> Display "I'm not looking for work" / "لست متاحاً للعمل حالياً" status pill
198
+ # (omit or remove key entirely to display nothing)
199
+ resume_looking_for_work: true
200
+
201
+ # Content behavior
202
+ enable_summary: false # Show detailed summary/description for roles & courses
203
+ enable_live: false # Use email_live & phone_live instead of standard contact info
204
+ resume_print_social_links: true # Render text list of social links in physical and PDF prints
205
+
206
+ # Build-time resume data validation (warns by default; never fails the build
207
+ # unless validate_resume_strict is also true)
208
+ validate_resume: true
209
+ validate_resume_strict: false
210
+
211
+ # ==============================================================================
212
+ # 8. RESUME SECTIONS TOGGLE & RENDER ORDER
213
+ # ==============================================================================
214
+ # Section master toggles (true to render, false to hide):
215
+ resume_section:
216
+ associations: true
217
+ certifications: true
218
+ courses: true
219
+ education: true
220
+ experience: true
221
+ interests: false
222
+ lang_header: true # Show compact language chips in header instead of full section
223
+ languages: false
224
+ links: false
225
+ publications: false
226
+ references: false
227
+ projects: true
228
+ recognitions: false
229
+ skills: false
230
+ volunteering: true
231
+
232
+ # Order in which resume sections appear on the page:
233
+ # Only sections set to 'true' in resume_section above will actually render.
234
+ resume_section_order:
235
+ - experience
236
+ - education
237
+ - certifications
238
+ - courses
239
+ - volunteering
240
+ - projects
241
+ - associations
242
+ - skills
243
+ - recognitions
244
+ - languages
245
+ - interests
246
+ - links
247
+ - publications
248
+ - references
249
+
250
+ # ==============================================================================
251
+ # 9. STYLING, FONTS & DARK MODE
252
+ # ==============================================================================
253
+ # Dark Mode Configuration:
254
+ # - "auto" (default): system-preference CSS, no toggle button; shared preference script still runs
255
+ # - "enabled" or true: Renders interactive floating toggle button with localStorage persistence
256
+ # - false or "disabled": hides the toggle; does not force the page into light mode
257
+ dark_mode: auto
258
+
259
+ # Visual theme variant (default: "default")
260
+ resume_theme: default
261
+
262
+ # To use a self-hosted or alternate CDN font for a locale, override that locale's
263
+ # font_url in your site's own _data/locales/<lang>.yml (see "Overriding Theme
264
+ # Locales" in docs/explanation/multilingual-and-rtl-design.md) instead of a site-wide config key.
265
+
266
+ # Disable font stylesheet loading in the resume layout (including a custom locale font_url)
267
+ # disable_google_fonts: true
268
+
269
+ # Optional authors metadata
270
+ authors: []
271
+
272
+ # ==============================================================================
273
+ # 10. ANALYTICS (Optional - configure at most ONE provider)
274
+ # ==============================================================================
275
+ analytics:
276
+ # Google Tag Manager (recommended - injects head script and noscript body iframe):
277
+ # gtm: "GTM-XXXXXXX"
278
+
279
+ # Google Analytics 4 (injects async gtag.js with measurement ID):
280
+ # gtag: "G-XXXXXXXXXX"
281
+
282
+ # ==============================================================================
283
+ # 11. JEKYLL BUILD SETTINGS & PLUGINS
284
+ # ==============================================================================
285
+ # Required plugins (bundled as theme runtime dependencies)
286
+ plugins:
287
+ # Belt-and-suspenders: Jekyll auto-requires gems listed here (site.gems) regardless
288
+ # of Bundler group, guarding against a Gemfile that forgets to put the theme gem in
289
+ # the `:jekyll_plugins` group — without that, the build-time resume validator and
290
+ # page generators silently never run.
291
+ - jekyll-theme-resume
292
+ - jekyll-feed
293
+ - jekyll-seo-tag
294
+ - jekyll-sitemap
295
+ - jekyll-redirect-from
296
+
297
+ # File processing rules
298
+ include:
299
+ - _redirects
300
+ - .well-known/
301
+ - _pages/
302
+ - _posts/
303
+
304
+ exclude:
305
+ - scratch.md
306
+ - README.md
307
+ - Gemfile*
308
+ - vendor/
309
+ - node_modules/
310
+ - "*.gemspec"
311
+ - netlify.toml
312
+ - vercel.json
313
+ - WARP.md
314
+ - scripts/
315
+
316
+ # Front matter defaults (optional)
317
+ defaults: []
318
+
319
+ # JSON Resume exports: /<lang>/resume.json and a default-language /resume.json.
320
+ # Details and field mappings: docs/reference/json-resume-fields.md in the theme repository.
321
+ json_resume:
322
+ enabled: true
323
+ root_export: true
324
+ languages: [] # Empty/missing: all configured languages
325
+ privacy:
326
+ export_contact_info: true # False removes email, phone, location, WhatsApp from JSON
327
+ # Optional; social_links values remain URL strings.
328
+ # social_usernames:
329
+ # github: octocat
@@ -0,0 +1,85 @@
1
+ direction: "rtl"
2
+ font_family: "'Cairo', sans-serif"
3
+ font_url: "https://fonts.googleapis.com/css2?family=Cairo:wght@300;400;600;700;900&display=swap"
4
+ line_height: 1.6
5
+ ui:
6
+ home: "الرئيسية"
7
+ skip_to_content: "الانتقال إلى المحتوى الرئيسي"
8
+ photo_alt: "الصورة الشخصية"
9
+ present: "حتى الآن"
10
+ date_of_birth: "تاريخ الميلاد:"
11
+ languages: "اللغات:"
12
+ contact_me: "تواصل معي"
13
+ cv_button: "السيرة الذاتية"
14
+ not_looking_for_work: "لستُ باحثاً عن عمل حالياً."
15
+ social_links: "روابط التواصل"
16
+ page_last_generated_on: "تم إنشاء هذه الصفحة بتاريخ"
17
+ cv_last_generated_on: "تم إنشاء هذه السيرة الذاتية بتاريخ"
18
+ at: "في"
19
+ credential_id: "معرّف الاعتماد:"
20
+ list_separator: "، "
21
+ dark_mode_toggle: "تبديل إلى الوضع الداكن"
22
+ language_switcher: "محدد اللغة"
23
+ language_name: "العربية"
24
+ reload_page: "إعادة تحميل الصفحة"
25
+ section_titles:
26
+ experience: "الخبرات العملية"
27
+ education: "التعليم"
28
+ certifications: "التراخيص والشهادات"
29
+ courses: "الدورات"
30
+ volunteering: "الأعمال التطوعية"
31
+ projects: "المشاريع"
32
+ skills: "المهارات"
33
+ recognitions: "الجوائز والتكريم"
34
+ associations: "العضويات"
35
+ interests: "الاهتمامات الخارجية"
36
+ languages: "اللغات"
37
+ links: "روابط إضافية"
38
+ publications: "المنشورات"
39
+ references: "التوصيات"
40
+ social_labels:
41
+ email: "البريد الإلكتروني"
42
+ github: "جيت هاب"
43
+ twitter: "إكس (تويتر)"
44
+ medium: "ميديام"
45
+ dribbble: "دريبل"
46
+ facebook: "فيسبوك"
47
+ linkedin: "لينكد إن"
48
+ instagram: "إنستغرام"
49
+ website: "الموقع الشخصي"
50
+ whatsapp: "واتساب"
51
+ devto: "ديف تو"
52
+ flickr: "فليكر"
53
+ pinterest: "بينتيريست"
54
+ telegram: "تيليجرام"
55
+ youtube: "يوتيوب"
56
+ error_pages:
57
+ "404":
58
+ title: "الصفحة غير موجودة"
59
+ message: "ربما تمت إزالة الصفحة التي تبحث عنها، أو تم تغيير اسمها، أو أنها غير متوفرة مؤقتاً."
60
+ "403":
61
+ title: "الوصول محظور"
62
+ message: "ليس لديك الصلاحية اللازمة للوصول إلى هذا المورد أو الدليل المطلوب."
63
+ "500":
64
+ title: "خطأ داخلي في الخادم"
65
+ message: "واجه الخادم ظرفاً غير متوقع منعه من إكمال الطلب. يرجى المحاولة مرة أخرى لاحقاً."
66
+ "503":
67
+ title: "الخدمة غير متوفرة مؤقتاً"
68
+ message: "الخادم غير قادر على معالجة الطلب حالياً بسبب الصيانة أو زيادة الحمل."
69
+ present_values:
70
+ - "present"
71
+ - "حتى الآن"
72
+ - "حاليًا"
73
+ months:
74
+ - "يناير"
75
+ - "فبراير"
76
+ - "مارس"
77
+ - "أبريل"
78
+ - "مايو"
79
+ - "يونيو"
80
+ - "يوليو"
81
+ - "أغسطس"
82
+ - "سبتمبر"
83
+ - "أكتوبر"
84
+ - "نوفمبر"
85
+ - "ديسمبر"