jekyll-theme-zer0 1.28.0 → 1.30.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 +1143 -13
- data/_data/README.md +2 -0
- data/_data/ai.yml +5 -3
- data/_data/ai_pricing.yml +36 -0
- data/_data/backlog.yml +507 -2
- data/_data/consumers.yml +157 -9
- data/_data/features.yml +303 -20
- data/_data/feedback_types.yml +17 -12
- data/_data/i18n/fr.yml +12 -7
- data/_data/i18n/manifest.yml +39 -12
- data/_data/ingredient_densities.yml +122 -0
- data/_data/landing.yml +5 -2
- data/_data/navigation/main.yml +16 -0
- data/_data/navigation/quickstart.yml +4 -0
- data/_data/recipe_courses.yml +64 -0
- data/_data/site_builder.yml +874 -0
- data/_data/theme-manifest.yml +160 -124
- data/_data/ui-text.yml +26 -0
- data/_includes/README.md +26 -2
- data/_includes/analytics/posthog.html +2 -2
- data/_includes/components/admin-links.html +2 -2
- data/_includes/components/admin-tabs.html +2 -2
- data/_includes/components/ai-chat.html +14 -11
- data/_includes/components/analytics-dashboard.html +8 -8
- data/_includes/components/author-bio.html +1 -1
- data/_includes/components/author-card.html +10 -2
- data/_includes/components/author-eeat.html +4 -4
- data/_includes/components/background-customizer.html +10 -10
- data/_includes/components/background-image.html +114 -0
- data/_includes/components/background-settings.html +28 -15
- data/_includes/components/collection-manager.html +5 -5
- data/_includes/components/component-showcase.html +13 -13
- data/_includes/components/config-editor.html +12 -12
- data/_includes/components/config-viewer.html +8 -8
- data/_includes/components/cookie-consent.html +15 -15
- data/_includes/components/cta-button.html +7 -2
- data/_includes/components/dev-shortcuts.html +7 -7
- data/_includes/components/env-dashboard.html +8 -8
- data/_includes/components/env-switcher.html +9 -9
- data/_includes/components/feature-card.html +2 -2
- data/_includes/components/halfmoon.html +2 -2
- data/_includes/components/info-section.html +42 -37
- data/_includes/components/js-cdn.html +15 -15
- data/_includes/components/language-toggle.html +168 -21
- data/_includes/components/mermaid.html +72 -435
- data/_includes/components/nanobar.html +5 -5
- data/_includes/components/nav-editor.html +2 -2
- data/_includes/components/nav-export.html +2 -2
- data/_includes/components/nav-overview.html +2 -2
- data/_includes/components/page-feedback.html +45 -30
- data/_includes/components/page-views-init.html +55 -0
- data/_includes/components/page-views.html +33 -0
- data/_includes/components/post-card.html +22 -22
- data/_includes/components/post-type-badge.html +2 -2
- data/_includes/components/powered-by.html +2 -2
- data/_includes/components/preview-image.html +6 -0
- data/_includes/components/quick-index.html +2 -2
- data/_includes/components/recipe-card.html +67 -0
- data/_includes/components/recipe-duration.html +50 -0
- data/_includes/components/recipe-grams.html +58 -0
- data/_includes/components/recipe-index.html +96 -0
- data/_includes/components/recipe-ingredients.html +90 -0
- data/_includes/components/recipe-meta.html +96 -0
- data/_includes/components/recipe-nutrition.html +57 -0
- data/_includes/components/recipe-qty.html +73 -0
- data/_includes/components/recipe-ratio.html +151 -0
- data/_includes/components/recipe-scaler.html +73 -0
- data/_includes/components/recipe-steps.html +86 -0
- data/_includes/components/recipe-temp.html +45 -0
- data/_includes/components/search-modal.html +29 -4
- data/_includes/components/searchbar.html +2 -2
- data/_includes/components/shortcuts-modal.html +3 -0
- data/_includes/components/svg-background.html +2 -2
- data/_includes/components/theme-customizer.html +2 -2
- data/_includes/components/theme-info.html +14 -7
- data/_includes/components/theme-preview-gallery.html +22 -22
- data/_includes/content/giscus.html +2 -2
- data/_includes/content/intro.html +8 -8
- data/_includes/content/jsonld-faq.html +2 -2
- data/_includes/content/jsonld-software.html +24 -5
- data/_includes/content/seo.html +4 -4
- data/_includes/content/sitemap.html +27 -27
- data/_includes/content/toc.html +183 -183
- data/_includes/core/branding.html +6 -6
- data/_includes/core/console-capture.html +32 -74
- data/_includes/core/favicon.html +49 -7
- data/_includes/core/footer-fabs.html +17 -3
- data/_includes/core/footer.html +49 -34
- data/_includes/core/head.html +110 -86
- data/_includes/core/header.html +76 -54
- data/_includes/docs/bootstrap-docs.html +8 -8
- data/_includes/landing/landing-install-cards.html +2 -2
- data/_includes/landing/landing-quick-links.html +1 -1
- data/_includes/navigation/admin-nav.html +2 -2
- data/_includes/navigation/nav-tree.html +8 -8
- data/_includes/navigation/navbar.html +12 -12
- data/_includes/navigation/section-sidebar.html +109 -27
- data/_includes/navigation/sidebar-config.html +36 -2
- data/_includes/navigation/sidebar-left.html +17 -16
- data/_includes/navigation/sidebar-right.html +8 -7
- data/_includes/obsidian/full-graph.html +2 -2
- data/_includes/setup/claude-session.html +72 -0
- data/_includes/setup/prereq-checklist.html +90 -0
- data/_includes/setup/wizard.html +924 -222
- data/_includes/stats/stats-categories.html +8 -8
- data/_includes/stats/stats-header.html +14 -14
- data/_includes/stats/stats-metrics.html +14 -14
- data/_includes/stats/stats-no-data.html +12 -12
- data/_includes/stats/stats-overview.html +6 -6
- data/_includes/stats/stats-tags.html +8 -8
- data/_layouts/404.html +38 -24
- data/_layouts/README.md +2 -0
- data/_layouts/admin.html +24 -24
- data/_layouts/article.html +43 -33
- data/_layouts/author.html +20 -20
- data/_layouts/authors.html +2 -2
- data/_layouts/book-abc.html +12 -12
- data/_layouts/book-story.html +15 -15
- data/_layouts/book.html +12 -12
- data/_layouts/collection.html +33 -33
- data/_layouts/cookbook.html +88 -0
- data/_layouts/default.html +31 -28
- data/_layouts/home.html +23 -23
- data/_layouts/index.html +10 -10
- data/_layouts/landing.html +17 -17
- data/_layouts/news.html +44 -44
- data/_layouts/note.html +38 -38
- data/_layouts/notebook.html +34 -34
- data/_layouts/recipe.html +274 -0
- data/_layouts/root.html +92 -55
- data/_layouts/section.html +62 -33
- data/_layouts/setup.html +3 -3
- data/_layouts/sitemap-collection.html +49 -49
- data/_layouts/stats.html +40 -40
- data/_layouts/tag.html +12 -12
- data/_layouts/welcome.html +21 -21
- data/_sass/components/_callout.scss +1 -1
- data/_sass/components/_footer.scss +37 -1
- data/_sass/components/_mermaid.scss +375 -0
- data/_sass/components/_page-views.scss +36 -0
- data/_sass/components/_recipe.scss +506 -0
- data/_sass/components/_setup-wizard.scss +764 -0
- data/_sass/components/_ui-enhancements.scss +6 -6
- data/_sass/core/_navbar.scss +261 -46
- data/_sass/layouts/_landing.scss +2 -2
- data/_sass/layouts/_navbar-extras.scss +14 -4
- data/_sass/tokens/_color.scss +6 -0
- data/_sass/tokens/_index.scss +2 -0
- data/_sass/tokens/_radius.scss +21 -0
- data/_sass/tokens/_typography.scss +4 -0
- data/_sass/utilities/_focus.scss +14 -0
- data/assets/css/main.scss +4 -0
- data/assets/js/ai-chat.js +47 -5
- data/assets/js/fleet-feedback-capture.js +124 -0
- data/assets/js/fleet-feedback.js +853 -0
- data/assets/js/mermaid-diagrams.js +1267 -0
- data/assets/js/modules/navigation/config.js +9 -6
- data/assets/js/modules/navigation/navbar.js +55 -0
- data/assets/js/modules/navigation/scroll-spy.js +315 -80
- data/assets/js/modules/theme/appearance.js +8 -2
- data/assets/js/obsidian-wiki-links.js +8 -3
- data/assets/js/page-feedback.js +125 -192
- data/assets/js/page-views.js +372 -0
- data/assets/js/recipe-scaler.js +501 -0
- data/assets/js/search-modal.js +36 -0
- data/assets/js/setup-wizard.js +2279 -226
- data/assets/js/site-builder.js +1834 -0
- data/assets/js/ui-enhancements.js +11 -3
- data/scripts/README.md +44 -0
- data/scripts/ai/README.md +38 -0
- data/scripts/ai/api_call.rb +124 -0
- data/scripts/ai/usage.rb +314 -0
- data/scripts/ai/usage_report.rb +225 -0
- data/scripts/bin/audit-consumer +39 -7
- data/scripts/bin/giscus-discussions +213 -14
- data/scripts/bin/manifest +35 -12
- data/scripts/ci/agent_review_result.py +164 -0
- data/scripts/ci/test_agent_review_result.py +172 -0
- data/scripts/ci/test_visual_evidence_autogen.py +341 -0
- data/scripts/ci/visual_evidence_autogen.py +1060 -0
- data/scripts/content-review.rb +20 -1
- data/scripts/design-system-check.rb +170 -0
- data/scripts/lib/audit.sh +42 -2
- data/scripts/lint-liquid-raw.rb +137 -0
- data/scripts/test/integration/mermaid +22 -8
- data/scripts/test/lib/run_tests.sh +3 -1
- data/scripts/test/lib/test_agent_review_result.sh +27 -0
- data/scripts/test/lib/test_visual_evidence_autogen.sh +24 -0
- data/scripts/translate.rb +94 -16
- metadata +48 -2
data/_data/consumers.yml
CHANGED
|
@@ -44,6 +44,9 @@
|
|
|
44
44
|
# version; tracked so a bump doesn't miss the config that
|
|
45
45
|
# activates it
|
|
46
46
|
# path_gem local path gem, unversioned (development only)
|
|
47
|
+
# gem_unconstrained `gem 'jekyll-theme-zer0'` with no version — resolves
|
|
48
|
+
# whatever RubyGems has at `bundle update` time; tracked
|
|
49
|
+
# only (like resolved_lockfile), never reports drift
|
|
47
50
|
# ==============================================================================
|
|
48
51
|
|
|
49
52
|
version: 1
|
|
@@ -62,10 +65,18 @@ consumers:
|
|
|
62
65
|
dispatch: false
|
|
63
66
|
risk: >-
|
|
64
67
|
Unpinned. Every push to this theme's main reaches production with no gate
|
|
65
|
-
and no rollback
|
|
66
|
-
|
|
67
|
-
~75 lines of !important CSS working around
|
|
68
|
-
|
|
68
|
+
and no rollback — that part is the real exposure. Recommend pinning and
|
|
69
|
+
joining the fan-out. NOTE: this entry previously claimed it "shadows ~55
|
|
70
|
+
theme files … ~75 lines of !important CSS working around #338", which
|
|
71
|
+
audit-consumer does not support. Only 2 files actually shadow a theme
|
|
72
|
+
file (_includes/content/giscus.html, assets/js/particles-source.js); the
|
|
73
|
+
other ~52 are it-journey's own quest-system layouts and includes that
|
|
74
|
+
share no filename with anything in this theme, so they carry no drift
|
|
75
|
+
risk at all. The !important CSS is real but is 31 lines in
|
|
76
|
+
assets/css/user-overrides.css — this theme's own documented extension
|
|
77
|
+
hook, enabled by `user_overrides: true`, not a shadow — and no fix
|
|
78
|
+
numbered #338 could be substantiated in that repo. Keep this field
|
|
79
|
+
derived from audit-consumer output, not hand-maintained estimates.
|
|
69
80
|
pins:
|
|
70
81
|
- file: _config.yml
|
|
71
82
|
kind: remote_theme
|
|
@@ -109,6 +120,39 @@ consumers:
|
|
|
109
120
|
kind: path_gem
|
|
110
121
|
note: line 40 — dev checkout via ZER0_MISTAKES_PATH; never bumped
|
|
111
122
|
|
|
123
|
+
# ---------------------------------------------------------------------------
|
|
124
|
+
- repo: amr-bash/bash-365.com
|
|
125
|
+
mode: remote_theme_floating
|
|
126
|
+
site: https://bash-365.com
|
|
127
|
+
dispatch: false
|
|
128
|
+
note: >-
|
|
129
|
+
BASH Consulting's site, forked from bamr87/bashconsultants (which stays
|
|
130
|
+
registered above) and carrying the same three-stack shape: GitHub Pages
|
|
131
|
+
via remote_theme, Azure Static Web Apps via Gemfile.azure +
|
|
132
|
+
_config.azure.yml, local dev via a path gem. Unlike its parent, nothing
|
|
133
|
+
here carries a version any more — remote_theme is untagged and
|
|
134
|
+
Gemfile.azure names the gem with no constraint — so there is no pin for a
|
|
135
|
+
bump PR to rewrite. Declares its intentional forks in .theme-overrides.yml.
|
|
136
|
+
risk: >-
|
|
137
|
+
Unpinned on Pages; the Azure stack advances only when someone runs
|
|
138
|
+
`bundle update jekyll-theme-zer0`, so the two production stacks can
|
|
139
|
+
render different theme versions with nothing here to notice. Recommend
|
|
140
|
+
pinning remote_theme and constraining Gemfile.azure together and joining
|
|
141
|
+
the fan-out.
|
|
142
|
+
pins:
|
|
143
|
+
- file: _config.yml
|
|
144
|
+
kind: remote_theme
|
|
145
|
+
note: line 33, no tag — floats main
|
|
146
|
+
- file: Gemfile.azure
|
|
147
|
+
kind: gem_unconstrained
|
|
148
|
+
note: line 10 — no version; `bundle update jekyll-theme-zer0` advances it
|
|
149
|
+
- file: _config.azure.yml
|
|
150
|
+
kind: theme_name
|
|
151
|
+
note: line 3 — activates the gem; no version of its own
|
|
152
|
+
- file: Gemfile
|
|
153
|
+
kind: path_gem
|
|
154
|
+
note: line 59 — dev checkout via ZER0_MISTAKES_PATH; never bumped
|
|
155
|
+
|
|
112
156
|
# ---------------------------------------------------------------------------
|
|
113
157
|
- repo: year-of-ai/year-of-ai.github.io
|
|
114
158
|
mode: remote_theme_pinned
|
|
@@ -131,17 +175,121 @@ consumers:
|
|
|
131
175
|
|
|
132
176
|
# ---------------------------------------------------------------------------
|
|
133
177
|
- repo: ai-world-view/ai-world-view.github.io
|
|
134
|
-
mode:
|
|
178
|
+
mode: remote_theme_floating
|
|
135
179
|
site: https://ai-world-view.github.io
|
|
136
|
-
dispatch:
|
|
180
|
+
dispatch: false
|
|
137
181
|
fans_out_to_members: true
|
|
138
182
|
note: >-
|
|
139
183
|
Same two-file hub shape as year-of-ai; members join by auto_discover, so
|
|
140
|
-
the member count grows without this file changing.
|
|
184
|
+
the member count grows without this file changing. Was registered as
|
|
185
|
+
remote_theme_pinned until the 2026-09 fleet harmonization, but both its
|
|
186
|
+
_config.yml remote_theme and its hub.yml theme_repo carry NO tag — the
|
|
187
|
+
hub and every member it stamps float on this theme's main.
|
|
188
|
+
risk: >-
|
|
189
|
+
Unpinned, and an org hub: a theme break here reaches every auto-discovered
|
|
190
|
+
member site at once. Recommend pinning both files together and joining
|
|
191
|
+
the fan-out (dispatch: true) like year-of-ai.
|
|
141
192
|
pins:
|
|
142
193
|
- file: _config.yml
|
|
143
194
|
kind: remote_theme
|
|
144
|
-
note: line
|
|
195
|
+
note: line 36, no tag — floats main
|
|
145
196
|
- file: _data/hub.yml
|
|
146
197
|
kind: hub_registry
|
|
147
|
-
note: "line 39 (pages.theme_repo) —
|
|
198
|
+
note: "line 39 (pages.theme_repo), no tag — members float too"
|
|
199
|
+
|
|
200
|
+
# ---------------------------------------------------------------------------
|
|
201
|
+
# The four entries below were missing entirely until the 2026-08 fleet audit.
|
|
202
|
+
# Unregistered consumers are invisible to propagate.rb in BOTH directions: no
|
|
203
|
+
# release dispatch reaches them, and they never appear in the weekly drift
|
|
204
|
+
# report — so their pins can rot indefinitely with nothing to notice. That is
|
|
205
|
+
# exactly what happened to zer0-pages, which sat three minors behind on a gem
|
|
206
|
+
# constraint that already permitted the current release.
|
|
207
|
+
# ---------------------------------------------------------------------------
|
|
208
|
+
- repo: bamr87/zer0-pages
|
|
209
|
+
mode: gem
|
|
210
|
+
site: https://bamr87.github.io/zer0-pages/
|
|
211
|
+
dispatch: true
|
|
212
|
+
note: >-
|
|
213
|
+
Dual Obsidian-vault / Jekyll repo. Two things make it unlike every other
|
|
214
|
+
consumer. (1) It sets `source: pages`, so the whole themable tree lives
|
|
215
|
+
under pages/ — audit-consumer follows `source:` for this reason; auditing
|
|
216
|
+
the repo root reports a falsely clean result. (2) It is gem mode with no
|
|
217
|
+
remote_theme anywhere, so NOTHING is picked up automatically: the
|
|
218
|
+
scheduled bump is its only path to a new version.
|
|
219
|
+
risk: >-
|
|
220
|
+
Gemfile.lock resolved 1.25.0 while the Gemfile constraint (~> 1.25)
|
|
221
|
+
already permitted 1.28.0 — stale purely because nothing was nudging it.
|
|
222
|
+
Keeps two deliberate include forks, declared in its .theme-overrides.yml.
|
|
223
|
+
pins:
|
|
224
|
+
- file: Gemfile
|
|
225
|
+
kind: gem_constraint
|
|
226
|
+
note: 'line 11 — `gem "jekyll-theme-zer0", "~> 1.25"`'
|
|
227
|
+
- file: Gemfile.lock
|
|
228
|
+
kind: resolved_lockfile
|
|
229
|
+
note: "line 86 — re-lock with `bundle lock --update jekyll-theme-zer0`"
|
|
230
|
+
- file: _config.yml
|
|
231
|
+
kind: theme_name
|
|
232
|
+
note: "line 29 — `theme: jekyll-theme-zer0`; activates the gem, no version of its own"
|
|
233
|
+
|
|
234
|
+
# ---------------------------------------------------------------------------
|
|
235
|
+
- repo: bamr87/irony-works
|
|
236
|
+
mode: remote_theme_floating
|
|
237
|
+
site: https://bamr87.github.io/irony-works/
|
|
238
|
+
dispatch: false
|
|
239
|
+
note: >-
|
|
240
|
+
Vault + Node engine; engine/scripts/transplant.mjs converts vault/ into
|
|
241
|
+
the _entries/ collection before Jekyll runs. Has NO Gemfile at all — it
|
|
242
|
+
builds via actions/jekyll-build-pages (the github-pages image), so it can
|
|
243
|
+
only ever be tracked as remote_theme_floating; there is no gem constraint
|
|
244
|
+
surface for a bump to rewrite.
|
|
245
|
+
risk: >-
|
|
246
|
+
Unpinned, and with no local preview path a contributor cannot see a theme
|
|
247
|
+
break before pushing. Keeps three deliberate overrides, declared in its
|
|
248
|
+
.theme-overrides.yml.
|
|
249
|
+
pins:
|
|
250
|
+
- file: _config.yml
|
|
251
|
+
kind: remote_theme
|
|
252
|
+
note: line 4, no tag — floats main
|
|
253
|
+
|
|
254
|
+
# ---------------------------------------------------------------------------
|
|
255
|
+
- repo: bamr87/wargames
|
|
256
|
+
mode: remote_theme_floating
|
|
257
|
+
site: https://bamr87.github.io/wargames/
|
|
258
|
+
dispatch: false
|
|
259
|
+
note: >-
|
|
260
|
+
Content-only vendored mirror of the OverTheWire challenges. Zero local
|
|
261
|
+
theme files — one of the cleanest consumers in the fleet. Its _config.yml
|
|
262
|
+
uses column-aligned YAML (`remote_theme : "..."`), the style
|
|
263
|
+
that used to defeat audit-consumer's mode detection.
|
|
264
|
+
risk: >-
|
|
265
|
+
Unpinned, and its only build runs on push to main (jekyll-gh-pages.yml),
|
|
266
|
+
so a break ships before anyone sees it.
|
|
267
|
+
pins:
|
|
268
|
+
- file: _config.yml
|
|
269
|
+
kind: remote_theme
|
|
270
|
+
note: line 44, no tag — floats main
|
|
271
|
+
|
|
272
|
+
# ---------------------------------------------------------------------------
|
|
273
|
+
- repo: bamr87/zer0-pages-remote
|
|
274
|
+
mode: remote_theme_floating
|
|
275
|
+
site: https://bamr87.github.io/zer0-pages-remote/
|
|
276
|
+
dispatch: false
|
|
277
|
+
note: >-
|
|
278
|
+
The minimal reference consumer: _config.yml + Gemfile + index.md, no
|
|
279
|
+
local theme files and no _data at all, still showing the onboarding
|
|
280
|
+
wizard by design. Useful as the canary for what a stock remote_theme
|
|
281
|
+
consumer gets with zero customisation — if the theme breaks a bare site,
|
|
282
|
+
it breaks here first.
|
|
283
|
+
private: true
|
|
284
|
+
risk: >-
|
|
285
|
+
Unpinned. Low stakes (a demo, not a content site), but it has already
|
|
286
|
+
caught one real integration break: PR #8 fixed a Liquid `include_cached`
|
|
287
|
+
failure caused by a Gemfile plugin missing from the safe-mode whitelist.
|
|
288
|
+
This repo is PRIVATE, so an unauthenticated `propagate.rb` run reports it
|
|
289
|
+
"unreachable" rather than reading its pin — drift reporting needs a token
|
|
290
|
+
here even though it is read-only. CI already supplies one; a bare local
|
|
291
|
+
run will not.
|
|
292
|
+
pins:
|
|
293
|
+
- file: _config.yml
|
|
294
|
+
kind: remote_theme
|
|
295
|
+
note: line 12, no tag — floats main
|
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.29.0
|
|
4
|
+
# Last Updated: 2026-09-07
|
|
5
5
|
|
|
6
6
|
features:
|
|
7
7
|
# ============================================================================
|
|
@@ -435,22 +435,25 @@ features:
|
|
|
435
435
|
|
|
436
436
|
- id: ZER0-013
|
|
437
437
|
title: "Mermaid Diagram Support"
|
|
438
|
-
description: "Client-side Mermaid.js
|
|
438
|
+
description: "Client-side Mermaid.js diagrams for 10+ diagram types, rendered as accessible figures: a zoom / fullscreen / copy-source / SVG-export toolbar, accTitle captions, an error card that keeps the source visible, and colours derived from the live design tokens so diagrams follow the colour mode and skin. GitHub Pages compatible with no build plugins required"
|
|
439
439
|
implemented: true
|
|
440
|
-
version: "
|
|
441
|
-
link: "/"
|
|
440
|
+
version: "1.30.0"
|
|
441
|
+
link: "/docs/features/mermaid-diagrams/"
|
|
442
442
|
docs: "/docs/features/mermaid-diagrams/"
|
|
443
|
-
tags: [mermaid, diagrams, visualization, documentation]
|
|
444
|
-
date:
|
|
443
|
+
tags: [mermaid, diagrams, visualization, documentation, accessibility, ui]
|
|
444
|
+
date: 2026-09-05
|
|
445
445
|
provenance:
|
|
446
446
|
introduced_in: "0.3.0"
|
|
447
447
|
pr: null
|
|
448
448
|
commit: "1a6184b"
|
|
449
449
|
issue: null
|
|
450
450
|
tests:
|
|
451
|
-
- "test/
|
|
451
|
+
- "test/visual/features/mermaid.spec.js"
|
|
452
452
|
references:
|
|
453
453
|
include: "_includes/components/mermaid.html"
|
|
454
|
+
script: "assets/js/mermaid-diagrams.js"
|
|
455
|
+
styles: "_sass/components/_mermaid.scss"
|
|
456
|
+
evidence: "test/visual/mermaid-evidence.mjs"
|
|
454
457
|
config: "_config.yml"
|
|
455
458
|
diagram_types:
|
|
456
459
|
- "Flowchart (graph TD)"
|
|
@@ -1037,6 +1040,7 @@ features:
|
|
|
1037
1040
|
- "Client-side JSON search index"
|
|
1038
1041
|
- "Bootstrap modal interface"
|
|
1039
1042
|
- "Keyboard shortcut (/) activation"
|
|
1043
|
+
- "Cmd/Ctrl+K shortcut with visible navbar affordance — a / kbd chip on the search button (design-system navbar pattern), hover titles with platform-aware Cmd-K/Ctrl+K, aria-keyshortcuts, and shortcut hints on the sidebar (b) and TOC (t) toggles"
|
|
1040
1044
|
- "Real-time search results"
|
|
1041
1045
|
- "Accessible search input"
|
|
1042
1046
|
- "No external dependency (Algolia removed v1.5.1)"
|
|
@@ -1752,14 +1756,14 @@ features:
|
|
|
1752
1756
|
includes:
|
|
1753
1757
|
- "_includes/content/backlinks.html"
|
|
1754
1758
|
- id: ZER0-060
|
|
1755
|
-
title: "AI Chat Assistant (Claude + GitHub)"
|
|
1756
|
-
description: "
|
|
1759
|
+
title: "AI Chat Assistant (Claude or Grok + GitHub)"
|
|
1760
|
+
description: "Floating chat grounded in the current page, answered by Claude or Grok through the proxy: streaming replies, GitHub issue/PR actions (after confirmation), and a dev-only mode that edits the page source file live"
|
|
1757
1761
|
implemented: true
|
|
1758
|
-
version: "1.
|
|
1762
|
+
version: "1.30.0"
|
|
1759
1763
|
link: "/docs/features/ai-chat-assistant/"
|
|
1760
1764
|
docs: "/docs/features/ai-chat-assistant/"
|
|
1761
|
-
tags: [ai, chatbot, claude, github, proxy, accessibility]
|
|
1762
|
-
date: 2026-
|
|
1765
|
+
tags: [ai, chatbot, claude, grok, github, proxy, accessibility]
|
|
1766
|
+
date: 2026-09-07
|
|
1763
1767
|
provenance:
|
|
1764
1768
|
introduced_in: "1.18.0"
|
|
1765
1769
|
pr: 33
|
|
@@ -1770,7 +1774,7 @@ features:
|
|
|
1770
1774
|
references:
|
|
1771
1775
|
includes: ["_includes/components/ai-chat.html"]
|
|
1772
1776
|
layouts: ["_layouts/root.html"]
|
|
1773
|
-
scripts: ["assets/js/ai-chat.js", "templates/deploy/chat-proxy/worker.js", "templates/deploy/chat-proxy/dev-proxy.mjs", "templates/deploy/chat-proxy/page-store.mjs"]
|
|
1777
|
+
scripts: ["assets/js/ai-chat.js", "templates/deploy/chat-proxy/worker.js", "templates/deploy/chat-proxy/providers.js", "templates/deploy/chat-proxy/dev-proxy.mjs", "templates/deploy/chat-proxy/page-store.mjs"]
|
|
1774
1778
|
config: "_config.yml"
|
|
1775
1779
|
instructions: ".github/instructions/ai-chat.instructions.md"
|
|
1776
1780
|
|
|
@@ -1917,25 +1921,27 @@ features:
|
|
|
1917
1921
|
|
|
1918
1922
|
- id: ZER0-067
|
|
1919
1923
|
title: "Setup Wizard"
|
|
1920
|
-
description: "
|
|
1924
|
+
description: "Nine-step in-browser wizard that assembles a complete starter project — _config.yml, dev config, Gemfile, docker-compose, navigation, first pages — with per-file download and a self-extracting bundle; the form half of the Site Builder"
|
|
1921
1925
|
implemented: true
|
|
1922
|
-
version: "
|
|
1926
|
+
version: "1.30.0"
|
|
1923
1927
|
link: "/setup/"
|
|
1924
|
-
docs: "/docs/
|
|
1928
|
+
docs: "/docs/features/site-builder/"
|
|
1925
1929
|
tags: [setup, onboarding, configuration]
|
|
1926
|
-
date: 2026-
|
|
1930
|
+
date: 2026-09-05
|
|
1927
1931
|
provenance:
|
|
1928
1932
|
introduced_in: "0.22.7"
|
|
1929
1933
|
pr: 51
|
|
1930
1934
|
commit: "a70ae8a5"
|
|
1931
1935
|
issue: null
|
|
1932
1936
|
tests:
|
|
1933
|
-
-
|
|
1937
|
+
- "test/visual/features/setup-wizard.spec.js"
|
|
1934
1938
|
references:
|
|
1935
1939
|
include: "_includes/setup/wizard.html"
|
|
1936
1940
|
scripts:
|
|
1937
1941
|
- "assets/js/setup-wizard.js"
|
|
1942
|
+
styles: ["_sass/components/_setup-wizard.scss"]
|
|
1938
1943
|
layout: "_layouts/setup.html"
|
|
1944
|
+
data: "_data/site_builder.yml"
|
|
1939
1945
|
|
|
1940
1946
|
- id: ZER0-068
|
|
1941
1947
|
title: "Table CSV Copy"
|
|
@@ -2218,7 +2224,7 @@ features:
|
|
|
2218
2224
|
features:
|
|
2219
2225
|
- "Zero-config default: explicit /favicon.ico link on every page (fixes silent 404s and baseurl project sites)"
|
|
2220
2226
|
- "Optional SVG favicon, PNG sizes, apple-touch-icon, and web manifest links"
|
|
2221
|
-
- "theme-color
|
|
2227
|
+
- "scheme-aware theme-color metas tracking --bs-body-bg (light #ffffff / dark #212529), emitted even with no config; favicon.theme_color pins a single value"
|
|
2222
2228
|
|
|
2223
2229
|
- id: ZER0-080
|
|
2224
2230
|
title: "Books Collection — Children's Picture-Book Publishing"
|
|
@@ -2256,3 +2262,280 @@ features:
|
|
|
2256
2262
|
- "Immersive sidebar-free reading surface: storybook serif, responsive type scale, drop cap, plate styling for bare markdown images"
|
|
2257
2263
|
- "illustrations: front matter renders a collapsed prompt colophon — the same list drives OpenAI image generation on consumer sites (drsai)"
|
|
2258
2264
|
- "Demo book The Tales of Zer0 ships with the theme; reference platform: bamr87/drsai with Dodge & Reena as the test book"
|
|
2265
|
+
|
|
2266
|
+
- id: ZER0-081
|
|
2267
|
+
title: "Claude Design System Round-Trip"
|
|
2268
|
+
description: "Design-token layer aligned with the zer0-mistakes Claude Design project: corner-radius, logo-palette, and display-size tokens join _sass/tokens/; a git mirror of the design project lives under _design-system/ (plain-CSS tokens, React component specs from buttons to FABs to post cards to skeletons, foundation cards, website UI kit); and a CI parity check fails when theme and mirror drift"
|
|
2269
|
+
implemented: true
|
|
2270
|
+
version: "1.29.0"
|
|
2271
|
+
link: "/"
|
|
2272
|
+
docs: "https://github.com/bamr87/zer0-mistakes/blob/main/docs/ui/design-system.md"
|
|
2273
|
+
tags: [design-system, tokens, sass, ai, tooling]
|
|
2274
|
+
date: 2026-08-14
|
|
2275
|
+
provenance:
|
|
2276
|
+
introduced_in: "1.29.0"
|
|
2277
|
+
pr: 389
|
|
2278
|
+
commit: "7fc2fe02"
|
|
2279
|
+
issue: null
|
|
2280
|
+
tests:
|
|
2281
|
+
- "test/visual/core/styling.spec.js"
|
|
2282
|
+
- "scripts/design-system-check.rb"
|
|
2283
|
+
references:
|
|
2284
|
+
styles:
|
|
2285
|
+
- "_sass/tokens/_radius.scss"
|
|
2286
|
+
- "_sass/tokens/_index.scss"
|
|
2287
|
+
scripts:
|
|
2288
|
+
- "scripts/design-system-check.rb"
|
|
2289
|
+
design:
|
|
2290
|
+
- "_design-system/components/"
|
|
2291
|
+
- "_design-system/guidelines/"
|
|
2292
|
+
- "_design-system/tokens/"
|
|
2293
|
+
docs: "docs/ui/design-system.md"
|
|
2294
|
+
features:
|
|
2295
|
+
- "--zer0-radius-* corner radii, --zer0-logo-* brand palette, and --zer0-text-display-* fluid hero sizes declared once and consumed by callouts, landing cards, nav, and focus rings"
|
|
2296
|
+
- "_design-system/ mirrors the claude.ai/design project (id e75121c0-9210-42d1-ade3-2c8af9111cbe) so interfaces can be designed in Claude Design and folded back into the theme — contract in _design-system/SYNC.md"
|
|
2297
|
+
- "scripts/design-system-check.rb (core test suite) resolves var() alias chains and fails CI on token drift, plus flags fallback-less var(--zer0-*) references that are never declared"
|
|
2298
|
+
- "Component specs ship the theme's primitives as React twins — Button, Badge, Fab/FabStack, Card, FeatureCard, PostCard, Callout, Skeleton, Input — with foundation cards for colors, type, spacing, motion, layers, and brand (PR 391)"
|
|
2299
|
+
- "No webfonts, Bootstrap-first, seven skins, light+dark — the imported system and the theme now state one identical visual contract"
|
|
2300
|
+
|
|
2301
|
+
- id: ZER0-082
|
|
2302
|
+
title: "Live Design System Pages"
|
|
2303
|
+
description: "The design system published on the site itself: _design-system/ is force-included in the Jekyll build so tokens, styles.css, specimen cards, and component sources get real URLs under /_design-system/, and a /design/ hub page renders the foundation specimens in live iframes, catalogs the component twins, and links the Claude Design page canvas covering all 24 layouts"
|
|
2304
|
+
implemented: true
|
|
2305
|
+
version: "1.29.0"
|
|
2306
|
+
link: "/design/"
|
|
2307
|
+
docs: "https://github.com/bamr87/zer0-mistakes/blob/main/docs/ui/design-system.md"
|
|
2308
|
+
tags: [design-system, tokens, pages, navigation, ui]
|
|
2309
|
+
date: 2026-08-14
|
|
2310
|
+
provenance:
|
|
2311
|
+
introduced_in: "1.29.0"
|
|
2312
|
+
pr: 392
|
|
2313
|
+
commit: "6ac9f77d"
|
|
2314
|
+
issue: null
|
|
2315
|
+
tests:
|
|
2316
|
+
- "test/visual/features/design-hub.spec.js"
|
|
2317
|
+
references:
|
|
2318
|
+
pages:
|
|
2319
|
+
- "pages/_about/design.md"
|
|
2320
|
+
data:
|
|
2321
|
+
- "_data/navigation/main.yml"
|
|
2322
|
+
tests:
|
|
2323
|
+
- "test/visual/features/design-hub.spec.js"
|
|
2324
|
+
config: "_config.yml"
|
|
2325
|
+
features:
|
|
2326
|
+
- "Publishing is one config line — include: [_design-system] — so the mirror's plain-CSS tokens double as a hosted stylesheet any prototype can link"
|
|
2327
|
+
- "/design/ foundations gallery renders the actual specimen cards in iframes against the published tokens — living documentation, never screenshots"
|
|
2328
|
+
- "Component-twin catalog links every React spec (.jsx/.d.ts/.prompt.md) served raw from the mirror; interactive rendering stays in Claude Design"
|
|
2329
|
+
- "Page canvas: every layout, nav pattern, and chrome surface recreated as a Claude Design presentation, linked from the hub with a screen-to-repo-file map"
|
|
2330
|
+
|
|
2331
|
+
# ============================================================================
|
|
2332
|
+
# READER ENGAGEMENT (v1.29+)
|
|
2333
|
+
# ============================================================================
|
|
2334
|
+
|
|
2335
|
+
- id: ZER0-083
|
|
2336
|
+
title: "Page View Counter"
|
|
2337
|
+
description: "Per-page view tracking with the count shown in the article meta row — a local-first provider that needs no server, or an HTTP counter endpoint, both gated by DNT, GPC, and consent"
|
|
2338
|
+
implemented: true
|
|
2339
|
+
version: "1.29.0"
|
|
2340
|
+
link: "/"
|
|
2341
|
+
docs: "https://github.com/bamr87/zer0-mistakes/blob/main/docs/features/page-views.md"
|
|
2342
|
+
tags: [analytics, privacy, engagement, metrics, ui]
|
|
2343
|
+
date: 2026-08-23
|
|
2344
|
+
provenance:
|
|
2345
|
+
introduced_in: "1.29.0"
|
|
2346
|
+
pr: 413
|
|
2347
|
+
commit: "6ca4961b"
|
|
2348
|
+
issue: null
|
|
2349
|
+
tests:
|
|
2350
|
+
- "test/visual/features/page-views.spec.js"
|
|
2351
|
+
references:
|
|
2352
|
+
layouts:
|
|
2353
|
+
- "_layouts/article.html"
|
|
2354
|
+
includes:
|
|
2355
|
+
- "_includes/components/page-views.html"
|
|
2356
|
+
- "_includes/components/page-views-init.html"
|
|
2357
|
+
- "_includes/core/head.html"
|
|
2358
|
+
scripts:
|
|
2359
|
+
- "assets/js/page-views.js"
|
|
2360
|
+
styles:
|
|
2361
|
+
- "_sass/components/_page-views.scss"
|
|
2362
|
+
tests:
|
|
2363
|
+
- "test/visual/features/page-views.spec.js"
|
|
2364
|
+
config: "_config.yml"
|
|
2365
|
+
docs: "docs/features/page-views.md"
|
|
2366
|
+
features:
|
|
2367
|
+
- "Two providers: 'local' (default) keeps counts in the visitor's localStorage — no server, no network, GitHub-Pages safe; 'remote' reads a counter endpoint the site owns ({path} substitution, configurable method, dotted count_key)"
|
|
2368
|
+
- "Privacy gates mirror the posthog block (DNT, Global Privacy Control, optional cookie-consent 'analytics' tie-in) and suppress RECORDING only — a view blocked pending consent is recorded when consent arrives"
|
|
2369
|
+
- "dedupe: session counts one view per page per browser session, so a reload cannot inflate the number"
|
|
2370
|
+
- "The badge ships hidden and is revealed only once a count exists — no '0 views' flash — and carries its own leading separator so a hidden badge leaves no dangling bullet in the meta row"
|
|
2371
|
+
- "Every storage touch is probed and wrapped: private mode, blocked cookies, a corrupt payload, or an exceeded quota degrade to 'no count' instead of throwing"
|
|
2372
|
+
- "window.zer0PageViews (get/all/refresh/reset) plus a 'zer0:page-views' CustomEvent let a site build on the count without polling"
|
|
2373
|
+
- id: ZER0-084
|
|
2374
|
+
title: "Cookbook & Recipes Collection"
|
|
2375
|
+
description: "A `recipes` collection whose structured front matter (ingredients, steps, yield, times, ratio_basis) renders as a working recipe page: a fact bar, a serving scaler, an ingredient checklist, a numbered method, a build-time baker's-percentage table, and schema.org Recipe JSON-LD — with client-side scaling and US/metric conversion (volume↔weight via an ingredient density table) layered on as progressive enhancement"
|
|
2376
|
+
implemented: true
|
|
2377
|
+
version: "1.29.0"
|
|
2378
|
+
link: "/recipes/"
|
|
2379
|
+
docs: "/docs/features/cookbook-collection/"
|
|
2380
|
+
tags: [recipes, cookbook, collections, layouts, unit-conversion, structured-data]
|
|
2381
|
+
date: 2026-08-23
|
|
2382
|
+
provenance:
|
|
2383
|
+
introduced_in: "1.29.0"
|
|
2384
|
+
pr: null
|
|
2385
|
+
commit: "45354f34"
|
|
2386
|
+
issue: null
|
|
2387
|
+
tests:
|
|
2388
|
+
- "test/test_core.sh"
|
|
2389
|
+
references:
|
|
2390
|
+
layouts:
|
|
2391
|
+
- "_layouts/recipe.html"
|
|
2392
|
+
- "_layouts/cookbook.html"
|
|
2393
|
+
includes:
|
|
2394
|
+
- "_includes/components/recipe-index.html"
|
|
2395
|
+
- "_includes/components/recipe-card.html"
|
|
2396
|
+
- "_includes/components/recipe-meta.html"
|
|
2397
|
+
- "_includes/components/recipe-scaler.html"
|
|
2398
|
+
- "_includes/components/recipe-ingredients.html"
|
|
2399
|
+
- "_includes/components/recipe-steps.html"
|
|
2400
|
+
- "_includes/components/recipe-ratio.html"
|
|
2401
|
+
- "_includes/components/recipe-nutrition.html"
|
|
2402
|
+
- "_includes/components/recipe-qty.html"
|
|
2403
|
+
- "_includes/components/recipe-temp.html"
|
|
2404
|
+
- "_includes/components/recipe-grams.html"
|
|
2405
|
+
- "_includes/components/recipe-duration.html"
|
|
2406
|
+
styles: ["_sass/components/_recipe.scss"]
|
|
2407
|
+
scripts: ["assets/js/recipe-scaler.js"]
|
|
2408
|
+
data:
|
|
2409
|
+
- "_data/recipe_courses.yml"
|
|
2410
|
+
- "_data/ingredient_densities.yml"
|
|
2411
|
+
pages:
|
|
2412
|
+
- "pages/_recipes/index.md"
|
|
2413
|
+
- "pages/_docs/features/cookbook-collection.md"
|
|
2414
|
+
config: "_config.yml"
|
|
2415
|
+
components:
|
|
2416
|
+
- "Serving scaler — stepper, ½×/1×/2×/3× presets, ?servings= and ?scale= links, per-recipe scale remembered in localStorage"
|
|
2417
|
+
- "Unit switch — as written / metric / US, rewriting quantities, units and oven temperatures in place"
|
|
2418
|
+
- "Volume↔weight conversion driven by _data/ingredient_densities.yml, overridable per ingredient with grams_per_cup"
|
|
2419
|
+
- "Baker's-percentage ratio table computed at build time, so percentages are correct with JavaScript disabled"
|
|
2420
|
+
- "Progressive enhancement: quantities render as authored by Jekyll; the control bar stays hidden until the script reveals it"
|
|
2421
|
+
|
|
2422
|
+
- id: ZER0-085
|
|
2423
|
+
title: "Visual Evidence Autogen"
|
|
2424
|
+
description: "CI produces a UI pull request's visual artifacts instead of only verifying them: before/after evidence from the PR's generator or a generic base-vs-head render, and 9-skin pixel baselines refreshed only when the reviewer agent judges the diff to be the change the PR describes"
|
|
2425
|
+
implemented: true
|
|
2426
|
+
version: "1.30.0"
|
|
2427
|
+
link: "/"
|
|
2428
|
+
docs: "/docs/development/testing/"
|
|
2429
|
+
tags: [ci-cd, testing, automation, ai, quality]
|
|
2430
|
+
date: 2026-09-05
|
|
2431
|
+
provenance:
|
|
2432
|
+
introduced_in: "1.30.0"
|
|
2433
|
+
pr: 462
|
|
2434
|
+
commit: "d0bfc0d1"
|
|
2435
|
+
issue: null
|
|
2436
|
+
tests:
|
|
2437
|
+
- "scripts/ci/test_visual_evidence_autogen.py"
|
|
2438
|
+
references:
|
|
2439
|
+
workflow: ".github/workflows/visual-evidence-autogen.yml"
|
|
2440
|
+
scripts:
|
|
2441
|
+
- "scripts/ci/visual_evidence_autogen.py"
|
|
2442
|
+
- "test/visual/pr-evidence.mjs"
|
|
2443
|
+
- "test/visual/snapshot-diff-montage.mjs"
|
|
2444
|
+
- "test/update-snapshots.sh"
|
|
2445
|
+
agent: ".claude/agents/visual-evidence-reviewer.md"
|
|
2446
|
+
docs: "docs/systems/continuous-evolution.md"
|
|
2447
|
+
features:
|
|
2448
|
+
- "Runs on every same-repo PR event: plans from the diff, brings Jekyll up with docker compose, and renders inside the same jammy Playwright image the snapshot gate compares with"
|
|
2449
|
+
- "Evidence from the PR's own test/visual/*-evidence.mjs generators, or from the generic base-vs-head generator that renders the base branch and the head side by side — no hand-written unfixCss needed"
|
|
2450
|
+
- "Pixel baselines are refreshed only on an 'intentional' verdict from the visual-evidence-reviewer agent, which views the expected | actual | diff montage; a code step disposes, the model only proposes (#417)"
|
|
2451
|
+
- "Loop guard on its own [visual-autogen] commits, a three-commit budget per PR, per-folder manifests so author-made evidence is never overwritten, kill switch VISUAL_EVIDENCE_AUTOGEN_ENABLED=false, and the evidence gate's opt-out labels"
|
|
2452
|
+
- "One sticky PR comment with the montages and the verdict; render output uploaded as an artifact on every run; the evidence gate now requires generated proof and ci-self-repair hands a red Visual Snapshots job to this lane"
|
|
2453
|
+
|
|
2454
|
+
- id: ZER0-086
|
|
2455
|
+
title: "Claude-Guided Site Builder"
|
|
2456
|
+
description: "An embedded Claude session that rides alongside the setup wizard: it sees every answer, fills in the forms, checks the machine, reads the theme's real source, writes the generated project to disk and starts Docker — through the local dev proxy, with a confirmation card before every action"
|
|
2457
|
+
implemented: true
|
|
2458
|
+
version: "1.30.0"
|
|
2459
|
+
link: "/setup/"
|
|
2460
|
+
docs: "/docs/features/site-builder/"
|
|
2461
|
+
tags: [ai, claude, grok, setup, onboarding, docker, proxy]
|
|
2462
|
+
date: 2026-09-07
|
|
2463
|
+
provenance:
|
|
2464
|
+
introduced_in: "1.30.0"
|
|
2465
|
+
pr: null
|
|
2466
|
+
commit: "331ae16c"
|
|
2467
|
+
issue: null
|
|
2468
|
+
tests:
|
|
2469
|
+
- "test/visual/features/setup-wizard.spec.js"
|
|
2470
|
+
- "test/test_wizard_store.mjs"
|
|
2471
|
+
references:
|
|
2472
|
+
includes:
|
|
2473
|
+
- "_includes/setup/wizard.html"
|
|
2474
|
+
- "_includes/setup/claude-session.html"
|
|
2475
|
+
- "_includes/setup/prereq-checklist.html"
|
|
2476
|
+
scripts:
|
|
2477
|
+
- "assets/js/site-builder.js"
|
|
2478
|
+
- "templates/deploy/chat-proxy/wizard-store.mjs"
|
|
2479
|
+
- "templates/deploy/chat-proxy/dev-proxy.mjs"
|
|
2480
|
+
- "test/visual/site-builder-walkthrough.mjs"
|
|
2481
|
+
- "test/visual/site-builder-scenarios.mjs"
|
|
2482
|
+
data: "_data/site_builder.yml"
|
|
2483
|
+
config: "_config.yml"
|
|
2484
|
+
instructions: ".github/instructions/ai-chat.instructions.md"
|
|
2485
|
+
pages:
|
|
2486
|
+
- "pages/_quickstart/site-builder.md"
|
|
2487
|
+
- "pages/_docs/features/site-builder.md"
|
|
2488
|
+
components:
|
|
2489
|
+
- "Connect step — detects the dev proxy, shows the three commands to connect (claude setup-token → .env → node --env-file), re-checks every 15 s"
|
|
2490
|
+
- "Prerequisites — live Docker/Git/gh/VS Code/Node/Claude CLI checks through a fixed command table, per-OS install commands from machine-setup, manual toggles offline"
|
|
2491
|
+
- "Tools — get/set wizard fields, go to step, get/override generated files, read theme source, list theme dirs, search the docs index, resolve target, write project, docker compose up/ps/logs/down, check the site is live"
|
|
2492
|
+
- "Context propagation — the whole wizard state, field schema and generated-file list are in the system prompt on every turn; the form is the single source of truth"
|
|
2493
|
+
- "Safety — proxy-only (no credential in the page), escape-first rendering, confirmation cards for every mutation, scaffold confined to a new folder beside the theme"
|
|
2494
|
+
- "Validation — test/visual/site-builder-walkthrough.mjs samples a random brief per site type (site-builder-scenarios.mjs), drives the wizard on video, builds the site with Docker and asserts routes/title/skin; replayable by seed"
|
|
2495
|
+
- "Site plan — plan_schema in _data/site_builder.yml (JSON-Schema subset, validated in the browser) describes landing templates/sections, navigation style + sidebar, palette/font/radius overrides and example pages; set_site_plan applies it behind a confirmation card and the generators emit index.md + _data/landing.yml, navigation data, assets/css/user-overrides.css + _includes/custom/head.html and one file per planned page"
|
|
2496
|
+
- "Providers, bring-your-own token, open sessions, project editing and image generation — see ZER0-087"
|
|
2497
|
+
|
|
2498
|
+
- id: ZER0-087
|
|
2499
|
+
title: "Bring-Your-Own AI Provider (Claude or Grok) and Open Site Builder Sessions"
|
|
2500
|
+
description: "The Site Builder and chat proxy answer with Claude (Anthropic) or Grok (xAI): users paste their own token on the Connect step, pick a model and an image renderer, and run a guided or open session that can also modify an existing site file by file and render images with Grok Imagine"
|
|
2501
|
+
implemented: true
|
|
2502
|
+
version: "1.30.0"
|
|
2503
|
+
link: "/setup/"
|
|
2504
|
+
docs: "/docs/features/site-builder/"
|
|
2505
|
+
tags: [ai, claude, grok, xai, setup, onboarding, proxy, images]
|
|
2506
|
+
date: 2026-09-07
|
|
2507
|
+
provenance:
|
|
2508
|
+
introduced_in: "1.30.0"
|
|
2509
|
+
pr: null
|
|
2510
|
+
commit: "b43a2bf6"
|
|
2511
|
+
issue: null
|
|
2512
|
+
tests:
|
|
2513
|
+
- "test/test_providers.mjs"
|
|
2514
|
+
- "test/test_wizard_store.mjs"
|
|
2515
|
+
- "test/visual/features/setup-wizard.spec.js"
|
|
2516
|
+
references:
|
|
2517
|
+
includes:
|
|
2518
|
+
- "_includes/setup/wizard.html"
|
|
2519
|
+
- "_includes/setup/claude-session.html"
|
|
2520
|
+
scripts:
|
|
2521
|
+
- "assets/js/site-builder.js"
|
|
2522
|
+
- "assets/js/setup-wizard.js"
|
|
2523
|
+
- "templates/deploy/chat-proxy/providers.js"
|
|
2524
|
+
- "templates/deploy/chat-proxy/credential-store.mjs"
|
|
2525
|
+
- "templates/deploy/chat-proxy/worker.js"
|
|
2526
|
+
- "templates/deploy/chat-proxy/dev-proxy.mjs"
|
|
2527
|
+
- "templates/deploy/chat-proxy/wizard-store.mjs"
|
|
2528
|
+
- "test/visual/site-builder-providers-evidence.mjs"
|
|
2529
|
+
data: "_data/site_builder.yml"
|
|
2530
|
+
config: "_config.yml"
|
|
2531
|
+
instructions: ".github/instructions/ai-chat.instructions.md"
|
|
2532
|
+
pages:
|
|
2533
|
+
- "pages/_docs/features/site-builder.md"
|
|
2534
|
+
- "pages/_quickstart/site-builder.md"
|
|
2535
|
+
components:
|
|
2536
|
+
- "Provider layer (providers.js, Worker + Node) — Anthropic Messages dialect translated to and from xAI's OpenAI-compatible chat API, streaming tool calls included, so ai-chat.js, site-builder.js and the feedback triage are unchanged; CHAT_PROVIDER / CHAT_MODEL / XAI_CHAT_MODEL pinned server-side, client models accepted only from the selected provider's family"
|
|
2537
|
+
- "Connect step — Claude and Grok cards with masked key state, a password token field posted once to the localhost proxy (memory only, probed upstream, optional .env save with mode 600, Forget), model catalog, image renderer (Grok Imagine / OpenAI Images) and guided vs open session; the dev proxy starts without a credential"
|
|
2538
|
+
- "Open session — chat-driven, any order, up to 24 tool rounds per turn with a Stop button; interrupted tool calls get synthetic results so the history stays valid"
|
|
2539
|
+
- "Project session — list/open an existing site under WIZARD_TARGET_ROOT, tree/read, write/edit (unique snippet)/delete text files behind confirmation cards, git status/diff/log/init, jekyll build inside the container"
|
|
2540
|
+
- "Image generation — generate_image renders with grok-imagine-image-2.0 (or gpt-image-2) into assets/ (PNG/JPEG/WebP sniffed, 8 MB cap) with a thumbnail card; generated sites carry ai_chat.provider, preview_images and the matching .env.example keys"
|
|
2541
|
+
- "Validation — test/test_providers.mjs (mock xAI + Anthropic upstreams), test/test_wizard_store.mjs (project + asset rules), setup-wizard.spec.js (mocked proxy: connect as Grok, token never stored, open mode, existing sites), evidence in test/visual/evidence/site-builder-providers/"
|