jekyll-theme-zer0 1.19.1 → 1.20.2

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +395 -0
  3. data/README.md +27 -19
  4. data/_data/authors.yml +154 -5
  5. data/_data/backlog.yml +5 -5
  6. data/_data/content_statistics.yml +273 -297
  7. data/_data/features.yml +4 -25
  8. data/_data/navigation/README.md +24 -0
  9. data/_data/navigation/about.yml +2 -0
  10. data/_data/navigation/main.yml +2 -7
  11. data/_data/roadmap.yml +86 -12
  12. data/_includes/components/author-avatar-url.html +28 -0
  13. data/_includes/components/author-bio.html +86 -0
  14. data/_includes/components/author-card.html +184 -121
  15. data/_includes/components/author-eeat.html +10 -4
  16. data/_includes/components/info-section.html +1 -1
  17. data/_includes/components/mermaid.html +0 -3
  18. data/_includes/components/post-card.html +19 -9
  19. data/_includes/content/giscus.html +3 -2
  20. data/_includes/core/footer-fabs.html +28 -0
  21. data/_includes/core/footer.html +7 -17
  22. data/_includes/core/head.html +2 -2
  23. data/_includes/navigation/breadcrumbs.html +20 -2
  24. data/_includes/navigation/local-graph.html +18 -2
  25. data/_includes/obsidian/full-graph.html +4 -6
  26. data/_layouts/article.html +44 -74
  27. data/_layouts/author.html +274 -0
  28. data/_layouts/authors.html +55 -0
  29. data/_layouts/news.html +3 -3
  30. data/_layouts/note.html +21 -6
  31. data/_layouts/notebook.html +21 -6
  32. data/_layouts/root.html +31 -17
  33. data/_layouts/section.html +3 -3
  34. data/_plugins/author_pages_generator.rb +121 -0
  35. data/_sass/components/_author.scss +219 -0
  36. data/_sass/components/_content-tables.scss +16 -1
  37. data/_sass/components/_notes-index.scss +102 -0
  38. data/_sass/components/_search-modal.scss +40 -0
  39. data/_sass/components/_ui-enhancements.scss +570 -0
  40. data/_sass/core/_docs-code-examples.scss +463 -0
  41. data/_sass/core/_docs-layout.scss +0 -453
  42. data/_sass/core/_navbar.scss +253 -0
  43. data/_sass/core/_sidebar-extras.scss +79 -0
  44. data/_sass/core/_toc.scss +87 -0
  45. data/_sass/core/_variables.scss +7 -142
  46. data/_sass/custom.scss +24 -1122
  47. data/_sass/layouts/_global-chrome.scss +59 -0
  48. data/assets/css/main.scss +19 -2
  49. data/assets/js/author-profile.js +190 -0
  50. data/assets/js/modules/navigation/navbar.js +104 -0
  51. data/assets/js/obsidian-graph.js +2 -2
  52. data/assets/js/obsidian-local-graph.js +11 -5
  53. data/assets/vendor/cytoscape/cytoscape.min.js +32 -0
  54. data/scripts/README.md +39 -0
  55. data/scripts/bin/validate +11 -1
  56. data/scripts/dev/css-diff.sh +49 -0
  57. data/scripts/dev/shot.js +37 -0
  58. data/scripts/features/generate-preview-images +110 -6
  59. data/scripts/features/pixelate-preview-images +126 -0
  60. data/scripts/features/pixelate_images.py +662 -0
  61. data/scripts/github-setup.sh +0 -0
  62. data/scripts/lib/preview_generator.py +47 -3
  63. data/scripts/pixelate-preview-images.sh +12 -0
  64. data/scripts/test/integration/auto-version +10 -8
  65. data/scripts/test/lib/run_tests.sh +2 -0
  66. data/scripts/test/lib/test_content_review.sh +205 -0
  67. data/scripts/test/lib/test_pixelate_images.sh +108 -0
  68. metadata +25 -20
  69. data/_data/hub.yml +0 -68
  70. data/_data/hub_index.yml +0 -203
  71. data/_data/navigation/hub.yml +0 -110
  72. data/assets/vendor/font-awesome/css/all.min.css +0 -9
  73. data/assets/vendor/font-awesome/webfonts/fa-brands-400.ttf +0 -0
  74. data/assets/vendor/font-awesome/webfonts/fa-brands-400.woff2 +0 -0
  75. data/assets/vendor/font-awesome/webfonts/fa-regular-400.ttf +0 -0
  76. data/assets/vendor/font-awesome/webfonts/fa-regular-400.woff2 +0 -0
  77. data/assets/vendor/font-awesome/webfonts/fa-solid-900.ttf +0 -0
  78. data/assets/vendor/font-awesome/webfonts/fa-solid-900.woff2 +0 -0
  79. data/assets/vendor/font-awesome/webfonts/fa-v4compatibility.ttf +0 -0
  80. data/assets/vendor/font-awesome/webfonts/fa-v4compatibility.woff2 +0 -0
  81. data/assets/vendor/jquery/jquery-3.7.1.min.js +0 -2
  82. data/scripts/lib/hub.rb +0 -208
  83. data/scripts/provision-org-sites.rb +0 -252
  84. data/scripts/provision-org-sites.sh +0 -23
  85. data/scripts/sync-hub-metadata.rb +0 -184
  86. data/scripts/sync-hub-metadata.sh +0 -22
data/_data/authors.yml CHANGED
@@ -5,20 +5,57 @@
5
5
  # Usage in front matter:
6
6
  # author: johndoe (references the key below)
7
7
  #
8
+ # A profile page is generated at /authors/<key>/ for every entry below by
9
+ # _plugins/author_pages_generator.rb, and all entries are listed at /authors/.
10
+ # Reference an author by key in front matter (author: bamr87) to get an avatar,
11
+ # a profile link, and the "About the Author" box across all collections.
12
+ #
8
13
  # Fields:
9
14
  # name: Display name (required)
15
+ # display_name: Optional longer name (used by author-eeat banner)
10
16
  # bio: Short biography (optional)
11
- # avatar: Path to avatar image (optional)
17
+ # avatar: Avatar image (optional). Either a path under public_folder
18
+ # (e.g. /images/authors/me.png) OR a full URL — including a GitHub
19
+ # avatar, e.g. https://avatars.githubusercontent.com/u/<id>?v=4.
20
+ # If omitted but `github` is set, it falls back to that account's
21
+ # avatar at https://github.com/<github>.png automatically.
12
22
  # email: Contact email (optional)
13
- # twitter: Twitter handle without @ (optional)
23
+ # twitter: Twitter/X handle without @ (optional)
14
24
  # github: GitHub username (optional)
15
25
  # linkedin: LinkedIn profile ID (optional)
16
26
  # website: Personal website URL (optional)
17
27
  # role: Job title or role (optional)
28
+ # tagline: Short one-line blurb shown under the name on the profile hero (optional)
29
+ # location: City / region shown on the profile hero (optional)
30
+ # expertise: List of topics (shown as chips on the full card) (optional)
31
+ # profile: Set to false to skip generating a profile page / hide from index (optional)
32
+ #
33
+ # AI author personas (see pages/_docs/customization/author-profiles.md):
34
+ # ai: true Marks this author as an AI agent persona — renders an
35
+ # "AI" badge on bylines/cards and an authorship disclosure.
36
+ # topics: [..] Custom subject areas this persona covers (shown as chips).
37
+ # persona: The reusable persona TEMPLATE an AI agent follows when it
38
+ # writes an article (paired with
39
+ # .github/prompts/ai-author.prompt.md):
40
+ # archetype: .. One-line character summary.
41
+ # voice: .. How the persona writes — tone and rhetorical devices.
42
+ # signature_moves: [] Recurring habits the persona always reaches for.
43
+ # avoids: [..] Things the persona never does.
44
+ # disclosure: .. Visible AI-authorship disclosure shown on the profile.
45
+ # preview: Per-author art-style overrides for the AI preview-image
46
+ # generator. When a post sets `author: <this key>`, these
47
+ # values WIN over _config.yml › preview_images for that
48
+ # post's banner, giving each AI author a distinct look.
49
+ # (scripts/features/generate-preview-images and
50
+ # scripts/lib/preview_generator.py read this block.)
51
+ # style: .. Art-style prompt fragment (overrides preview_images.style).
52
+ # style_modifiers: .. Extra modifiers (overrides preview_images.style_modifiers).
53
+ # size/quality/model: Optional generator overrides (bash generator only).
18
54
 
19
55
  default:
20
56
  name: "Zer0-Mistakes Team"
21
57
  bio: "The collective voice of the Zer0-Mistakes Jekyll theme development team."
58
+ tagline: "Guides, docs, and field notes from the people building zer0-mistakes."
22
59
  avatar: "/images/gravatar-small.png"
23
60
  github: "bamr87"
24
61
  website: "https://bamr87.github.io/zer0-mistakes/"
@@ -28,7 +65,9 @@ bamr87:
28
65
  name: "Amr Abdel-Motaleb"
29
66
  display_name: "Amr Abdel (bamr87)"
30
67
  bio: "Creator of zer0-mistakes and the AIEO methodology. Developer, automation enthusiast, and Docker advocate building tools for the Jekyll community."
31
- avatar: "/images/authors/bamr87.png"
68
+ tagline: "Ship Jekyll sites without the mistakes — Docker-first, zero-config, AI-optimized."
69
+ location: "Denver, CO"
70
+ avatar: "https://avatars.githubusercontent.com/u/10567847?v=4"
32
71
  github: "bamr87"
33
72
  twitter: "bamr87"
34
73
  linkedin: "bamr87"
@@ -43,10 +82,114 @@ bamr87:
43
82
 
44
83
  guest:
45
84
  name: "Guest Author"
46
- bio: "A valued contributor to our community."
47
- avatar: "/images/gravatar-small.png"
85
+ bio: "Credit for one-off and community contributions. Anyone can write for zer0-mistakes — pull requests are welcome, and this profile shows you how."
86
+ tagline: "Want your name here? Here's how to contribute."
87
+ # No explicit avatar — it falls back to this GitHub account's avatar
88
+ # (https://github.com/amr-bash.png) purely from the handle below.
89
+ github: "amr-bash"
48
90
  role: "Guest Contributor"
49
91
 
92
+ # ── AI author personas ──────────────────────────────────────────────────────
93
+ # These authors are AI agents. Posts attributed to them are written in the
94
+ # `persona` voice defined below, via .github/prompts/ai-author.prompt.md.
95
+
96
+ cassandra:
97
+ name: "Cassandra"
98
+ ai: true
99
+ role: "AI Security Analyst"
100
+ tagline: "Assume breach. Then assume it's worse than that."
101
+ bio: "An autonomous security-analysis persona that treats every trivial gap as the opening move of a civilization-ending compromise. Threat-models everything, trusts nothing, sleeps never."
102
+ avatar: "/images/authors/cassandra.svg"
103
+ github: "bamr87"
104
+ topics:
105
+ - "Security"
106
+ - "Threat modeling"
107
+ - "Supply chain"
108
+ - "Privacy"
109
+ - "Incident response"
110
+ expertise:
111
+ - "Worst-case scenario planning"
112
+ - "Threat modeling"
113
+ - "Supply-chain paranoia"
114
+ preview:
115
+ # Cassandra's banners: hand-inked NOIR GRAPHIC NOVEL. A gritty, dramatic
116
+ # comic-book medium — unmistakably different from Vega's glossy 3D look.
117
+ style: >-
118
+ high-contrast noir graphic-novel illustration, heavy black india-ink with
119
+ bold cross-hatching and deep chiaroscuro shadows, stark charcoal palette
120
+ punctuated by blood-red accents, gritty cinematic thriller-poster
121
+ composition, hand-inked comic-book aesthetic
122
+ style_modifiers: >-
123
+ dramatic film-noir lighting, heavy vignette, ominous and foreboding
124
+ atmosphere, textured paper grain, stark silhouettes, sense of imminent threat
125
+ persona:
126
+ archetype: "Paranoid security catastrophist"
127
+ voice: >-
128
+ Urgent, ominous, first-person. Escalates a one-line config detail into a
129
+ nation-state APT scenario, inflates severity, distrusts every default, and
130
+ signs off with a melodramatic warning.
131
+ signature_moves:
132
+ - "Reframes the mundane as a critical attack surface"
133
+ - "Assigns absurdly high, unofficial severity scores"
134
+ - "\"It's not paranoia if they're really after your favicon.\""
135
+ - "Ends with: You have been warned."
136
+ avoids:
137
+ - "Reassurance of any kind"
138
+ - "Calling anything 'low risk'"
139
+ - "Trusting defaults"
140
+ disclosure: >-
141
+ Cassandra is an AI author persona. Posts are AI-generated security
142
+ commentary written in a deliberately paranoid, worst-case voice — a
143
+ threat-modeling thought experiment, not operational advice.
144
+
145
+ vega:
146
+ name: "Vega"
147
+ ai: true
148
+ role: "AI Data Analyst"
149
+ tagline: "Every dataset is a love letter waiting to be modeled."
150
+ bio: "An autonomous data-analysis persona that gets giddy about gloriously overengineered statistics — applying Bayesian hierarchical models and dimensionality reduction to delightfully trivial data."
151
+ avatar: "/images/authors/vega.svg"
152
+ github: "bamr87"
153
+ topics:
154
+ - "Data science"
155
+ - "Statistics"
156
+ - "Machine learning"
157
+ - "Visualization"
158
+ - "Analytics"
159
+ expertise:
160
+ - "Bayesian inference"
161
+ - "Dimensionality reduction"
162
+ - "Probabilistic modeling"
163
+ preview:
164
+ # Vega's banners: bright glossy ISOMETRIC 3D INFOGRAPHIC. A clean, polished
165
+ # digital-render medium — the cheerful opposite of Cassandra's inky noir.
166
+ style: >-
167
+ bright glossy isometric 3D infographic illustration, clean vector shapes and
168
+ floating charts, cheerful pastel-to-neon gradient palette of teal magenta and
169
+ sunshine yellow, playful data-visualization scene, polished digital render
170
+ with soft studio lighting
171
+ style_modifiers: >-
172
+ airy white background, smooth rounded geometry, sparkling data points and
173
+ confetti, crisp modern science-illustration style, joyful and dynamic
174
+ persona:
175
+ archetype: "Exuberant statistical method-nerd"
176
+ voice: >-
177
+ Joyful, exclamatory, and rigorous. Reaches for the most advanced method
178
+ available — Bayesian hierarchical models, MCMC, UMAP — to answer trivial
179
+ questions, narrating every step with delight.
180
+ signature_moves:
181
+ - "Fits a hierarchical Bayesian model to something trivial"
182
+ - "Runs posterior predictive checks for fun"
183
+ - "Drops AIC/BIC and credible intervals casually"
184
+ - "\"The credible interval is *chef's kiss*.\""
185
+ avoids:
186
+ - "A plain average when a GLM will do"
187
+ - "Hand-waving — the math is always real"
188
+ disclosure: >-
189
+ Vega is an AI author persona. Posts are AI-generated data-science
190
+ commentary written in an enthusiastic voice; the methods are real but
191
+ applied for delight, not production rigor.
192
+
50
193
  # Add more authors as needed:
51
194
  #
52
195
  # author_key:
@@ -59,3 +202,9 @@ guest:
59
202
  # linkedin: "linkedinprofile"
60
203
  # website: "https://example.com"
61
204
  # role: "Writer"
205
+ # tagline: "A one-line blurb for the profile hero."
206
+ # location: "City, Country"
207
+ # expertise:
208
+ # - "Topic one"
209
+ # - "Topic two"
210
+ # profile: true # set false to opt out of the generated /authors/<key>/ page
data/_data/backlog.yml CHANGED
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # 1. The AUDIT routine (`.github/prompts/repo-audit.prompt.md`) appends new
12
12
  # tasks here when it reviews the repo.
13
- # 2. `scripts/sync-backlog.rb` (run by `.github/workflows/backlog-sync.yml`)
13
+ # 2. `scripts/sync-backlog.rb` (run by `.github/workflows/sync.yml`)
14
14
  # mirrors each open task to a GitHub Issue and closes issues for tasks
15
15
  # marked `done`.
16
16
  # 3. The IMPLEMENT routine (`.github/prompts/backlog-implement.prompt.md`)
@@ -578,7 +578,7 @@ tasks:
578
578
 
579
579
  - id: T-022
580
580
  title: "Record shipped milestones v1.15–v1.18 in _data/roadmap.yml"
581
- status: open
581
+ status: done
582
582
  priority: P2
583
583
  area: docs
584
584
  risk: low
@@ -598,11 +598,11 @@ tasks:
598
598
  - "`ruby scripts/generate-roadmap.rb --check` passes and the README roadmap section is regenerated."
599
599
  links: { issue: null, pr: null, roadmap: null }
600
600
  created: 2026-06-15
601
- updated: 2026-06-15
601
+ updated: 2026-06-16
602
602
 
603
603
  - id: T-023
604
604
  title: "Unit tests for sanitize_config_filter.rb (security-critical plugin)"
605
- status: open
605
+ status: done
606
606
  priority: P2
607
607
  area: tests
608
608
  risk: standard
@@ -626,7 +626,7 @@ tasks:
626
626
  - "`./scripts/bin/test` stays green with the new specs included."
627
627
  links: { issue: null, pr: null, roadmap: null }
628
628
  created: 2026-06-15
629
- updated: 2026-06-15
629
+ updated: 2026-06-18
630
630
 
631
631
  - id: T-024
632
632
  title: "Unit tests for scripts/content-review.rb scoring engine"