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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -0
- data/README.md +131 -20
- data/_data/ar/months.yml +12 -0
- data/_includes/ar-date.html +32 -0
- data/_includes/resume-section-ar.html +10 -4
- data/_includes/resume-section-en.html +9 -4
- data/_layouts/default.html +2 -0
- data/_layouts/resume-ar.html +4 -2
- data/_layouts/resume-en.html +3 -1
- data/docs/CONFIG_GUIDE.md +28 -13
- data/docs/DATA_GUIDE.md +106 -27
- data/docs/INCLUDES_GUIDE.md +17 -8
- data/docs/LAYOUTS_GUIDE.md +40 -25
- data/docs/PROJECT_OVERVIEW.md +69 -0
- data/docs/SASS_GUIDE.md +3 -1
- data/docs/{_config.sample.yml → _data/_config.sample.yml} +2 -1
- data/docs/_data/ar/associations.yml +27 -0
- data/docs/_data/ar/certifications.yml +73 -0
- data/docs/_data/ar/courses.yml +39 -0
- data/docs/_data/ar/education.yml +49 -0
- data/docs/_data/ar/experience.yml +50 -0
- data/docs/_data/ar/header.yml +6 -0
- data/docs/_data/ar/interests.yml +13 -0
- data/docs/_data/ar/languages.yml +29 -0
- data/docs/_data/ar/links.yml +17 -0
- data/docs/_data/ar/projects.yml +28 -0
- data/docs/_data/ar/recognitions.yml +23 -0
- data/docs/_data/ar/skills.yml +17 -0
- data/docs/_data/ar/volunteering.yml +39 -0
- data/docs/_data/en/associations.yml +27 -0
- data/docs/_data/en/certifications.yml +73 -0
- data/docs/_data/en/courses.yml +39 -0
- data/docs/_data/en/education.yml +49 -0
- data/docs/_data/en/experience.yml +50 -0
- data/docs/_data/en/header.yml +6 -0
- data/docs/_data/en/interests.yml +13 -0
- data/docs/_data/en/languages.yml +29 -0
- data/docs/_data/en/links.yml +17 -0
- data/docs/_data/en/projects.yml +28 -0
- data/docs/_data/en/recognitions.yml +23 -0
- data/docs/_data/en/skills.yml +17 -0
- data/docs/_data/en/volunteering.yml +39 -0
- metadata +71 -25
- /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. [
|
|
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
|
-
|
|
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
|
-
├──
|
|
513
|
-
├──
|
|
514
|
-
├──
|
|
515
|
-
├──
|
|
516
|
-
├──
|
|
517
|
-
├──
|
|
518
|
-
├──
|
|
519
|
-
├──
|
|
520
|
-
├──
|
|
521
|
-
├──
|
|
522
|
-
├──
|
|
523
|
-
|
|
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`:
|
data/docs/INCLUDES_GUIDE.md
CHANGED
|
@@ -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 `
|
|
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
|
-
- `
|
|
87
|
-
-
|
|
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
|
-
|
|
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
|
|
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 `
|
|
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`.
|
data/docs/LAYOUTS_GUIDE.md
CHANGED
|
@@ -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 `
|
|
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 `
|
|
93
|
+
### Configuring `active_resume_path_en` and `active_resume_path_ar`
|
|
92
94
|
|
|
93
|
-
Set
|
|
95
|
+
Set site-level keys in `_config.yml`:
|
|
94
96
|
|
|
95
97
|
```yaml
|
|
96
|
-
# Choose which subtree of _data/ to use for
|
|
98
|
+
# Choose which subtree of _data/ to use for each language
|
|
97
99
|
# Examples below in the next section
|
|
98
|
-
|
|
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
|
|
102
|
-
- If
|
|
103
|
-
- If `
|
|
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
|
-
|
|
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
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
#
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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 `
|
|
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
|
-
|
|
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
|
-
|
|
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 `
|
|
308
|
-
- Arabic months not displayed?
|
|
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 theme
|
|
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
|
-
|
|
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 — الحاضر" أو "يوليو 2022 — الحاضر")
|
|
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:
|