bilingual-jekyll-resume-theme 0.3.1 → 0.5.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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -0
  3. data/README.md +131 -20
  4. data/_data/ar/months.yml +12 -0
  5. data/_includes/ar-date.html +32 -0
  6. data/_includes/resume-section-ar.html +10 -4
  7. data/_includes/resume-section-en.html +9 -4
  8. data/_layouts/default.html +2 -0
  9. data/_layouts/resume-ar.html +4 -2
  10. data/_layouts/resume-en.html +3 -1
  11. data/docs/CONFIG_GUIDE.md +28 -13
  12. data/docs/DATA_GUIDE.md +106 -27
  13. data/docs/INCLUDES_GUIDE.md +17 -8
  14. data/docs/LAYOUTS_GUIDE.md +40 -25
  15. data/docs/PROJECT_OVERVIEW.md +69 -0
  16. data/docs/SASS_GUIDE.md +3 -1
  17. data/docs/{_config.sample.yml → _data/_config.sample.yml} +2 -1
  18. data/docs/_data/ar/associations.yml +27 -0
  19. data/docs/_data/ar/certifications.yml +73 -0
  20. data/docs/_data/ar/courses.yml +39 -0
  21. data/docs/_data/ar/education.yml +49 -0
  22. data/docs/_data/ar/experience.yml +50 -0
  23. data/docs/_data/ar/header.yml +6 -0
  24. data/docs/_data/ar/interests.yml +13 -0
  25. data/docs/_data/ar/languages.yml +29 -0
  26. data/docs/_data/ar/links.yml +17 -0
  27. data/docs/_data/ar/projects.yml +28 -0
  28. data/docs/_data/ar/recognitions.yml +23 -0
  29. data/docs/_data/ar/skills.yml +17 -0
  30. data/docs/_data/ar/volunteering.yml +39 -0
  31. data/docs/_data/en/associations.yml +27 -0
  32. data/docs/_data/en/certifications.yml +73 -0
  33. data/docs/_data/en/courses.yml +39 -0
  34. data/docs/_data/en/education.yml +49 -0
  35. data/docs/_data/en/experience.yml +50 -0
  36. data/docs/_data/en/header.yml +6 -0
  37. data/docs/_data/en/interests.yml +13 -0
  38. data/docs/_data/en/languages.yml +29 -0
  39. data/docs/_data/en/links.yml +17 -0
  40. data/docs/_data/en/projects.yml +28 -0
  41. data/docs/_data/en/recognitions.yml +23 -0
  42. data/docs/_data/en/skills.yml +17 -0
  43. data/docs/_data/en/volunteering.yml +39 -0
  44. metadata +71 -25
  45. /data/{CODE_OF_CONDUCT.MD → CODE_OF_CONDUCT.md} +0 -0
data/docs/DATA_GUIDE.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  This document explains all data file structures used by the bilingual Jekyll resume theme. Each section of your resume is stored in a separate YAML file in the `_data/` directory.
4
4
 
5
+ **For beginners:** All your resume content (experience, education, skills, etc.) goes in YAML files in the `_data/` folder.
6
+
7
+ **Recommended approach:** Use language-specific folders (`_data/en/` for English and `_data/ar/` for Arabic). This is the recommended approach even if you're only using one language, as it makes it easier to add more languages in the future and keeps your data organized.
8
+
9
+ **Advanced users:** If you prefer, you can place files directly in `_data/` (root), but you'll need to set `active_resume_path_en: ""` and `active_resume_path_ar: ""` in your `_config.yml`.
10
+
11
+ You can copy sample files from `docs/_data/en/` and `docs/_data/ar/` to get started. The theme reads these files and displays them on your resume pages.
12
+
5
13
  Key Features:
6
14
 
7
15
  1. Complete coverage of all 12 data types with commented YAML examples
@@ -40,13 +48,16 @@ Highlights:
40
48
  10. [Languages](#languages)
41
49
  11. [Links](#links)
42
50
  12. [Interests](#interests)
43
- 13. [General Guidlines](#general-guidelines)
51
+ 13. [Header Intro](#header-intro)
52
+ 14. [General Guidlines](#general-guidelines)
44
53
 
45
54
  ---
46
55
 
47
56
  ## Experience
48
57
 
49
- **File:** `_data/experience.yml`
58
+ **File:** `_data/en/experience.yml` (English) or `_data/ar/experience.yml` (Arabic)
59
+
60
+ **Recommended:** Use `_data/en/experience.yml` for English and `_data/ar/experience.yml` for Arabic. This keeps your data organized and makes it easy to add more languages later.
50
61
 
51
62
  Jobs are grouped by company name. Multiple roles at the same company will be displayed together. Roles are sorted by `startdate` (most recent first).
52
63
 
@@ -93,7 +104,9 @@ Jobs are grouped by company name. Multiple roles at the same company will be dis
93
104
 
94
105
  ## Education
95
106
 
96
- **File:** `_data/education.yml`
107
+ **File:** `_data/en/education.yml` (English) or `_data/ar/education.yml` (Arabic)
108
+
109
+ **Recommended:** Use `_data/en/education.yml` for English and `_data/ar/education.yml` for Arabic.
97
110
 
98
111
  ```yaml
99
112
  - degree: "Bachelor of Business" # Required: Degree name and details
@@ -125,7 +138,9 @@ Jobs are grouped by company name. Multiple roles at the same company will be dis
125
138
 
126
139
  ## Certifications
127
140
 
128
- **File:** `_data/certifications.yml`
141
+ **File:** `_data/en/certifications.yml` (English) or `_data/ar/certifications.yml` (Arabic)
142
+
143
+ **Recommended:** Use `_data/en/certifications.yml` for English and `_data/ar/certifications.yml` for Arabic.
129
144
 
130
145
  ```yaml
131
146
  - name: "Business Certificate" # Required: Certification name
@@ -165,7 +180,9 @@ Jobs are grouped by company name. Multiple roles at the same company will be dis
165
180
 
166
181
  ## Courses
167
182
 
168
- **File:** `_data/courses.yml`
183
+ **File:** `_data/en/courses.yml` (English) or `_data/ar/courses.yml` (Arabic)
184
+
185
+ **Recommended:** Use `_data/en/courses.yml` for English and `_data/ar/courses.yml` for Arabic.
169
186
 
170
187
  ```yaml
171
188
  - name: "Certificate of Course Completion" # Required: Course name
@@ -200,7 +217,9 @@ Jobs are grouped by company name. Multiple roles at the same company will be dis
200
217
 
201
218
  ## Volunteering
202
219
 
203
- **File:** `_data/volunteering.yml`
220
+ **File:** `_data/en/volunteering.yml` (English) or `_data/ar/volunteering.yml` (Arabic)
221
+
222
+ **Recommended:** Use `_data/en/volunteering.yml` for English and `_data/ar/volunteering.yml` for Arabic.
204
223
 
205
224
  Structure is identical to Experience section. Volunteer positions are grouped by organization.
206
225
 
@@ -232,7 +251,9 @@ Same as Experience section - grouped by organization, sorted by date.
232
251
 
233
252
  ## Projects
234
253
 
235
- **File:** `_data/projects.yml`
254
+ **File:** `_data/en/projects.yml` (English) or `_data/ar/projects.yml` (Arabic)
255
+
256
+ **Recommended:** Use `_data/en/projects.yml` for English and `_data/ar/projects.yml` for Arabic.
236
257
 
237
258
  ```yaml
238
259
  - project: "Closed Source Project" # Required: Project name
@@ -269,7 +290,9 @@ Same as Experience section - grouped by organization, sorted by date.
269
290
 
270
291
  ## Skills
271
292
 
272
- **File:** `_data/skills.yml`
293
+ **File:** `_data/en/skills.yml` (English) or `_data/ar/skills.yml` (Arabic)
294
+
295
+ **Recommended:** Use `_data/en/skills.yml` for English and `_data/ar/skills.yml` for Arabic.
273
296
 
274
297
  ```yaml
275
298
  - skill: "Organizational leadership" # Required: Skill name/title
@@ -298,7 +321,9 @@ Same as Experience section - grouped by organization, sorted by date.
298
321
 
299
322
  ## Recognition
300
323
 
301
- **File:** `_data/recognitions.yml`
324
+ **File:** `_data/en/recognitions.yml` (English) or `_data/ar/recognitions.yml` (Arabic)
325
+
326
+ **Recommended:** Use `_data/en/recognitions.yml` for English and `_data/ar/recognitions.yml` for Arabic.
302
327
 
303
328
  ```yaml
304
329
  - award: "Outstanding Achievement" # Required: Award name
@@ -331,7 +356,9 @@ Same as Experience section - grouped by organization, sorted by date.
331
356
 
332
357
  ## Associations
333
358
 
334
- **File:** `_data/associations.yml`
359
+ **File:** `_data/en/associations.yml` (English) or `_data/ar/associations.yml` (Arabic)
360
+
361
+ **Recommended:** Use `_data/en/associations.yml` for English and `_data/ar/associations.yml` for Arabic.
335
362
 
336
363
  ```yaml
337
364
  - organization: "Internet Sociaity" # Required: Organization name
@@ -368,7 +395,9 @@ Same as Experience section - grouped by organization, sorted by date.
368
395
 
369
396
  ## Languages
370
397
 
371
- **File:** `_data/languages.yml`
398
+ **File:** `_data/en/languages.yml` (English) or `_data/ar/languages.yml` (Arabic)
399
+
400
+ **Recommended:** Use `_data/en/languages.yml` for English and `_data/ar/languages.yml` for Arabic.
372
401
 
373
402
  ```yaml
374
403
  - language: English # Required: Language name
@@ -408,7 +437,9 @@ Same as Experience section - grouped by organization, sorted by date.
408
437
 
409
438
  ## Links
410
439
 
411
- **File:** `_data/links.yml`
440
+ **File:** `_data/en/links.yml` (English) or `_data/ar/links.yml` (Arabic)
441
+
442
+ **Recommended:** Use `_data/en/links.yml` for English and `_data/ar/links.yml` for Arabic.
412
443
 
413
444
  ```yaml
414
445
  - description: "Resume" # Required: Link description/title
@@ -441,7 +472,9 @@ Same as Experience section - grouped by organization, sorted by date.
441
472
 
442
473
  ## Interests
443
474
 
444
- **File:** `_data/interests.yml`
475
+ **File:** `_data/en/interests.yml` (English) or `_data/ar/interests.yml` (Arabic)
476
+
477
+ **Recommended:** Use `_data/en/interests.yml` for English and `_data/ar/interests.yml` for Arabic.
445
478
 
446
479
  Simple list of interests/hobbies.
447
480
 
@@ -463,6 +496,33 @@ Simple list of interests/hobbies.
463
496
 
464
497
  ---
465
498
 
499
+ ## Header Intro
500
+
501
+ **File:** `_data/en/header.yml` (English) or `_data/ar/header.yml` (Arabic)
502
+
503
+ **Recommended:** Use `_data/en/header.yml` for English and `_data/ar/header.yml` for Arabic.
504
+
505
+ Contains the executive summary/intro paragraph that appears below your name and title in the resume header.
506
+
507
+ ```yaml
508
+ # Header intro paragraph
509
+ # Enable this in _config.yml with: resume_header_intro_en: true (for English)
510
+ # or resume_header_intro_ar: true (for Arabic)
511
+
512
+ intro: "Your professional summary or elevator pitch goes here. This is the English version."
513
+ ```
514
+
515
+ **Display Format:**
516
+ - Appears as a paragraph below your name, title, and social links
517
+ - Only shows if `resume_header_intro_en: true` (English) or `resume_header_intro_ar: true` (Arabic) is set in `_config.yml`
518
+ - Supports basic HTML formatting
519
+
520
+ **Important:**
521
+ - Create separate files for each language: `_data/en/header.yml` for English and `_data/ar/header.yml` for Arabic
522
+ - Sample files are available in `docs/_data/en/header.yml` and `docs/_data/ar/header.yml`
523
+
524
+ ---
525
+
466
526
  ## General Guidelines
467
527
 
468
528
  ### Date Formats
@@ -470,7 +530,8 @@ Simple list of interests/hobbies.
470
530
  **For startdate/enddate fields:**
471
531
  - Always use ISO format: `YYYY-MM-DD` (e.g., `2024-03-15`)
472
532
  - These auto-format to "Mon YYYY" in English (e.g., "Mar 2024")
473
- - Arabic layout uses custom date formatting
533
+ - Arabic layout uses custom date formatting via `ar-date.html` which reads from `site.data.ar.months`
534
+ - **Note:** The theme already includes `_data/ar/months.yml` with Arabic month names, so you don't need to create this file manually.
474
535
 
475
536
  **For display text fields (year, duration):**
476
537
  - Use any text format you want
@@ -506,23 +567,41 @@ url: https://example.com
506
567
 
507
568
  ### File Location
508
569
 
509
- All data files go in the `_data/` directory or a subdirectory based on the `_config.yml`:
570
+ **Recommended approach (for beginners):** Place all data files in language-specific folders (`_data/en/` and `_data/ar/`). This is the recommended approach even if you're only using one language, as it:
571
+ - Keeps your data organized
572
+ - Makes it easy to add more languages in the future
573
+ - Follows the same structure as the sample files
574
+
575
+ **Advanced approach:** You can place files directly in `_data/` (root), but you'll need to set `active_resume_path_en: ""` and `active_resume_path_ar: ""` in your `_config.yml`. This approach is not recommended for beginners.
576
+
577
+ **Recommended structure (use language folders):**
510
578
  ```
511
579
  _data/
512
- ├── experience.yml
513
- ├── education.yml
514
- ├── certifications.yml
515
- ├── courses.yml
516
- ├── volunteering.yml
517
- ├── projects.yml
518
- ├── skills.yml
519
- ├── recognitions.yml
520
- ├── associations.yml
521
- ├── languages.yml
522
- ├── links.yml
523
- └── interests.yml
580
+ ├── en/
581
+ ├── header.yml # Executive summary/intro paragraph
582
+ ├── experience.yml
583
+ ├── education.yml
584
+ ├── certifications.yml
585
+ ├── courses.yml
586
+ ├── volunteering.yml
587
+ ├── projects.yml
588
+ ├── skills.yml
589
+ ├── recognitions.yml
590
+ ├── associations.yml
591
+ │ ├── languages.yml
592
+ │ ├── links.yml
593
+ │ └── interests.yml
594
+ └── ar/
595
+ ├── header.yml # Executive summary/intro paragraph (Arabic)
596
+ ├── experience.yml
597
+ ├── education.yml
598
+ └── ... (same files as en/)
524
599
  ```
525
600
 
601
+ **Note:** The theme includes `_data/ar/months.yml` in the theme itself (not in your site), so Arabic month names are available automatically. You don't need to create this file in your site's `_data/` folder.
602
+
603
+ **Sample files:** You can copy sample data files from `docs/_data/en/` and `docs/_data/ar/` to get started. These contain commented examples showing the structure for each section type.
604
+
526
605
  ### Enabling Sections in _config.yml
527
606
 
528
607
  To control which sections appear on your resume, edit `_config.yml`:
@@ -52,6 +52,8 @@ In this theme, includes are used for:
52
52
  - Social icons
53
53
  - Fine-grained rendering of resume sections in English and Arabic
54
54
 
55
+ **For beginners:** Includes are like small reusable code snippets. Instead of copying the same HTML code in multiple places, you put it in an include file and reference it. The theme uses includes to organize code into logical pieces (like the header, social links, analytics, etc.).
56
+
55
57
  ---
56
58
 
57
59
  ## How includes fit into this theme
@@ -79,14 +81,17 @@ Typical include usage inside layouts:
79
81
 
80
82
  ### Data flow and configuration
81
83
 
82
- The resume layouts compute a `resume_data` object that points to the active data subtree in `_data/`, based on `active_resume_path` configured in your sites `_config.yml`. This lets you organize multiple datasets (e.g., different roles/versions) and switch without editing templates.
84
+ The resume layouts compute a `resume_data` object that points to the active data subtree in `_data/`, based on `active_resume_path_en` (for English) and `active_resume_path_ar` (for Arabic) configured in your site's `_config.yml`. This lets you organize multiple datasets (e.g., different roles/versions) and switch without editing templates.
83
85
 
84
86
  Examples:
85
87
  - No path (empty or nil): `resume_data == site.data`
86
- - `active_resume_path: en`: `resume_data == site.data.en`
87
- - Nested path with dots: `active_resume_path: 2025-06.20250621-PM` `resume_data == site.data['2025-06']['20250621-PM']`
88
+ - `active_resume_path_en: "en"`: `resume_data == site.data.en` (English layout)
89
+ - `active_resume_path_ar: "ar"`: `resume_data == site.data.ar` (Arabic layout)
90
+ - Nested path with dots: `active_resume_path_en: "2025-06.20250621-PM"` → `resume_data == site.data['2025-06']['20250621-PM']`
91
+
92
+ Most resume includes read from `resume_data.<section>` (e.g., `experience`, `skills`, `languages`). Feature flags and ordering live in `_config.yml` (see "Dynamic section rendering" below).
88
93
 
89
- Most resume includes read from `resume_data.<section>` (e.g., `experience`, `skills`, `languages`). Feature flags and ordering live in `_config.yml` (see “Dynamic section rendering” below).
94
+ **For beginners:** The `resume_data` object is like a pointer to your data files. **Recommended:** Set `active_resume_path_en: "en"` and `active_resume_path_ar: "ar"` to use language-specific folders. This way, the theme will look for your data in `_data/en/experience.yml`, `_data/en/education.yml`, etc. for English, and `_data/ar/experience.yml`, etc. for Arabic. This keeps your English and Arabic data separate and organized, and is the recommended approach even if you're only using one language.
90
95
 
91
96
  ---
92
97
 
@@ -196,7 +201,9 @@ Usage in templates:
196
201
  - `style`: `MDY` → “Month Day, Year”; anything else → “Month Year”
197
202
  - Looks up the Arabic month name via `site.data.ar.months[m]`.
198
203
 
199
- Data requirement in your `_data/` (one of these structures):
204
+ Data requirement: The theme includes `_data/ar/months.yml` by default, so you don't need to create this file manually. The months are already defined in the theme.
205
+
206
+ If you're using a custom data path structure, you can define months in one of these ways:
200
207
  ```yaml
201
208
  # Option A: _data/ar.yml
202
209
  months:
@@ -215,12 +222,14 @@ months:
215
222
  ```
216
223
  or
217
224
  ```yaml
218
- # Option B: _data/ar/months.yml
225
+ # Option B: _data/ar/months.yml (already included in theme)
219
226
  "1": يناير
220
227
  "2": فبراير
221
228
  # ...
222
229
  ```
223
230
 
231
+ **Note:** Since the theme already includes `_data/ar/months.yml`, you typically don't need to add this file unless you're using a completely custom data structure.
232
+
224
233
  ---
225
234
 
226
235
  ### 9) social-links.html
@@ -319,7 +328,7 @@ The layout loops this array and includes the matching block.
319
328
 
320
329
  Example: Add “publications”.
321
330
 
322
- 1) Data: create `_data/publications.yml` (or inside your active subtree) like:
331
+ 1) Data: create `_data/en/publications.yml` (or `_data/ar/publications.yml` for Arabic, or inside your active subtree) like:
323
332
  ```yaml
324
333
  - active: true
325
334
  title: Building Scalable Systems
@@ -474,7 +483,7 @@ To add a network not yet supported (e.g., Mastodon):
474
483
  - Respect configuration-driven behavior:
475
484
  - Feature flags under `resume_section.*`
476
485
  - Section order via `resume_section_order`
477
- - Data path via `active_resume_path`
486
+ - Data path via `active_resume_path_en` and `active_resume_path_ar`
478
487
  - Localize: if you add a section in EN, consider adding the AR counterpart with translated labels and RTL visual checks.
479
488
  - SVG hygiene: strip unnecessary attributes/metadata; keep icons lightweight.
480
489
  - Printing: if something is important for PDF/print, add a print-only variant similar to `print-social-links.html`.
@@ -13,7 +13,7 @@ A comprehensive, contributor-friendly overview of `_layouts/` in this theme: wha
13
13
  - [resume-en.html](#3-_layoutsresume-enhtml)
14
14
  - [resume-ar.html](#4-_layoutsresume-arhtml)
15
15
  - [Resume data loading (the `resume_data` object)](#resume-data-loading-the-resume_data-object)
16
- - [Configuring `active_resume_path`](#configuring-active_resume_path)
16
+ - [Configuring `active_resume_path_en` and `active_resume_path_ar`](#configuring-active_resume_path_en-and-active_resume_path_ar)
17
17
  - [Dot-path traversal and bracket-notation](#dot-path-traversal-and-bracket-notation)
18
18
  - [Examples](#examples)
19
19
  - [Rendering flow inside resume layouts](#rendering-flow-inside-resume-layouts)
@@ -33,6 +33,8 @@ A comprehensive, contributor-friendly overview of `_layouts/` in this theme: wha
33
33
 
34
34
  Layouts wrap pages. A page chooses a layout via its front matter (e.g., `layout: resume-en`). The layout defines the overall HTML structure and where page content or reusable includes appear. This theme ships with specialized layouts for the resume (EN/AR) and a general-purpose base layout.
35
35
 
36
+ **For beginners:** If you're new to Jekyll, think of layouts as templates that define the structure of your pages. You create a page file (like `resume-en.md`) and tell it which layout to use. The layout then handles all the HTML structure, styling, and includes the content from your data files.
37
+
36
38
  ---
37
39
 
38
40
  ## Layout inventory and responsibilities
@@ -88,21 +90,26 @@ Purpose: Arabic (RTL) resume layout. It mirrors `resume-en.html` with language-a
88
90
 
89
91
  Both resume layouts compute a single variable, `resume_data`, which points to the active subtree under `_data/`. This allows switching datasets without touching templates.
90
92
 
91
- ### Configuring `active_resume_path`
93
+ ### Configuring `active_resume_path_en` and `active_resume_path_ar`
92
94
 
93
- Set a site-level key in `_config.yml`:
95
+ Set site-level keys in `_config.yml`:
94
96
 
95
97
  ```yaml
96
- # Choose which subtree of _data/ to use for the resume
98
+ # Choose which subtree of _data/ to use for each language
97
99
  # Examples below in the next section
98
- active_resume_path: ""
100
+ active_resume_path_en: "en" # Path for English resume
101
+ active_resume_path_ar: "ar" # Path for Arabic resume
99
102
  ```
100
103
 
101
- - If `active_resume_path` is empty or nil → `resume_data = site.data`
102
- - If `active_resume_path` is a single key (e.g., `en`) → `resume_data = site.data.en`
103
- - If `active_resume_path` is a dotted path (e.g., `2025-06.20250621-PM`) the layout walks down each segment safely
104
+ - If set to a single key (e.g., `"en"`) → `resume_data = site.data.en` (**recommended for beginners**)
105
+ - If set to a dotted path (e.g., `"2025-06.20250621-PM"`) → the layout walks down each segment safely (advanced)
106
+ - If `active_resume_path_en` or `active_resume_path_ar` is empty or nil `resume_data = site.data` (uses root `_data/`, **advanced users only**)
107
+
108
+ **Important:** The English layout (`resume-en.html`) reads `site.active_resume_path_en`, and the Arabic layout (`resume-ar.html`) reads `site.active_resume_path_ar`. This allows you to use different data folders for each language.
104
109
 
105
- Note: The layouts read `site.active_resume_path`. If you maintain multiple variants (time-boxed, roles, locales) under `_data/`, this switch lets you pick the current one at build time.
110
+ **Recommended approach (for beginners):** Always use `"en"` and `"ar"` to place files in `_data/en/` and `_data/ar/` folders. This is the recommended approach even if you're only using one language, as it keeps your data organized and makes it easy to add more languages later.
111
+
112
+ **Advanced users:** If you maintain multiple variants (time-boxed, roles, locales) under `_data/`, you can use nested paths or root paths, but this is not recommended for beginners.
106
113
 
107
114
  ### Dot-path traversal and bracket-notation
108
115
 
@@ -115,17 +122,23 @@ Implementation highlights inside the layouts:
115
122
  ### Examples
116
123
 
117
124
  ```yaml
118
- # 1) Use files directly under _data/
119
- active_resume_path: ""
120
- # resume_data.experience == site.data.experience
121
-
122
- # 2) Use a language subtree
123
- active_resume_path: en
124
- # resume_data.experience == site.data.en.experience
125
-
126
- # 3) Use nested subtrees for versioning
127
- active_resume_path: 2025-06.20250621-PM
125
+ # 1) Recommended: Use language subtrees (recommended for beginners)
126
+ active_resume_path_en: "en"
127
+ active_resume_path_ar: "ar"
128
+ # EN: resume_data.experience == site.data.en.experience
129
+ # AR: resume_data.experience == site.data.ar.experience
130
+ # This is the recommended approach even if you're only using one language
131
+
132
+ # 2) Advanced: Use nested subtrees for versioning
133
+ active_resume_path_en: "2025-06.20250621-PM"
134
+ active_resume_path_ar: "2025-06.20250621-PM"
128
135
  # resume_data.experience == site.data['2025-06']['20250621-PM'].experience
136
+
137
+ # 3) Advanced: Use files directly under _data/ (not recommended for beginners)
138
+ active_resume_path_en: ""
139
+ active_resume_path_ar: ""
140
+ # resume_data.experience == site.data.experience
141
+ # Only use this if you place files directly in _data/ root (advanced users only)
129
142
  ```
130
143
 
131
144
  ---
@@ -146,7 +159,7 @@ active_resume_path: 2025-06.20250621-PM
146
159
  - Small inline icons are included from `vendors/lineicons-v4.0/`
147
160
  - Title bar with `site.resume_title` (or `resume_title_ar` for AR)
148
161
  - Social icon list when `site.social_links` is configured (see `_includes/social-links.html`)
149
- - Executive summary from `site.resume_header_intro`
162
+ - Executive summary (controlled by `resume_header_intro_en`/`resume_header_intro_ar` flags, reads from `resume_data.header.intro`)
150
163
  - CTA button controlled by `site.resume_looking_for_work`
151
164
 
152
165
  ### 3) Dynamic section rendering
@@ -180,7 +193,8 @@ name:
180
193
  last: "Last"
181
194
  resume_title: "Job Title"
182
195
  resume_title_ar: "المسمّى الوظيفي"
183
- resume_header_intro: "Short executive summary paragraph."
196
+ resume_header_intro_en: true # Enable English intro (reads from resume_data.header.intro)
197
+ resume_header_intro_ar: true # Enable Arabic intro (reads from resume_data.header.intro)
184
198
  resume_avatar: true
185
199
 
186
200
  # Header contact toggles
@@ -236,8 +250,9 @@ resume_section_order:
236
250
  # Print behavior
237
251
  resume_print_social_links: true
238
252
 
239
- # Active data subtree for resume_data
240
- active_resume_path: ""
253
+ # Active data subtree for resume_data (separate for each language)
254
+ active_resume_path_en: "en"
255
+ active_resume_path_ar: "ar"
241
256
  ```
242
257
 
243
258
  Per-page front matter (for multilingual SEO):
@@ -304,8 +319,8 @@ Tip: Keep date formatting and “present” text consistent with the target lang
304
319
  ## Common pitfalls and troubleshooting
305
320
 
306
321
  - Sections not rendering? Check `resume_section_order`, `resume_section.<name>` flags, and `active: true` on data items.
307
- - Wrong data showing? Confirm `active_resume_path` and your `_data/` structure.
308
- - Arabic months not displayed? Ensure `site.data.ar.months` is defined (see includes guide: `ar-date.html`).
322
+ - Wrong data showing? Confirm `active_resume_path_en`/`active_resume_path_ar` and your `_data/` structure.
323
+ - Arabic months not displayed? The theme includes `_data/ar/months.yml` by default. If you're using a custom data path, ensure `site.data.ar.months` is accessible (see includes guide: `ar-date.html`).
309
324
  - Icons missing? Verify the SVG exists under `/_includes/vendors/lineicons-*/` and the include path is correct.
310
325
  - SEO alternates missing? Ensure both pages share the same `t_id`, and each has a `lang` value.
311
326
 
@@ -0,0 +1,69 @@
1
+ ## Project overview
2
+
3
+ **bilingual-jekyll-resume-theme** is a Jekyll theme for creating bilingual (English & Arabic) resumes. Created by Khaldoon Mutahar.
4
+
5
+ ## Features
6
+
7
+ 1. Bilingual support
8
+ - Separate layouts for English (`_layouts/resume-en.html`) and Arabic (`_layouts/resume-ar.html`)
9
+ - RTL support for Arabic (SCSS in `_sass/_resume-rtl.scss`)
10
+ - Arabic date formatting via `_includes/ar-date.html` (uses `_data/ar/months.yml`)
11
+ - Separate name fields objects: `site.name.{first,middle,last}` and `site.name_ar.{first,middle,last}`
12
+ - Optional language chips in header via `resume_section.lang_header`
13
+
14
+ 2. Data-driven architecture
15
+ - Resume content in YAML files in `_data/`
16
+ - Supports nested data folders (e.g., `_data/en/`, `_data/ar/`, or versioned/custom paths)
17
+ - Dynamic data loader (in both layouts) resolves dot-separated paths using bracket notation, e.g., `"2025-06.20250621-PM"`
18
+ - Configurable data paths via `_config.yml` keys `active_resume_path_en` and `active_resume_path_ar`
19
+
20
+ 3. Resume sections (13 types)
21
+ - Experience, Education, Certifications, Courses, Volunteering, Projects, Skills, Recognition, Associations, Languages, Links, Interests, Header (Executive Summary)
22
+ - Ordering via `resume_section_order` and toggles via `resume_section.*` in `_config.yml`
23
+ - Active/inactive flags per entry across all sections
24
+
25
+ 4. Design and UX
26
+ - Print-friendly styling (print-only/no-print classes); optional print-only social links block
27
+ - Social links integration via `_includes/social-links.html` (GitHub, LinkedIn, X, YouTube, etc.)
28
+ - SVG icon set via Lineicons (bundled in `_includes/vendors/lineicons-*`)
29
+ - Profile avatar support
30
+ - Header contact info toggle (`display_header_contact_info`)
31
+ - Live vs print contact info (`enable_live`) for phone/email variants
32
+ - "Looking for work" contact button
33
+ - Languages can appear in header or separate section
34
+
35
+ 5. Technical features
36
+ - Jekyll 4.4+ compatibility
37
+ - SEO via `jekyll-seo-tag`; alternate language links via `_includes/hreflang.html`
38
+ - Analytics hooks in head/body includes (Google Tag Manager/GA4 supported)
39
+ - Sitemap and feed generation (`jekyll-sitemap`, `jekyll-feed`), redirects via `jekyll-redirect-from`
40
+ - Schema.org markup for `Person` and various sections
41
+
42
+ ## Project structure
43
+
44
+ - `_layouts/`: HTML templates (`default.html`, `resume-en.html`, `resume-ar.html`, `profile.html`)
45
+ - `_includes/`: Reusable components (sections, headers, social links, analytics, `hreflang.html`, SVG vendors)
46
+ - `_sass/`: SCSS stylesheets (base, layout, resume, RTL, print)
47
+ - `_data/`: Theme data files (Arabic month names in `ar/months.yml`)
48
+ - `assets/`: CSS, images, favicons
49
+ - `docs/`: Documentation (config, data, includes, layouts, SASS guides) and sample `_data/` content
50
+
51
+ ## Notable implementation details
52
+
53
+ 1. Dynamic data loading: In both `resume-en.html` and `resume-ar.html`, Liquid bracket notation iterates over a dot-separated path to resolve nested data objects (handles numeric or hyphenated keys like `"2025-06"`).
54
+ 2. Conditional rendering: Sections render from `resume_section_order` and respect per-section toggles and data availability; optional header intro blocks (`resume_header_intro_en`/`_ar`).
55
+ 3. Date formatting: Arabic dates via `_includes/ar-date.html` with month name lookup from `_data/ar/months.yml`.
56
+ 4. Print behavior: Print-only URL echoes for links and optional print-only social links block.
57
+
58
+ ## Documentation
59
+
60
+ Includes guides for:
61
+ - Configuration (`docs/CONFIG_GUIDE.md`)
62
+ - Data structure (`docs/DATA_GUIDE.md`)
63
+ - Includes (`docs/INCLUDES_GUIDE.md`)
64
+ - Layouts (`docs/LAYOUTS_GUIDE.md`)
65
+ - SASS (`docs/SASS_GUIDE.md`)
66
+
67
+ Sample data is provided under `docs/_data/en/` and `docs/_data/ar/` and a sample `_config` at `docs/_data/_config.sample.yml`.
68
+
69
+ The theme is production-ready and well-documented for creating bilingual resumes with Jekyll.
data/docs/SASS_GUIDE.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # SCSS/SASS Guide (_sass)
2
2
 
3
- A contributor- and user-friendly tour of the themes styling system: how styles are organized, how entrypoints compile, what each partial does, and safe ways to customize or extend.
3
+ A contributor- and user-friendly tour of the theme's styling system: how styles are organized, how entrypoints compile, what each partial does, and safe ways to customize or extend.
4
+
5
+ **For beginners:** This guide explains how the theme's CSS/SCSS works. If you're new to CSS or just want to change colors/fonts, start with the [Customization recipes](#customization-recipes) section. You can override styles without modifying the theme files directly.
4
6
 
5
7
  ---
6
8
 
@@ -72,7 +72,8 @@ active_resume_path_ar: "ar" # ath to Arabic data (empty = root _data/)
72
72
  # Header and intro
73
73
  resume_avatar: true # Show profile picture
74
74
  display_header_contact_info: true # Show contact info in header
75
- resume_header_intro: "<p>Your professional summary or elevator pitch goes here.</p>"
75
+ resume_header_intro_en: true # Show English intro paragraph below name/title in header
76
+ resume_header_intro_ar: false # Show Arabic intro paragraph below name/title in header
76
77
 
77
78
  # Job search status
78
79
  # use "true" to display the email contact button,
@@ -0,0 +1,27 @@
1
+ # العضويات
2
+ # الملف: _data/ar/associations.yml
3
+ # المنظمات أو المجموعات المهنية أو العضويات
4
+
5
+ # كل إدخال يمثل عضوية أو جمعية
6
+ - organization: "" # مطلوب: اسم المنظمة
7
+ active: true # مطلوب: اضبط على false لإخفاء هذا الإدخال
8
+ role: "" # مطلوب: دورك/منصبك في المنظمة
9
+ year: "" # مطلوب: الفترة الزمنية (كنص عرض، مثلاً "2020 &mdash; الحاضر" أو "يوليو 2022 &mdash; الحاضر")
10
+ url: "" # اختياري: رابط المنظمة (اتركه فارغاً إذا لم يكن هناك رابط)
11
+ summary: "" # اختياري: وصف لانخراطك
12
+
13
+ # مثال مع رابط
14
+ - organization: ""
15
+ active: true
16
+ role: ""
17
+ year: ""
18
+ url: "https://example.com"
19
+ summary: ""
20
+
21
+ # مثال بدون رابط
22
+ - organization: ""
23
+ active: true
24
+ role: ""
25
+ year: ""
26
+ url: ""
27
+ summary: ""
@@ -0,0 +1,73 @@
1
+ # الشهادات والتراخيص
2
+ # الملف: _data/ar/certifications.yml
3
+ # الشهادات والتراخيص المهنية
4
+
5
+ # كل إدخال يمثل شهادة أو ترخيص
6
+ - name: "" # مطلوب: اسم الشهادة
7
+ active: true # مطلوب: اضبط على true للعرض في السيرة الذاتية، false للإخفاء
8
+ issuing_organization: "" # مطلوب: المنظمة التي أصدرت الشهادة
9
+ credential_id: "" # اختياري: رقم اعتماد/شهادة (اتركه فارغاً إذا لم يكن هناك)
10
+ credential_url: "" # اختياري: رابط للتحقق من الاعتماد (اتركه فارغاً إذا لم يكن هناك)
11
+ issue_date: # مطلوب: تاريخ الإصدار (تنسيق YYYY-MM-DD، مثلاً 2024-03-15)
12
+ expiration: # اختياري: تاريخ الانتهاء (تنسيق YYYY-MM-DD، اتركه فارغاً إذا لم يكن هناك تاريخ انتهاء)
13
+ courses: # اختياري: للاستخدام الداخلي فقط - لا يتم عرضه في السيرة الذاتية
14
+ # هذه الدورات المتداخلة هي للاحتفاظ بالسجلات الشخصية فقط
15
+ # تربط الدورات بشهادتها الأصلية ولكن لا يتم عرضها أبداً
16
+ - name: "" # اسم الدورة (للسجلات الشخصية فقط)
17
+ active: false # حالة النشاط (للسجلات الشخصية فقط)
18
+ issuing_organization: "" # المنظمة (للسجلات الشخصية فقط)
19
+ credential_id: "" # رقم الاعتماد (للسجلات الشخصية فقط)
20
+ credential_url: "" # رابط الاعتماد (للسجلات الشخصية فقط)
21
+ issue_date: # تاريخ الإصدار (تنسيق YYYY-MM-DD، للسجلات الشخصية فقط)
22
+ expiration: # تاريخ الانتهاء (تنسيق YYYY-MM-DD، اتركه فارغاً إذا لم يكن هناك، للسجلات الشخصية فقط)
23
+
24
+ # مثال مع رقم اعتماد ورابط
25
+ - name: ""
26
+ active: true
27
+ issuing_organization: ""
28
+ credential_id: ""
29
+ credential_url: "https://example.com/cert/123"
30
+ issue_date:
31
+ expiration:
32
+ courses:
33
+ - name: ""
34
+ active: false
35
+ issuing_organization: ""
36
+ credential_id: ""
37
+ credential_url: ""
38
+ issue_date:
39
+ expiration:
40
+
41
+ # مثال مع رقم اعتماد بدون رابط
42
+ - name: ""
43
+ active: true
44
+ issuing_organization: ""
45
+ credential_id: ""
46
+ credential_url: ""
47
+ issue_date:
48
+ expiration:
49
+ courses:
50
+ - name: ""
51
+ active: false
52
+ issuing_organization: ""
53
+ credential_id: ""
54
+ credential_url: ""
55
+ issue_date:
56
+ expiration:
57
+
58
+ # مثال بدون تاريخ انتهاء
59
+ - name: ""
60
+ active: true
61
+ issuing_organization: ""
62
+ credential_id: ""
63
+ credential_url: ""
64
+ issue_date:
65
+ expiration:
66
+ courses:
67
+ - name: ""
68
+ active: false
69
+ issuing_organization: ""
70
+ credential_id: ""
71
+ credential_url: ""
72
+ issue_date:
73
+ expiration: