jekyll-theme-zer0 1.26.0 → 1.28.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 +558 -5
- data/README.md +10 -27
- data/_data/authors.yml +4 -3
- data/_data/backlog.yml +28 -0
- data/_data/consumers.yml +147 -0
- data/_data/features.yml +142 -23
- data/_data/i18n/fr.yml +98 -0
- data/_data/i18n/languages.yml +36 -0
- data/_data/i18n/manifest.yml +1502 -0
- data/_data/navigation/docs.yml +2 -0
- data/_data/navigation/main.yml +6 -0
- data/_data/series.yml +19 -0
- data/_data/theme-manifest.yml +348 -268
- data/_data/ui-text.yml +36 -246
- data/_includes/README.md +25 -2
- data/_includes/analytics/google-tag-manager-body.html +11 -2
- data/_includes/analytics/google-tag-manager-head.html +16 -6
- data/_includes/analytics/posthog.html +33 -4
- data/_includes/components/abc-letter.html +43 -0
- data/_includes/components/author-avatar-url.html +4 -2
- data/_includes/components/book-card.html +42 -0
- data/_includes/components/book-nav.html +80 -0
- data/_includes/components/book-plate.html +31 -0
- data/_includes/components/book-toc.html +47 -0
- data/_includes/components/bookshelf.html +68 -0
- data/_includes/components/card-grid.html +60 -0
- data/_includes/components/data-card.html +95 -0
- data/_includes/components/env-switcher.html +3 -1
- data/_includes/components/halfmoon.html +5 -1
- data/_includes/components/language-toggle.html +81 -0
- data/_includes/components/page-feedback.html +65 -2
- data/_includes/components/search-modal.html +2 -2
- data/_includes/components/shortcuts-modal.html +1 -1
- data/_includes/components/theme-controls-bar.html +10 -2
- data/_includes/components/theme-customizer.html +8 -2
- data/_includes/components/translation-notice.html +27 -0
- data/_includes/content/intro.html +16 -15
- data/_includes/content/seo.html +9 -3
- data/_includes/core/color-mode-init.html +13 -4
- data/_includes/core/favicon.html +46 -0
- data/_includes/core/footer.html +9 -4
- data/_includes/core/head.html +18 -0
- data/_includes/core/header.html +9 -4
- data/_includes/core/hreflang.html +33 -0
- data/_includes/core/i18n.html +36 -0
- data/_includes/custom/body-end.html +18 -0
- data/_includes/custom/body-start.html +17 -0
- data/_includes/custom/footer.html +18 -0
- data/_includes/custom/head.html +18 -0
- data/_includes/navigation/breadcrumbs.html +1 -1
- data/_includes/navigation/local-graph.html +28 -2
- data/_includes/navigation/nav-tree.html +3 -3
- data/_includes/navigation/navbar.html +5 -4
- data/_includes/navigation/sidebar-config.html +21 -0
- data/_includes/navigation/sidebar-nav.html +4 -0
- data/_includes/navigation/sidebar-pagetree.html +150 -0
- data/_includes/navigation/sidebar-right.html +3 -2
- data/_includes/navigation/unified-drawer.html +9 -3
- data/_includes/obsidian/full-graph.html +165 -136
- data/_layouts/404.html +260 -0
- data/_layouts/README.md +2 -0
- data/_layouts/article.html +7 -1
- data/_layouts/book-abc.html +106 -0
- data/_layouts/book-story.html +91 -0
- data/_layouts/book.html +113 -0
- data/_layouts/collection.html +17 -5
- data/_layouts/default.html +5 -3
- data/_layouts/home.html +5 -2
- data/_layouts/landing.html +9 -0
- data/_layouts/news.html +159 -33
- data/_layouts/root.html +29 -9
- data/_layouts/section.html +61 -17
- data/_sass/components/_book.scss +423 -0
- data/_sass/core/_navbar.scss +13 -0
- data/_sass/core/_obsidian.scss +295 -7
- data/_sass/layouts/_navbar-extras.scss +6 -1
- data/_sass/theme/_backgrounds.scss +21 -8
- data/assets/css/main.scss +1 -0
- data/assets/js/auto-hide-nav.js +5 -1
- data/assets/js/halfmoon.js +26 -0
- data/assets/js/obsidian-graph.js +707 -265
- data/assets/js/obsidian-local-graph.js +161 -54
- data/assets/js/search-modal.js +4 -1
- data/scripts/README.md +20 -26
- data/scripts/bin/audit-consumer +1 -1
- data/scripts/bin/manifest +31 -5
- data/scripts/bin/sync-plugins +0 -1
- data/scripts/bin/validate +5 -1
- data/scripts/dev/rasterize-svg.js +65 -0
- data/scripts/features/generate-preview-images +49 -1390
- data/scripts/features/install-preview-generator +55 -33
- data/scripts/install/README.md +55 -25
- data/scripts/install/ai/client.sh +302 -93
- data/scripts/install/ai/prompts/spec.schema.json +1 -1
- data/scripts/install/ai/prompts/wizard.system.md +8 -17
- data/scripts/install/ai/wizard.sh +10 -5
- data/scripts/install/apply.sh +7 -3
- data/scripts/install/cli.sh +54 -4
- data/scripts/install/config.sh +167 -0
- data/scripts/install/doctor.sh +38 -0
- data/scripts/install/plan.sh +10 -0
- data/scripts/install/spec.sh +15 -7
- data/scripts/install/template.sh +4 -0
- data/scripts/lib/README.md +1 -5
- data/scripts/lib/install/deploy/README.md +3 -9
- data/scripts/lib/preview_generator.py +2261 -1341
- data/scripts/propagate.rb +277 -0
- data/scripts/translate.rb +1204 -0
- metadata +34 -3
- data/_plugins/preview_image_generator.rb +0 -351
data/README.md
CHANGED
|
@@ -44,14 +44,7 @@ hero_image: /assets/images/wizard-on-journey.png
|
|
|
44
44
|
excerpt: "AI-native Jekyll theme for GitHub Pages — multi-agent ready (Copilot, Codex, Cursor, Claude), AI-powered install & preview images, AIEO-optimized, with Docker-first development and 43 documented features"
|
|
45
45
|
---
|
|
46
46
|
|
|
47
|
-
[](https://github.com/bamr87/zer0-mistakes/actions/workflows/pages/pages-build-deployment)
|
|
48
|
-
[](https://badge.fury.io/rb/jekyll-theme-zer0)
|
|
49
|
-
[](https://github.com/bamr87/zer0-mistakes/actions/workflows/ci.yml)
|
|
50
|
-
[](https://opensource.org/licenses/MIT)
|
|
51
|
-
[](https://github.com/bamr87/zer0-mistakes/blob/main/docker-compose.yml)
|
|
52
|
-
[](https://getbootstrap.com/)
|
|
53
|
-
[](AGENTS.md)
|
|
54
|
-
[](#-aieo-optimized--built-for-ai-citation)
|
|
47
|
+
[](https://github.com/bamr87/zer0-mistakes/actions/workflows/pages/pages-build-deployment) [](https://badge.fury.io/rb/jekyll-theme-zer0) [](https://github.com/bamr87/zer0-mistakes/actions/workflows/ci.yml) [](https://opensource.org/licenses/MIT) [](https://github.com/bamr87/zer0-mistakes/blob/main/docker-compose.yml) [](https://getbootstrap.com/) [](AGENTS.md) [](#-aieo-optimized--built-for-ai-citation)
|
|
55
48
|
|
|
56
49
|
# zer0-mistakes
|
|
57
50
|
|
|
@@ -155,9 +148,7 @@ The installer auto-detects your operating system, sets up Docker, downloads the
|
|
|
155
148
|
|
|
156
149
|
## 🎯 Bare-Minimum Starter (3 files, zero install)
|
|
157
150
|
|
|
158
|
-
Don't want to run the installer? You can publish a working site to GitHub
|
|
159
|
-
Pages with **just three files** in your repo. The remote theme provides every
|
|
160
|
-
layout, style, and even an in-browser configuration wizard.
|
|
151
|
+
Don't want to run the installer? You can publish a working site to GitHub Pages with **just three files** in your repo. The remote theme provides every layout, style, and even an in-browser configuration wizard.
|
|
161
152
|
|
|
162
153
|
```text
|
|
163
154
|
my-site/
|
|
@@ -200,11 +191,7 @@ title: Home
|
|
|
200
191
|
# Welcome to my site
|
|
201
192
|
```
|
|
202
193
|
|
|
203
|
-
Push to a GitHub Pages–enabled repository and visit your site. Until you set
|
|
204
|
-
`site_configured: true`, the home page renders the **welcome layout** — a hero
|
|
205
|
-
card and a full in-browser wizard that generates a personalised `_config.yml`
|
|
206
|
-
you can download. Flip the flag (or fill in `title`/`founder`/`email`) and your
|
|
207
|
-
own content takes over.
|
|
194
|
+
Push to a GitHub Pages–enabled repository and visit your site. Until you set `site_configured: true`, the home page renders the **welcome layout** — a hero card and a full in-browser wizard that generates a personalised `_config.yml` you can download. Flip the flag (or fill in `title`/`founder`/`email`) and your own content takes over.
|
|
208
195
|
|
|
209
196
|
---
|
|
210
197
|
|
|
@@ -248,7 +235,7 @@ zer0-mistakes treats AI as core infrastructure across **install → author → b
|
|
|
248
235
|
| **File-scoped instructions** | `applyTo:` globs auto-load guidance for `_layouts/`, `_includes/`, `scripts/`, `test/`, `docs/`, version files | [`.github/instructions/`](.github/instructions/) |
|
|
249
236
|
| **Reusable agent prompts** | `commit-publish`, `frontmatter-maintainer`, `seed` (full-rebuild blueprint) | [`.github/prompts/`](.github/prompts/) |
|
|
250
237
|
| **Cursor slash-commands** | Mirrors prompts as `/commit-publish`, `/frontend-run-improve` | [`.cursor/commands/`](.cursor/commands/) |
|
|
251
|
-
| **AI preview images** |
|
|
238
|
+
| **AI preview images** | Python engine + script generate OpenAI/DALL·E images for posts missing previews | [`scripts/lib/preview_generator.py`](scripts/lib/preview_generator.py), [`scripts/generate-preview-images.sh`](scripts/generate-preview-images.sh) |
|
|
252
239
|
| **AI release pipeline** | Conventional-commit analyzer chooses MAJOR/MINOR/PATCH, writes CHANGELOG, tags & publishes | [`scripts/analyze-commits.sh`](scripts/analyze-commits.sh), [`scripts/bin/release`](scripts/bin/release) |
|
|
253
240
|
| **AIEO content layer** | `SoftwareApplication`, `WebPage`, `FAQPage`, `Person` JSON-LD; glossary; FAQ; dated roadmap | [See AIEO section](#-aieo-optimized--built-for-ai-citation) |
|
|
254
241
|
|
|
@@ -303,7 +290,7 @@ zer0-mistakes is a layered system: your content (Markdown + YAML) flows through
|
|
|
303
290
|
| **Development** | Docker | Cross-platform consistency |
|
|
304
291
|
| **Templates** | Liquid | Dynamic content rendering |
|
|
305
292
|
| **AI Agents** | Copilot · Codex · Cursor · Claude Code · Aider · Jules · Continue | Multi-tool agentic development via [`AGENTS.md`](AGENTS.md) + `.github/instructions/` |
|
|
306
|
-
| **AI Content** | OpenAI Images API | AI-generated preview images via [`
|
|
293
|
+
| **AI Content** | OpenAI Images API | AI-generated preview images via [`scripts/lib/preview_generator.py`](scripts/lib/preview_generator.py) |
|
|
307
294
|
| **AI Automation** | Conventional-commit analyzer | Auto semantic versioning + changelog ([`scripts/analyze-commits.sh`](scripts/analyze-commits.sh)) |
|
|
308
295
|
| **AIEO** | JSON-LD + FAQ + Glossary schema | Optimized for AI citation and retrieval |
|
|
309
296
|
| **Analytics** | PostHog | Privacy-first tracking |
|
|
@@ -430,8 +417,7 @@ GDPR/CCPA compliant PostHog integration with granular consent: it respects Do No
|
|
|
430
417
|
|
|
431
418
|
### 🧠 Obsidian Vault Integration
|
|
432
419
|
|
|
433
|
-
Edit your content as an [Obsidian](https://obsidian.md) vault — same files,
|
|
434
|
-
same git history, identical rendering on the published site:
|
|
420
|
+
Edit your content as an [Obsidian](https://obsidian.md) vault — same files, same git history, identical rendering on the published site:
|
|
435
421
|
|
|
436
422
|
- **Open repo as a vault**: shared `.obsidian/` config commits with the repo.
|
|
437
423
|
- **Wiki-links** `[[Page Title]]` and aliases `[[Page|Alias]]` resolve to permalinks.
|
|
@@ -440,17 +426,14 @@ same git history, identical rendering on the published site:
|
|
|
440
426
|
- **Backlinks panel** auto-renders on every note (and on any page with `backlinks: true`).
|
|
441
427
|
- **Inline tags** `#topic` link to the tag index, hierarchical tags supported.
|
|
442
428
|
- **Zero plugin requirements**: works on the default GitHub Pages
|
|
443
|
-
|
|
444
|
-
(`assets/js/obsidian-wiki-links.js`) backed by a Liquid-generated
|
|
445
|
-
`assets/data/wiki-index.json`.
|
|
429
|
+
`remote_theme` build via a client-side resolver (`assets/js/obsidian-wiki-links.js`) backed by a Liquid-generated `assets/data/wiki-index.json`.
|
|
446
430
|
|
|
447
431
|
```bash
|
|
448
432
|
# Open the repo root as an Obsidian vault, edit, then commit & push
|
|
449
433
|
git commit -am "note: today's thinking" && git push
|
|
450
434
|
```
|
|
451
435
|
|
|
452
|
-
Read the [Obsidian docs](pages/_docs/obsidian/) for setup, syntax reference,
|
|
453
|
-
authoring workflow, and troubleshooting.
|
|
436
|
+
Read the [Obsidian docs](pages/_docs/obsidian/) for setup, syntax reference, authoring workflow, and troubleshooting.
|
|
454
437
|
|
|
455
438
|
### 📓 Jupyter Notebook Support
|
|
456
439
|
|
|
@@ -646,8 +629,8 @@ git commit -m "feat: add new component"
|
|
|
646
629
|
### Testing Commands
|
|
647
630
|
|
|
648
631
|
```bash
|
|
649
|
-
# Quick validation
|
|
650
|
-
./
|
|
632
|
+
# Quick validation (preflight)
|
|
633
|
+
./scripts/validate --quick
|
|
651
634
|
|
|
652
635
|
# Full test suite
|
|
653
636
|
./test/test_runner.sh --verbose
|
data/_data/authors.yml
CHANGED
|
@@ -47,11 +47,12 @@
|
|
|
47
47
|
# generator. When a post sets `author: <this key>`, these
|
|
48
48
|
# values WIN over _config.yml › preview_images for that
|
|
49
49
|
# post's banner, giving each AI author a distinct look.
|
|
50
|
-
# (
|
|
51
|
-
# scripts/lib/preview_generator.py
|
|
50
|
+
# (Read by the consolidated engine
|
|
51
|
+
# scripts/lib/preview_generator.py — every provider.)
|
|
52
52
|
# style: .. Art-style prompt fragment (overrides preview_images.style).
|
|
53
53
|
# style_modifiers: .. Extra modifiers (overrides preview_images.style_modifiers).
|
|
54
|
-
# size/quality/model: Optional generator overrides (
|
|
54
|
+
# size/quality/model: Optional generator overrides (all providers; a model
|
|
55
|
+
# from another vendor family falls back to the default).
|
|
55
56
|
|
|
56
57
|
default:
|
|
57
58
|
name: "Zer0-Mistakes Team"
|
data/_data/backlog.yml
CHANGED
|
@@ -888,3 +888,31 @@ tasks:
|
|
|
888
888
|
links: { issue: null, pr: null, roadmap: null }
|
|
889
889
|
created: 2026-07-06
|
|
890
890
|
updated: 2026-07-06
|
|
891
|
+
- id: T-034
|
|
892
|
+
title: "Remove the dead preview_image_generator.rb Jekyll plugin and its test surface"
|
|
893
|
+
status: done
|
|
894
|
+
priority: P3
|
|
895
|
+
area: infra
|
|
896
|
+
risk: standard
|
|
897
|
+
effort: M
|
|
898
|
+
source: user
|
|
899
|
+
route: code-fixer
|
|
900
|
+
summary: >-
|
|
901
|
+
_plugins/preview_image_generator.rb never loads anywhere (the github-pages gem
|
|
902
|
+
forces safe mode + a randomized plugins_dir), and the consolidated Python engine
|
|
903
|
+
(scripts/lib/preview_generator.py, ZER0-004) now owns all generation logic while
|
|
904
|
+
_includes/components/preview-image.html + _includes/content/seo.html cover
|
|
905
|
+
rendering in pure Liquid. Remove the plugin, its PreviewImageGeneratorTest half
|
|
906
|
+
of test/test_plugins.rb, the consumer fixture
|
|
907
|
+
test/fixtures/consumer-remote/_plugins/preview_image_generator.rb, and its
|
|
908
|
+
entries in REQUIRED_PLUGIN_FILES (scripts/bin/audit-consumer, sync-plugins,
|
|
909
|
+
manifest) and the installer SOURCE/DEST_FILES. Touches CODEOWNERS-owned
|
|
910
|
+
_plugins/ and scripts/bin/ paths, so this is a human-review PR.
|
|
911
|
+
acceptance:
|
|
912
|
+
- "_plugins/preview_image_generator.rb deleted; docs no longer advertise its Liquid filters."
|
|
913
|
+
- "test_plugins.rb keeps its content-statistics coverage; preview plugin specs removed."
|
|
914
|
+
- "audit-consumer/sync-plugins/manifest lists and the consumer fixture updated; test_audit.sh green."
|
|
915
|
+
- "install-preview-generator no longer ships the plugin; installer tests green."
|
|
916
|
+
links: { issue: 302, pr: null, roadmap: null }
|
|
917
|
+
created: 2026-07-12
|
|
918
|
+
updated: 2026-07-16
|
data/_data/consumers.yml
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# _data/consumers.yml — downstream consumers of this theme
|
|
3
|
+
# ==============================================================================
|
|
4
|
+
#
|
|
5
|
+
# The registry that makes theme releases propagate instead of sitting unnoticed.
|
|
6
|
+
# Every site that renders with zer0-mistakes is listed here together with HOW it
|
|
7
|
+
# consumes the theme and WHICH files hold its version pin.
|
|
8
|
+
#
|
|
9
|
+
# Read by:
|
|
10
|
+
# - scripts/bin/propagate report pin drift; dispatch release events
|
|
11
|
+
# - .github/workflows/propagate-theme.yml release fan-out
|
|
12
|
+
#
|
|
13
|
+
# Why this exists: nothing connected a release to the sites built on it. When
|
|
14
|
+
# 1.27.0 shipped, all five consumers were still on v1.26.0 (or floating on main)
|
|
15
|
+
# and none of them knew. Bumps were a manual, five-repo chore that nobody
|
|
16
|
+
# remembered, so pins drifted until a site broke.
|
|
17
|
+
#
|
|
18
|
+
# ------------------------------------------------------------------------------
|
|
19
|
+
# Consumption modes
|
|
20
|
+
# ------------------------------------------------------------------------------
|
|
21
|
+
# remote_theme_pinned `remote_theme: bamr87/zer0-mistakes@vX.Y.Z` — GitHub
|
|
22
|
+
# Pages fetches the tagged theme at build time. Gets a
|
|
23
|
+
# bump PR on release.
|
|
24
|
+
# remote_theme_floating `remote_theme: bamr87/zer0-mistakes` with no tag —
|
|
25
|
+
# tracks main, so every push to this repo reaches
|
|
26
|
+
# production immediately. Nothing to bump; what these
|
|
27
|
+
# need is a canary, not a PR. See `risk` below.
|
|
28
|
+
# gem `gem "jekyll-theme-zer0", "~> X.Y.Z"` — the theme is
|
|
29
|
+
# resolved from RubyGems, not GitHub. Bumping means
|
|
30
|
+
# editing a Gemfile and re-locking. This is the mode the
|
|
31
|
+
# scheduled updater matters most for: no remote_theme
|
|
32
|
+
# means no automatic pickup of anything, ever.
|
|
33
|
+
# path `gem "jekyll-theme-zer0", path: ...` — a local
|
|
34
|
+
# checkout for development. Never version-pinned and
|
|
35
|
+
# never bumped; listed so audits don't flag it.
|
|
36
|
+
#
|
|
37
|
+
# ------------------------------------------------------------------------------
|
|
38
|
+
# Pin kinds (scripts/bin/propagate knows how to read/rewrite each)
|
|
39
|
+
# ------------------------------------------------------------------------------
|
|
40
|
+
# remote_theme `remote_theme: "bamr87/zer0-mistakes@vX.Y.Z"` in a config
|
|
41
|
+
# hub_registry `theme_repo: bamr87/zer0-mistakes@vX.Y.Z` in _data/hub.yml
|
|
42
|
+
# gem_constraint `gem 'jekyll-theme-zer0', '~> X.Y.Z'` in a Gemfile
|
|
43
|
+
# theme_name `theme: "jekyll-theme-zer0"` — names the gem, carries no
|
|
44
|
+
# version; tracked so a bump doesn't miss the config that
|
|
45
|
+
# activates it
|
|
46
|
+
# path_gem local path gem, unversioned (development only)
|
|
47
|
+
# ==============================================================================
|
|
48
|
+
|
|
49
|
+
version: 1
|
|
50
|
+
|
|
51
|
+
defaults:
|
|
52
|
+
branch: main
|
|
53
|
+
# repository_dispatch event type consumers listen for. Their side of the
|
|
54
|
+
# contract lives in templates/consumer/theme-bump.yml.
|
|
55
|
+
dispatch_event: theme-release
|
|
56
|
+
|
|
57
|
+
consumers:
|
|
58
|
+
# ---------------------------------------------------------------------------
|
|
59
|
+
- repo: bamr87/it-journey
|
|
60
|
+
mode: remote_theme_floating
|
|
61
|
+
site: https://it-journey.dev
|
|
62
|
+
dispatch: false
|
|
63
|
+
risk: >-
|
|
64
|
+
Unpinned. Every push to this theme's main reaches production with no gate
|
|
65
|
+
and no rollback. Shadows ~55 theme files (5 layouts, 34 includes, 8 JS, 6
|
|
66
|
+
CSS, 2 plugins) — the largest override surface in the fleet, including
|
|
67
|
+
~75 lines of !important CSS working around the stacking bug fixed in #338.
|
|
68
|
+
Recommend pinning and joining the fan-out.
|
|
69
|
+
pins:
|
|
70
|
+
- file: _config.yml
|
|
71
|
+
kind: remote_theme
|
|
72
|
+
note: line 36, no tag — floats main
|
|
73
|
+
|
|
74
|
+
# ---------------------------------------------------------------------------
|
|
75
|
+
- repo: bamr87/lifehacker.dev
|
|
76
|
+
mode: remote_theme_floating
|
|
77
|
+
site: https://lifehacker.dev
|
|
78
|
+
dispatch: false
|
|
79
|
+
risk: >-
|
|
80
|
+
Unpinned, same exposure as it-journey. Small override surface (2 includes).
|
|
81
|
+
Recommend pinning and joining the fan-out.
|
|
82
|
+
pins:
|
|
83
|
+
- file: _config.yml
|
|
84
|
+
kind: remote_theme
|
|
85
|
+
note: line 40, no tag — floats main
|
|
86
|
+
|
|
87
|
+
# ---------------------------------------------------------------------------
|
|
88
|
+
- repo: bamr87/bashconsultants
|
|
89
|
+
mode: gem
|
|
90
|
+
site: https://bashconsultants.com
|
|
91
|
+
dispatch: true
|
|
92
|
+
note: >-
|
|
93
|
+
Three stacks, three theme surfaces: GitHub Pages uses the pinned
|
|
94
|
+
remote_theme, Azure Static Web Apps resolves the published gem via
|
|
95
|
+
Gemfile.azure + _config.azure.yml, and local dev mounts a path gem. A bump
|
|
96
|
+
must move the remote_theme tag and the gem constraint together or the two
|
|
97
|
+
production stacks render different theme versions.
|
|
98
|
+
pins:
|
|
99
|
+
- file: _config.yml
|
|
100
|
+
kind: remote_theme
|
|
101
|
+
note: line 31
|
|
102
|
+
- file: Gemfile.azure
|
|
103
|
+
kind: gem_constraint
|
|
104
|
+
note: line 9 — must match the remote_theme tag
|
|
105
|
+
- file: _config.azure.yml
|
|
106
|
+
kind: theme_name
|
|
107
|
+
note: line 3 — activates the gem; no version of its own
|
|
108
|
+
- file: Gemfile
|
|
109
|
+
kind: path_gem
|
|
110
|
+
note: line 40 — dev checkout via ZER0_MISTAKES_PATH; never bumped
|
|
111
|
+
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
- repo: year-of-ai/year-of-ai.github.io
|
|
114
|
+
mode: remote_theme_pinned
|
|
115
|
+
site: https://year-of-ai.github.io
|
|
116
|
+
dispatch: true
|
|
117
|
+
fans_out_to_members: true
|
|
118
|
+
note: >-
|
|
119
|
+
An org hub, not just a site. Its _data/hub.yml theme_repo is the value
|
|
120
|
+
stamped into every member repo's _config.yml by scripts/provision-org-sites.rb,
|
|
121
|
+
so one bump here re-rolls the whole org (12 sites). The hub's own
|
|
122
|
+
_config.yml and hub.yml must move together — they are read by different
|
|
123
|
+
code paths and drift silently otherwise.
|
|
124
|
+
pins:
|
|
125
|
+
- file: _config.yml
|
|
126
|
+
kind: remote_theme
|
|
127
|
+
note: line 40
|
|
128
|
+
- file: _data/hub.yml
|
|
129
|
+
kind: hub_registry
|
|
130
|
+
note: "line 42 (pages.theme_repo) — re-roll members after bumping"
|
|
131
|
+
|
|
132
|
+
# ---------------------------------------------------------------------------
|
|
133
|
+
- repo: ai-world-view/ai-world-view.github.io
|
|
134
|
+
mode: remote_theme_pinned
|
|
135
|
+
site: https://ai-world-view.github.io
|
|
136
|
+
dispatch: true
|
|
137
|
+
fans_out_to_members: true
|
|
138
|
+
note: >-
|
|
139
|
+
Same two-file hub shape as year-of-ai; members join by auto_discover, so
|
|
140
|
+
the member count grows without this file changing.
|
|
141
|
+
pins:
|
|
142
|
+
- file: _config.yml
|
|
143
|
+
kind: remote_theme
|
|
144
|
+
note: line 35
|
|
145
|
+
- file: _data/hub.yml
|
|
146
|
+
kind: hub_registry
|
|
147
|
+
note: "line 39 (pages.theme_repo) — re-roll members after bumping"
|
data/_data/features.yml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# zer0-mistakes Theme Features Registry
|
|
2
2
|
# Comprehensive feature tracking for the zer0-mistakes Jekyll theme
|
|
3
|
-
# Version: 1.
|
|
4
|
-
# Last Updated: 2026-07-
|
|
3
|
+
# Version: 1.26.0
|
|
4
|
+
# Last Updated: 2026-07-17
|
|
5
5
|
|
|
6
6
|
features:
|
|
7
7
|
# ============================================================================
|
|
@@ -80,7 +80,7 @@ features:
|
|
|
80
80
|
issue: null
|
|
81
81
|
tests:
|
|
82
82
|
- "test/test_installer.sh"
|
|
83
|
-
- "test/
|
|
83
|
+
- "test/test_install_legacy_flags.sh"
|
|
84
84
|
references:
|
|
85
85
|
script: "install.sh"
|
|
86
86
|
cli: "scripts/bin/install"
|
|
@@ -106,13 +106,13 @@ features:
|
|
|
106
106
|
|
|
107
107
|
- id: ZER0-004
|
|
108
108
|
title: "AI Preview Image Generator"
|
|
109
|
-
description: "
|
|
109
|
+
description: "Claude-orchestrated preview-image engine: Claude analyzes each article into an art brief and vision-reviews the render (one corrective regeneration), while OpenAI gpt-image-2 / DALL-E (default), xAI, Stability AI, Google Gemini, or a deterministic local template renders. Per-author styles, batch regeneration"
|
|
110
110
|
implemented: true
|
|
111
|
-
version: "1.
|
|
111
|
+
version: "1.27.0"
|
|
112
112
|
link: "/docs/features/preview-image-generator/"
|
|
113
113
|
docs: "/docs/features/preview-image-generator/"
|
|
114
|
-
tags: [ai, images, automation, openai, content]
|
|
115
|
-
date:
|
|
114
|
+
tags: [ai, images, automation, claude, openai, content]
|
|
115
|
+
date: 2026-07-12
|
|
116
116
|
provenance:
|
|
117
117
|
introduced_in: "1.5.0"
|
|
118
118
|
pr: 83
|
|
@@ -120,9 +120,11 @@ features:
|
|
|
120
120
|
issue: null
|
|
121
121
|
tests:
|
|
122
122
|
- "test/test_core.sh"
|
|
123
|
+
- "test/test_preview_generator.py"
|
|
123
124
|
references:
|
|
124
|
-
|
|
125
|
+
engine: "scripts/lib/preview_generator.py"
|
|
125
126
|
script: "scripts/generate-preview-images.sh"
|
|
127
|
+
rasterizer: "scripts/dev/rasterize-svg.js"
|
|
126
128
|
install: "scripts/install-preview-generator.sh"
|
|
127
129
|
config: "_config.yml"
|
|
128
130
|
include: "_includes/components/preview-image.html"
|
|
@@ -130,25 +132,33 @@ features:
|
|
|
130
132
|
script: "scripts/install-preview-generator.sh"
|
|
131
133
|
config_section: "preview_images"
|
|
132
134
|
dependencies:
|
|
133
|
-
required: [
|
|
134
|
-
optional: [
|
|
135
|
+
required: [python3, pyyaml]
|
|
136
|
+
optional: [librsvg, inkscape, imagemagick, node]
|
|
137
|
+
orchestration:
|
|
138
|
+
name: claude
|
|
139
|
+
description: "Claude analyzes articles into art briefs and vision-reviews renders (prompt_engine/review_engine)"
|
|
140
|
+
env_var: CLAUDE_CODE_OAUTH_TOKEN
|
|
135
141
|
providers:
|
|
136
142
|
- name: openai
|
|
137
|
-
description: "OpenAI gpt-image-2 / DALL-E 3 image generation"
|
|
143
|
+
description: "OpenAI gpt-image-2 / DALL-E 3 image generation (default renderer; + --enhance edits)"
|
|
138
144
|
env_var: OPENAI_API_KEY
|
|
139
|
-
- name: stability
|
|
140
|
-
description: "Stability AI Stable Diffusion"
|
|
141
|
-
env_var: STABILITY_API_KEY
|
|
142
145
|
- name: xai
|
|
143
146
|
description: "xAI Grok image generation"
|
|
144
147
|
env_var: XAI_API_KEY
|
|
148
|
+
- name: stability
|
|
149
|
+
description: "Stability AI Stable Diffusion"
|
|
150
|
+
env_var: STABILITY_API_KEY
|
|
151
|
+
- name: gemini
|
|
152
|
+
description: "Google Gemini image generation"
|
|
153
|
+
env_var: GEMINI_API_KEY
|
|
145
154
|
- name: local
|
|
146
|
-
description: "
|
|
155
|
+
description: "Deterministic template SVG/PNG (no API needed)"
|
|
147
156
|
env_var: null
|
|
148
157
|
features:
|
|
149
|
-
- "
|
|
150
|
-
- "
|
|
151
|
-
- "
|
|
158
|
+
- "Claude orchestration: article analysis into art briefs + vision review with one corrective regeneration"
|
|
159
|
+
- "Five-renderer framework with per-vendor model validation"
|
|
160
|
+
- "Graceful degradation to template prompts without a Claude credential"
|
|
161
|
+
- "Retro pixel art default style with per-author overrides"
|
|
152
162
|
- "Front matter integration"
|
|
153
163
|
- "Batch processing"
|
|
154
164
|
|
|
@@ -1403,14 +1413,14 @@ features:
|
|
|
1403
1413
|
- "Optional Ruby plugin for self-builds"
|
|
1404
1414
|
|
|
1405
1415
|
- id: ZER0-045
|
|
1406
|
-
title: "Obsidian
|
|
1407
|
-
description: "
|
|
1416
|
+
title: "Obsidian Graph Views (Full + Local)"
|
|
1417
|
+
description: "Obsidian-desktop-style graph views: a full site graph with a Filters/Display/Forces settings panel, collection legend-filters, tag:/path: search, zoom + fullscreen controls and hover previews, plus a per-page local graph panel with depth and direction controls"
|
|
1408
1418
|
implemented: true
|
|
1409
|
-
version: "1.
|
|
1419
|
+
version: "1.28.0"
|
|
1410
1420
|
link: "/docs/obsidian/graph/"
|
|
1411
1421
|
docs: "/docs/obsidian/graph/"
|
|
1412
1422
|
tags: [obsidian, graph, visualization, navigation]
|
|
1413
|
-
date: 2026-
|
|
1423
|
+
date: 2026-08-08
|
|
1414
1424
|
provenance:
|
|
1415
1425
|
introduced_in: "1.4.0"
|
|
1416
1426
|
pr: 77
|
|
@@ -1418,13 +1428,22 @@ features:
|
|
|
1418
1428
|
issue: null
|
|
1419
1429
|
tests:
|
|
1420
1430
|
- "test/test_obsidian.sh"
|
|
1421
|
-
- "test/visual/features/obsidian-
|
|
1431
|
+
- "test/visual/features/obsidian-graph.spec.js"
|
|
1422
1432
|
references:
|
|
1423
1433
|
includes:
|
|
1424
1434
|
- "_includes/obsidian/full-graph.html"
|
|
1425
1435
|
- "_includes/navigation/local-graph.html"
|
|
1426
1436
|
scripts:
|
|
1427
1437
|
- "assets/js/obsidian-graph.js"
|
|
1438
|
+
- "assets/js/obsidian-local-graph.js"
|
|
1439
|
+
styles:
|
|
1440
|
+
- "_sass/core/_obsidian.scss"
|
|
1441
|
+
features:
|
|
1442
|
+
- "Filters: search with tag:/path: operators, per-collection toggles generated from the wiki-index (count + color swatch = legend), show-orphans, show-unresolved"
|
|
1443
|
+
- "Display: link arrows, node size, link thickness, label fade threshold — applied live"
|
|
1444
|
+
- "Forces: repel force + link distance sliders with animated re-layout; settings persist to localStorage"
|
|
1445
|
+
- "Hover preview card, zoom/fit/fullscreen stack, live dark-mode restyling"
|
|
1446
|
+
- "Local graph: depth selector (1-3) + outgoing/incoming switches, re-rendered in place"
|
|
1428
1447
|
|
|
1429
1448
|
# ============================================================================
|
|
1430
1449
|
# SETUP, NAVIGATION & DEVELOPER UX (v0.20+)
|
|
@@ -2137,3 +2156,103 @@ features:
|
|
|
2137
2156
|
- "Appearance tab: one-click color mode, 9 theme skins, background layer opacity, primary color"
|
|
2138
2157
|
- "Site tab: environment badge, copyable page URL, quick links, theme & build info, admin links"
|
|
2139
2158
|
- "Developer tab: breadcrumb page location, page metadata, source-code shortcuts"
|
|
2159
|
+
|
|
2160
|
+
- id: ZER0-078
|
|
2161
|
+
title: "AI-Generated Multilingual Translations"
|
|
2162
|
+
description: "Build-time translation pipeline: English stays the only human-maintained language while scripts/translate.rb (Claude Code OAuth) generates alternate-language pages, UI strings, and the manifest behind the language toggle"
|
|
2163
|
+
implemented: true
|
|
2164
|
+
version: "1.27.0"
|
|
2165
|
+
link: "/"
|
|
2166
|
+
docs: "https://github.com/bamr87/zer0-mistakes/blob/main/docs/systems/multilingual-translation.md"
|
|
2167
|
+
tags: [i18n, ai, automation, content, ui]
|
|
2168
|
+
date: 2026-07-17
|
|
2169
|
+
provenance:
|
|
2170
|
+
introduced_in: "1.27.0"
|
|
2171
|
+
pr: 316
|
|
2172
|
+
commit: "01dc8fa"
|
|
2173
|
+
issue: null
|
|
2174
|
+
tests:
|
|
2175
|
+
- "test/test_i18n.sh"
|
|
2176
|
+
- "test/visual/features/language-toggle.spec.js"
|
|
2177
|
+
references:
|
|
2178
|
+
includes:
|
|
2179
|
+
- "_includes/core/i18n.html"
|
|
2180
|
+
- "_includes/core/hreflang.html"
|
|
2181
|
+
- "_includes/components/language-toggle.html"
|
|
2182
|
+
- "_includes/components/translation-notice.html"
|
|
2183
|
+
scripts:
|
|
2184
|
+
- "scripts/translate.rb"
|
|
2185
|
+
workflows:
|
|
2186
|
+
- ".github/workflows/translate.yml"
|
|
2187
|
+
data:
|
|
2188
|
+
- "_data/ui-text.yml"
|
|
2189
|
+
- "_data/i18n/languages.yml"
|
|
2190
|
+
docs: "docs/systems/multilingual-translation.md"
|
|
2191
|
+
features:
|
|
2192
|
+
- "One large full-translation job (workflow_dispatch) plus bounded incremental runs when English content changes"
|
|
2193
|
+
- "Manifest-driven SHA change detection, pruning of deleted sources, and generated /fr<en-url> permalinks (GitHub Pages safe-mode friendly)"
|
|
2194
|
+
- "Markdown-safe segment translation: code, Liquid, wiki-links and URLs masked as placeholders and validated"
|
|
2195
|
+
- "Navbar language toggle with availability states, hreflang alternates, per-page html lang, machine-translation notice"
|
|
2196
|
+
|
|
2197
|
+
- id: ZER0-079
|
|
2198
|
+
title: "Config-Driven Favicon and Browser Identity"
|
|
2199
|
+
description: "Head include emitting favicon, SVG icon, Apple touch icon, web manifest, and theme-color tags from an optional favicon config block, with an explicit /favicon.ico fallback that works on baseurl deployments"
|
|
2200
|
+
implemented: true
|
|
2201
|
+
version: "1.28.0"
|
|
2202
|
+
link: "/"
|
|
2203
|
+
docs: "/docs/features/favicon/"
|
|
2204
|
+
tags: [seo, branding, ui, configuration]
|
|
2205
|
+
date: 2026-07-22
|
|
2206
|
+
provenance:
|
|
2207
|
+
introduced_in: "1.28.0"
|
|
2208
|
+
pr: null
|
|
2209
|
+
commit: "a11e29f"
|
|
2210
|
+
issue: null
|
|
2211
|
+
tests:
|
|
2212
|
+
- "test/test_core.sh"
|
|
2213
|
+
references:
|
|
2214
|
+
includes:
|
|
2215
|
+
- "_includes/core/favicon.html"
|
|
2216
|
+
- "_includes/core/head.html"
|
|
2217
|
+
docs: "pages/_docs/features/favicon.md"
|
|
2218
|
+
features:
|
|
2219
|
+
- "Zero-config default: explicit /favicon.ico link on every page (fixes silent 404s and baseurl project sites)"
|
|
2220
|
+
- "Optional SVG favicon, PNG sizes, apple-touch-icon, and web manifest links"
|
|
2221
|
+
- "theme-color meta sourced from favicon.theme_color with fallback to theme_color.main design token"
|
|
2222
|
+
|
|
2223
|
+
- id: ZER0-080
|
|
2224
|
+
title: "Books Collection — Children's Picture-Book Publishing"
|
|
2225
|
+
description: "A `books` collection with immersive cover-to-cover layouts: book landing page (cover hero + TOC), story reading pages with illustration plates and prev/next navigation, bookshelf components, and AI-provenance colophons whose front matter doubles as the image-generation manifest"
|
|
2226
|
+
implemented: true
|
|
2227
|
+
version: "1.28.0"
|
|
2228
|
+
link: "/books/zer0-tales/"
|
|
2229
|
+
docs: "/docs/features/book-collection/"
|
|
2230
|
+
tags: [books, collections, layouts, storybook, ai-images, children]
|
|
2231
|
+
date: 2026-07-22
|
|
2232
|
+
provenance:
|
|
2233
|
+
introduced_in: "1.28.0"
|
|
2234
|
+
pr: 328
|
|
2235
|
+
commit: "1b521f6"
|
|
2236
|
+
issue: null
|
|
2237
|
+
tests:
|
|
2238
|
+
- "test/visual/features/books.spec.js"
|
|
2239
|
+
- "pages/_books/zer0-tales/index.md"
|
|
2240
|
+
references:
|
|
2241
|
+
layouts:
|
|
2242
|
+
- "_layouts/book.html"
|
|
2243
|
+
- "_layouts/book-story.html"
|
|
2244
|
+
includes:
|
|
2245
|
+
- "_includes/components/bookshelf.html"
|
|
2246
|
+
- "_includes/components/book-card.html"
|
|
2247
|
+
- "_includes/components/book-toc.html"
|
|
2248
|
+
- "_includes/components/book-nav.html"
|
|
2249
|
+
- "_includes/components/book-plate.html"
|
|
2250
|
+
styles:
|
|
2251
|
+
- "_sass/components/_book.scss"
|
|
2252
|
+
config: "_config.yml"
|
|
2253
|
+
docs: "pages/_docs/features/book-collection.md"
|
|
2254
|
+
features:
|
|
2255
|
+
- "Book = folder of chapters + index.md; numeric chapter: front matter drives TOC and prev/next ordering (no dates needed)"
|
|
2256
|
+
- "Immersive sidebar-free reading surface: storybook serif, responsive type scale, drop cap, plate styling for bare markdown images"
|
|
2257
|
+
- "illustrations: front matter renders a collapsed prompt colophon — the same list drives OpenAI image generation on consumer sites (drsai)"
|
|
2258
|
+
- "Demo book The Tales of Zer0 ships with the theme; reference platform: bamr87/drsai with Dodge & Reena as the test book"
|
data/_data/i18n/fr.yml
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# ================================================================
|
|
2
|
+
# GENERATED FILE — do not edit by hand.
|
|
3
|
+
# Machine-translated UI strings (fr) produced by
|
|
4
|
+
# scripts/translate.rb from _data/ui-text.yml (en). Regenerate via
|
|
5
|
+
# the Translate workflow or: ruby scripts/translate.rb --langs fr
|
|
6
|
+
# ================================================================
|
|
7
|
+
skip_links: Liens d'évitement
|
|
8
|
+
skip_primary_nav: Aller à la navigation principale
|
|
9
|
+
skip_content: Aller au contenu
|
|
10
|
+
skip_main_content: Aller au contenu principal
|
|
11
|
+
skip_footer: Aller au pied de page
|
|
12
|
+
page: Page
|
|
13
|
+
pagination_previous: Précédent
|
|
14
|
+
pagination_next: Suivant
|
|
15
|
+
breadcrumb_home_label: Accueil
|
|
16
|
+
breadcrumb_separator: "/"
|
|
17
|
+
menu_label: Afficher/masquer le menu
|
|
18
|
+
search_label: Afficher/masquer la recherche
|
|
19
|
+
toc_label: Sur cette page
|
|
20
|
+
ext_link_label: Lien direct
|
|
21
|
+
less_than: moins de
|
|
22
|
+
minute_read: minute de lecture
|
|
23
|
+
share_on_label: Partager sur
|
|
24
|
+
tags_label: 'Étiquettes :'
|
|
25
|
+
categories_label: 'Catégories :'
|
|
26
|
+
date_label: 'Mis à jour :'
|
|
27
|
+
author_label: 'Auteur :'
|
|
28
|
+
comments_label: Laisser un commentaire
|
|
29
|
+
comments_title: Commentaires
|
|
30
|
+
more_label: En savoir plus
|
|
31
|
+
related_label: Vous aimerez peut-être aussi
|
|
32
|
+
follow_label: 'Suivre :'
|
|
33
|
+
feed_label: Flux
|
|
34
|
+
powered_by: Propulsé par
|
|
35
|
+
website_label: Site web
|
|
36
|
+
email_label: E-mail
|
|
37
|
+
recent_posts: Articles récents
|
|
38
|
+
undefined_wpm: Paramètre words_per_minute non défini dans _config.yml
|
|
39
|
+
comment_form_info: Votre adresse e-mail ne sera pas publiée. Les champs obligatoires
|
|
40
|
+
sont indiqués
|
|
41
|
+
comment_form_comment_label: Commentaire
|
|
42
|
+
comment_form_md_info: Le Markdown est pris en charge.
|
|
43
|
+
comment_form_name_label: Nom
|
|
44
|
+
comment_form_email_label: Adresse e-mail
|
|
45
|
+
comment_form_website_label: Site web (facultatif)
|
|
46
|
+
comment_btn_submit: Envoyer le commentaire
|
|
47
|
+
comment_btn_submitted: Envoyé
|
|
48
|
+
comment_success_msg: Merci pour votre commentaire ! Il apparaîtra sur le site une
|
|
49
|
+
fois approuvé.
|
|
50
|
+
comment_error_msg: Désolé, une erreur s'est produite lors de l'envoi. Veuillez vérifier
|
|
51
|
+
que tous les champs obligatoires sont remplis et réessayer.
|
|
52
|
+
loading_label: Chargement...
|
|
53
|
+
search_label_text: Saisissez votre terme de recherche...
|
|
54
|
+
search_placeholder_text: Saisissez votre terme de recherche...
|
|
55
|
+
search_no_results: Aucun résultat
|
|
56
|
+
results_found: Résultat(s) trouvé(s)
|
|
57
|
+
back_to_top: Retour en haut
|
|
58
|
+
stats_total_posts: Total des articles
|
|
59
|
+
stats_total_pages: Total des pages
|
|
60
|
+
stats_categories: Catégories
|
|
61
|
+
stats_tags: Étiquettes
|
|
62
|
+
stats_last_updated: Dernière mise à jour
|
|
63
|
+
stats_overview: Aperçu
|
|
64
|
+
stats_content_breakdown: Répartition du contenu
|
|
65
|
+
theme_toggle: Changer de thème
|
|
66
|
+
dark_mode: Mode sombre
|
|
67
|
+
light_mode: Mode clair
|
|
68
|
+
view_source: Voir la source
|
|
69
|
+
edit_page: Modifier cette page
|
|
70
|
+
report_issue: Signaler un problème
|
|
71
|
+
breadcrumbs_root: Accueil
|
|
72
|
+
breadcrumbs_aria: Fil d'Ariane
|
|
73
|
+
shortcuts_title: Raccourcis clavier
|
|
74
|
+
shortcuts_search: Ouvrir la recherche
|
|
75
|
+
shortcuts_prev_section: Section précédente
|
|
76
|
+
shortcuts_next_section: Section suivante
|
|
77
|
+
shortcuts_toggle_sidebar: Afficher/masquer la barre latérale
|
|
78
|
+
shortcuts_toggle_toc: Afficher/masquer la table des matières
|
|
79
|
+
shortcuts_show_help: Afficher cette aide
|
|
80
|
+
home_label: Accueil
|
|
81
|
+
main_nav_label: Navigation principale
|
|
82
|
+
search_button_label: Rechercher
|
|
83
|
+
settings_button_label: Paramètres
|
|
84
|
+
toc_title: Table des matières
|
|
85
|
+
published_label: Publié
|
|
86
|
+
updated_label: Mis à jour
|
|
87
|
+
reading_time_label: 'Temps de lecture estimé :'
|
|
88
|
+
reading_time_minute: minute
|
|
89
|
+
share_label: Partager
|
|
90
|
+
copy_link_label: Copier le lien
|
|
91
|
+
improve_label: Améliorer
|
|
92
|
+
edit_on_github: Modifier sur GitHub
|
|
93
|
+
lang_toggle_label: Langue
|
|
94
|
+
lang_toggle_aria: Changer de langue
|
|
95
|
+
lang_not_available: Pas encore traduit
|
|
96
|
+
machine_translation_notice: Cette page a été traduite automatiquement à partir de
|
|
97
|
+
l'original en anglais.
|
|
98
|
+
machine_translation_view_source: Voir l'original
|