Repository navigation
Expand file tree
/
Copy path_config.yml
More file actions
1082 lines (977 loc) · 48.3 KB
/
Copy path_config.yml
File metadata and controls
1082 lines (977 loc) · 48.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# Welcome to the configuration file for Jekyll.
# Full docs at: http://jekyllrb.com/docs/configuration/
# YAML docs at: https://yaml.org/spec/1.2.2/
# ---------------------------------------------------------------------------------
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server.
#
# If you need help with YAML syntax, here are some quick references for you:
# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
# https://learnxinyminutes.com/docs/yaml/
#
# You can find config options at: https://jekyllrb.com/docs/configuration/options/
#
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
# Site Settings ###################################################################
site_configured : true # Tells the theme this site has been personalised
founder : "Amr Abdel-Motaleb"
remote_theme : "bamr87/zer0-mistakes"
gem : &gem "jekyll-theme-zer0"
# theme : "jekyll-theme-zer0"
## Github Information
github_user : &github_user "bamr87"
repository_name : &github_repository "zer0-mistakes"
repository : [*github_user, "/", *github_repository] # GitHub username/repo-name
local_repo : &local_repo "zer0-mistakes"
branch : &branch "main"
repo_map : "/sitemap/"
portfolio : &portfolio [*github_user, '.', 'github.io']
## Site Information ---------------------------------------------------------------
# Emit the SoftwareApplication JSON-LD block (_includes/content/jsonld-software.html)
# on the homepage. That payload describes THE THEME — its RubyGems URL, GitHub
# repo, MIT licence, feature list and author — so only the theme's own site may
# truthfully claim it. Consumers must leave this off; on their homepage it would
# assert that their site is this Ruby gem.
jsonld_software_application: true
title : &title "zer0-mistakes"
title_url : "/"
title_icon : "robot"
subtitle : ""
subtitle_url : "localhost"
subtitle_icon : "code"
title_separator : "|" # Appears in the web browser tab name
domain : &domain "zer0-mistakes"
domain_ext : &domain_ext "com"
baseurl : &baseurl "" # the subpath of your site, e.g. /blog - Use this if you want this whole repo to be a domain branch
url_test : &url_test [ 'https', '://', *github_user, '.', *domain, '.', *domain_ext ] # the base hostname & protocol for your site, e.g. http://example.com
domain_url : &domain_url [ 'https', '://', *domain, '.', *domain_ext ]
github_io_url : &github_io_url [ 'https', '://', *github_user, '.', *domain, '.', *domain_ext, '/', *github_repository ]
url : &url https://zer0-mistakes.com
public_folder : assets # path to the public folder
port : 4000 # Jekyll Serve Dev port
dg_port : 4001 # TODO: Doppelganger site. Use this if you want to switch between parallel deployments
og_image : '/assets/images/wizard-on-journey.png'
### Owner Information -------------------------------------------------------------
name : &name "Amr"
email : "amr@zer0-mistakes.com"
description : >- # this means to ignore newlines until the next variable
"Jekyll and Bootstrap 5 theme for perfectionists.
Step-by-step instructions to build your blog, portfolio,
and documentation site with no mistakes, unless you're a n00b."
level : 'n00b'
## Maintainer Information----------------------------------------------------------
maintainers:
- name: *name
profile: ["https://github.com", "/", *github_user]
- name: "Vacant"
profile: "/github.com"
## Personalization ----------------------------------------------------------------
locale : "en-US"
home_dir : &home '/Users/bamr87/'
local_git : [ *home, 'github' ]
logo : /assets/images/gravatar-small.png # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png"
logo_link : [ *url, *baseurl ] # URL to link the logo to, e.g. "/"
teaser : '/assets/images/favicon_gpt_computer_retro.png' # path of fallback teaser image, e.g. "/assets/images/500x300.png"
info_banner : '/assets/images/info-banner-mountain-wizard.png' # path of fallback teaser image, e.g. "/assets/images/500x300.png"
# Favicon / browser identity — rendered by _includes/core/favicon.html.
# All keys optional; with no block at all the theme still links /favicon.ico
# AND emits both theme-color tags.
#
# theme-color drives mobile browser chrome, so it tracks the page SURFACE
# (--bs-body-bg), NOT theme_color.main below — that is the brand accent, and
# pointing chrome at it gave a dark-first site a bright blue address bar (#281).
# Defaults: light "#ffffff", dark "#212529" (Bootstrap 5.3.3's own surfaces).
#
# NOTE: Hex codes MUST be quoted — unquoted `#ffffff` is parsed as a YAML
# comment and the key resolves to null.
favicon:
ico : /favicon.ico
apple_touch : /assets/images/favicon_gpt_computer_retro.png
# theme_color_light : "#ffffff" # light-scheme browser chrome
# theme_color_dark : "#212529" # dark-scheme browser chrome
# theme_color : "#0d1117" # pin ONE colour for both schemes (wins over the pair)
## Preview Image Generation (AI-powered) #####################################
# Settings for automatic preview image generation using AI
# Used by: the zer0-image-generator gem (`bundle exec jekyll preview-images`,
# see Gemfile) and the theme's in-repo ancestor engine
# (scripts/generate-preview-images.sh → scripts/lib/preview_generator.py).
# Every key below is one the gem documents (its README § Configuration).
#
# Claude ORCHESTRATES, an image model RENDERS: Claude analyzes the article and
# writes the art-direction brief (prompt_engine: claude), the provider below
# renders it, then Claude reviews the image and may request one refined
# regeneration (review_engine: claude). Claude credential: CLAUDE_CODE_OAUTH_TOKEN
# (`claude setup-token`), ANTHROPIC_AUTH_TOKEN, ANTHROPIC_API_KEY, or a
# logged-in `claude` CLI — without one, orchestration degrades to the template
# prompt with no review. Renderers (openai, xai, stability, gemini) need their
# own key; `local` needs none (deterministic SVG, skips orchestration).
#
# Per-author override: a post's `author:` may point at an entry in
# _data/authors.yml that defines a `preview:` block (style, style_modifiers,
# size, quality, model). Those values WIN over the settings below for that
# post's banner — giving each AI author persona (e.g. cassandra, vega) a
# distinct art style. See pages/_docs/customization/author-profiles.md § 6.
preview_images:
enabled : true
provider : 'openai' # renderer: openai, xai, stability, gemini, local
model : 'gpt-image-2' # renderer model; another vendor family falls back to the provider default
size : '1536x1024' # Landscape banners; raster vendors adapt per model (DALL-E 3: 1792x1024)
quality : 'auto' # auto for GPT Image models; standard/hd for DALL-E 3
style : 'retro pixel art, 8-bit video game aesthetic, vibrant colors, nostalgic, clean pixel graphics'
output_dir : 'assets/images/previews'
# collections: explicit — the in-repo engine's default; the gem's is [posts]
collections : [posts, quickstart, docs]
# Claude orchestration: 'claude' analyzes the article into the art brief
# ('template' = built-in prompt), and reviews the rendered image with vision
# ('none' disables). claude_model overrides the orchestration model.
prompt_engine : 'claude'
review_engine : 'claude'
# claude_model : 'claude-opus-5-5'
# Path normalization: allows omitting /assets/ prefix in frontmatter
# e.g., preview: /images/previews/my-image.png becomes /assets/images/previews/my-image.png
assets_prefix : '/assets' # Prefix to prepend to relative preview paths
auto_prefix : true # Auto-add assets_prefix if path doesn't start with it
# Additional style modifiers applied to all prompts
style_modifiers : 'pixelated, retro gaming style, CRT screen glow effect, limited color palette'
# Content statistics
# _data/content_statistics.yml is committed and read directly by templates
# (site.data.content_statistics). The _plugins/content_statistics_generator.rb
# hook re-derives it from a full content scan on EVERY `jekyll build` (~12x per
# CI run) — pure waste when content hasn't changed, plus it dirties a tracked
# file. Keep it off by default; refresh explicitly with `rake stats:generate`
# (or _data/generate_statistics.sh) when content changes.
content_statistics:
auto_generate : false
breadcrumbs : true # true, false (default)
words_per_minute : 200
_posts_file_structure : "year-month-day-title.md"
# UI navigation behaviour --------------------------------------------------
# Optional consolidation of the mobile sidebar + main-menu offcanvases into
# a single tabbed drawer (Browse / Menu / Settings). Default false to avoid
# disrupting existing forks. See _includes/navigation/unified-drawer.html.
navigation:
unified_mobile_drawer : false # true to opt into the single-drawer pattern
# News layouts (news.html / section.html) ----------------------------------
# Every key optional; the layouts also work with NO _data/navigation/posts.yml
# (sections then derive from site.categories). See _layouts/news.html header.
# news:
# category_base : "/news/" # base path of per-category section pages (e.g. "/categories/")
# index_url : "/news/" # the news homepage (section breadcrumbs / back-links)
# hero : true # false = no latest-post hero fallback when nothing is breaking/featured
# archives_url : "" # archives page to deep-link months to (auto-detects /archives/; unlinked otherwise)
# newsletter:
# enabled : true # false hides the subscribe band
# endpoint : "" # form POST target; without one a mailto: on site.email is used
# heading : "Stay Updated"
# lead : "Subscribe to get the latest news and updates delivered to your inbox."
# Left sidebar defaults -----------------------------------------------------
# Site-wide defaults for the docs sidebar panel. Pages override via the
# `sidebar:` front-matter hash; collections via `sidebar:` metadata under
# `collections:` below. Resolution: page → collection → site (this block).
# Full reference: /docs/features/sidebar-navigation/
sidebar:
title : "Browse docs" # panel heading text
icon : "bi-journal-bookmark" # Bootstrap Icons class for the heading
# nav : auto # optional site-wide fallback nav mode for pages
# # that set none. Modes: auto | collection |
# # categories | tags | <_data/navigation/*.yml name>
# Opt-in user override hooks. When true, the theme loads:
# - assets/css/user-overrides.css (after main.css, wins over theme rules)
# - assets/js/user-overrides.js (after the theme JS bundle)
# Ship these files in your fork; they are not bundled with the theme.
user_overrides : false
# Default color mode for new visitors (before any localStorage preference is set).
# Values: dark | light | auto
# dark — always start in dark mode (Bootstrap data-bs-theme="dark")
# light — always start in light mode (Bootstrap data-bs-theme="light")
# auto — follow the visitor's OS/browser prefers-color-scheme (default)
# The user can still override this at any time with the Appearance panel.
# An inline script in <head> applies the correct mode before CSS loads, preventing FOUC.
color_mode_default : auto
# Pin the color mode site-wide. When true, color_mode_default wins
# unconditionally: visitor preference (localStorage) and the OS scheme are
# ignored, and the light/dark/auto switcher is removed from the UI. For
# brand-locked sites that are designed for exactly one mode.
color_mode_lock : false
# Runtime Appearance panel inside the Settings offcanvas (Track 6).
# Adds light/dark/auto color-mode buttons + a primary-color picker that
# writes to localStorage["zer0-appearance"] and updates --zer0-color-primary
# without a page reload. Falls back gracefully when disabled.
appearance_panel : true
## Identity #####################################################################
author:
key : "bamr87" # the _data/authors.yml entry bylines and E-E-A-T cards use by default
name : *name # *name is a YAML reference pointing to the &anchor earlier
avatar : "/assets/images/gravatar-small.png"
email_hash : &email_hash '71d7a4fc9712df49e13d606e620f89c7' # https://en.gravatar.com/site/check/{ site.email }
gravatar : [ 'https://s.gravatar.com/avatar/', *email_hash, '?s=80' ]
bio : "IT nerd trying to be an IT hero"
location : "Denver, CO"
twitter_username : "bamr87"
github_username : *github_user
## Site Analytics #############################################################
google_analytics : 'G-ZBDKNMC168'
# Google Tag Manager container for THIS site. The GTM includes emit nothing
# when this is unset, so consumer sites never inherit this container.
google_tag_manager : 'GTM-NN8P7RZ'
# PostHog Analytics Configuration
# https://posthog.com/docs/libraries/js
posthog:
enabled : true
api_key : 'phc_RRFmtqxRUI4XFDoI4KXUYMbTzPvhiu4A07qdSsAaXgg'
api_host : 'https://us.i.posthog.com'
person_profiles : 'identified_only' # Options: 'always', 'identified_only', 'never'
autocapture : true # Automatically capture clicks, form submissions, etc.
capture_pageview : true # Track page views
capture_pageleave : true # Track when users leave pages
session_recording : false # Enable session recordings (privacy consideration)
disable_cookie : false # Set to true for cookieless tracking
respect_dnt : true # Respect Do Not Track browser setting
cross_subdomain_cookie : false # Enable if you have multiple subdomains
secure_cookie : true # Use secure cookies in production
persistence : 'localStorage+cookie' # Options: 'localStorage+cookie', 'cookie', 'memory'
custom_events:
track_downloads : true # Track PDF, ZIP, etc. downloads
track_external_links : true # Track clicks to external websites
track_search : true # Track search queries
track_scroll_depth : true # Track how far users scroll
privacy:
mask_all_text : false # Mask all text in session recordings
mask_all_inputs : true # Mask form inputs in session recordings
ip_anonymization : false # Anonymize IP addresses
respect_gpc : true # Honor the Global Privacy Control signal (like DNT; a legal signal under CCPA/CPRA)
require_consent : false # true = load nothing (no PostHog or Google Analytics request, no cookies) until the
# visitor accepts the "analytics" category in the theme's cookie-consent banner;
# both load on acceptance without a reload. GA follows this flag unless
# `google_analytics_require_consent` is set.
geoip_disable : false # true = stop PostHog resolving IP → location on every event
# Page Views - Per-page view counter ##############################################
# Tracks a view for the page being read and displays the count in the article
# meta row (components/page-views.html; badge markup, behaviour in
# assets/js/page-views.js). Privacy gates mirror the posthog block above.
#
# Providers:
# local Counts live in THIS visitor's localStorage. No server, no network,
# GitHub-Pages safe — the number is "how often you opened this page".
# The zero-config default.
# remote Counts come from an HTTP counter endpoint you control (the chat
# proxy, a Cloudflare/Netlify function, CounterAPI, …). The endpoint
# is the source of truth; the theme only asks it for a number.
page_views:
enabled : true # Master switch for tracking + display
provider : 'local' # 'local' (localStorage) | 'remote' (HTTP endpoint)
track : true # false = display known counts, never record new ones
dedupe : 'session' # 'session' = one view per page per browser session
# 'never' = count every page load
max_entries : 500 # Cap on locally stored paths (oldest evicted first)
label_one : 'view' # Singular label rendered next to the count
label_other : 'views' # Plural label
# Privacy — these suppress RECORDING only; an already-known count still renders
respect_dnt : true # Honor the Do Not Track browser setting
respect_gpc : true # Honor the Global Privacy Control signal
require_consent : false # true = record nothing until the visitor accepts the
# "analytics" category in the cookie-consent banner
# Remote provider only (ignored when provider is 'local')
endpoint : '' # Counter URL; '{path}' is substituted, otherwise
# the page path is appended as ?path=…
method : 'POST' # HTTP method used to record a view
count_key : 'views' # Key holding the number in the JSON response
# (dotted paths allowed, e.g. 'data.views')
fallback_local : false # true = fall back to the local counter when the
# endpoint is unreachable
# Nanobar - Page Loading Progress Bar #############################################
# Visual loading indicator shown on every page load.
# Library: https://github.com/jacoborus/nanobar
nanobar:
enabled : true # Master switch — set false to disable entirely
# Visual styling (any valid CSS values; CSS variables / var() are supported)
color : "var(--bs-primary)" # Bar (progress) color
background : "transparent" # Track background behind the bar
height : "3px" # Bar thickness (e.g. 2px, 4px, 0.25rem)
# Placement
position : "navbar" # top | bottom | navbar (under header)
z_index : 9999 # Stacking order
# Loading simulation — percentages applied in order on DOMContentLoaded.
# With step_delay_ms = 0 the bar fills instantly and is essentially invisible
# on fast pages. Increase to slow / make the animation perceivable.
steps : [20, 55, 85, 100]
step_delay_ms : 180 # Delay between steps in ms (0 = instant burst)
# Advanced (rarely needs changing)
classname : "nanobar" # Class added to the injected element
id : "top-progress-bar" # DOM id of the injected element
target : "" # CSS selector to mount inside; "" = fixed to viewport
## AI Chat Configuration #####################################################
# Frontend chatbot that provides AI-powered assistance with page context
# The API key should be stored in GitHub secrets and injected at build time
# via a config overlay (e.g., --config _config.yml,_config_secrets.yml)
#
# Security Note: For production use, consider routing requests through a
# server-side proxy to avoid exposing the API key in client-side code.
ai_chat:
enabled : true
provider : 'anthropic' # anthropic (Claude) | xai (Grok) — the proxy translates for xAI; its CHAT_PROVIDER wins
auth_mode : 'proxy' # 'proxy' (recommended) or 'direct'
proxy_ready : false # Set true only when your proxy endpoint is deployed
model : 'claude-opus-5-5' # Claude model to use
api_key : '' # Direct mode only. Leave empty in source. Inject at build time:
# 1. Store as GitHub secret: ANTHROPIC_API_KEY
# 2. In CI, create _config_secrets.yml with the key
# 3. Build: jekyll build --config _config.yml,_config_secrets.yml
endpoint : '/api/chat' # Proxy endpoint (same-origin) for production safety.
# Direct mode talks to https://api.anthropic.com/v1/messages
anthropic_version : '2023-06-01' # Anthropic API version header
max_tokens : 1024 # Max response length
strict_context : true # Ground answers to current page context only
out_of_scope_message : "I can only answer from the content on this page."
system_prompt : >-
You are a helpful assistant for the Zer0-Mistakes website,
a Jekyll theme and developer blog. Answer questions about the
current page content and help users navigate the site.
Be concise and friendly.
welcome_message : "Hi! I'm the Zer0 assistant. Ask about this page, report a problem, or suggest an improvement."
placeholder : "Ask about this page..."
context_max_length : 2000 # Max chars of page content sent as context
icon : 'bi-robot' # Bootstrap icon for chat button
local_edit : false # DEV ONLY: let the assistant write the current page's
# source file via the dev proxy (never enable in production)
local_edit_endpoint : '/api/page' # dev proxy base for reading/writing the local source file
github: # GitHub actions exposed to the assistant (tool use)
enabled : true # Offer issue/PR tools in the chat
mode : 'url' # 'url' = pre-filled github.com forms (no token anywhere);
# 'proxy' = real issues + PRs via the proxy's GitHub routes
# (see templates/deploy/chat-proxy/)
endpoint : '/api/github' # Proxy base path for GitHub actions (proxy mode)
base_branch : 'main' # Branch sources are read from / PRs are based on
default_labels : ['from-chat'] # Labels added to issues created from the chat
pr_branch_prefix : 'chat/' # Prefix for PR branches created by the proxy
## Page Feedback — "Improve this page" capture #################################
# Runtime capture widget: _includes/components/page-feedback.html +
# assets/js/page-feedback.js. Turns what a reader is looking at into a
# well-formed GitHub issue — request type + description + live page context +
# captured console/error logs — filed with labels that actually exist.
#
# Two layers:
# - Base (always on, no token, GitHub Pages-safe): opens a pre-filled
# github.com/issues/new form. Works on any fork of the theme.
# - AI enrichment (optional): when the chat proxy is deployed
# (ai_chat.proxy_ready), the capture is sent to Claude — via Claude Code
# OAuth, server-side — to clarify, vet, prioritize, and recommend before
# the issue is filed. Reuses templates/deploy/chat-proxy/.
page_feedback:
enabled : true # Master switch for the widget
fab : true # Show the global floating feedback button
fab_icon : 'bi-megaphone' # Bootstrap icon for the FAB
fab_label : 'Improve this page'
capture_logs : true # Capture console/error logs (previewed before submit)
log_limit : 40 # Max console/error entries kept in the ring buffer
mode : 'url' # 'url' = pre-filled github.com form (no token; default)
# 'proxy' = file real issues via the chat proxy
endpoint : '/api/feedback' # Proxy triage/analysis route (AI layer)
issue_endpoint : '/api/github/issue' # Proxy real-issue route (proxy mode)
default_labels : ['page-feedback'] # Marker label added to every issue (MUST exist in repo)
assignee : 'copilot' # Assignee for agent-actionable types ('' to disable)
ai:
enabled : true # Offer AI clarify/vet/prioritize (needs the proxy deployed)
auto : false # false = user taps "Analyze with AI"; true = on open
model : 'claude-opus-5-5' # Model for the triage call
max_tokens : 1024
## Site Builder — guided, Claude-assisted setup wizard ########################
# The nine-step wizard at /setup/ (and on the `welcome` layout for fresh
# remote-theme sites): prerequisites → identity → URLs → structure →
# appearance → voice → integrations → build. Markup: _includes/setup/wizard.html;
# form + generators: assets/js/setup-wizard.js; Claude session:
# assets/js/site-builder.js; catalogs: _data/site_builder.yml.
#
# The form, every generated file, per-file download and the bash bundle are
# pure client-side and work on GitHub Pages. The Claude session, live
# prerequisite checks, "Write project" and the docker compose actions need the
# LOCAL dev proxy (templates/deploy/chat-proxy/dev-proxy.mjs) answering
# GET {endpoint}/status — _config_dev.yml points `endpoint` at it. No credential
# ever appears in the page; the proxy reads CLAUDE_CODE_OAUTH_TOKEN from .env.
site_builder:
enabled : true # Master switch for the wizard's AI session
endpoint : '/api/wizard' # Dev proxy base (status/credentials/check/file/ls/target/scaffold/compose/project/image)
chat_endpoint : '' # '' = reuse ai_chat.endpoint for the streaming chat
provider : 'auto' # auto | anthropic | xai — provider the Connect step preselects;
# the proxy decides what is configured (CHAT_PROVIDER pins it)
model : 'claude-opus-5-5' # Fallback model when the proxy reports none (CHAT_MODEL / XAI_CHAT_MODEL win)
mode : 'guided' # guided (nine steps) | open (chat-driven, any order — like a coding session)
image_provider : '' # '' | xai (Grok Imagine) | openai — image renderer the session offers when its key exists
max_tokens : 8192 # Open sessions write whole files; the proxy's MAX_TOKENS_CAP still caps it
default_port : 4000 # Dev port suggested for the generated docker-compose.yml
## Multilingual Translation (AI-generated alternates) ##########################
# English content under pages/** is the ONLY human-maintained language.
# Alternate languages are generated by scripts/translate.rb — using Claude
# Code OAuth (CLAUDE_CODE_OAUTH_TOKEN from `claude setup-token`, with
# ANTHROPIC_AUTH_TOKEN / ANTHROPIC_API_KEY fallbacks) — and committed by
# .github/workflows/translate.yml (one bulk `full` job on dispatch, plus
# incremental runs when English content changes on main):
# fr/** translated page files (permalink /fr<en-url>)
# _data/i18n/<lang>.yml translated UI strings (from _data/ui-text.yml en)
# _data/i18n/manifest.yml en URL -> translations map (language toggle,
# hreflang tags, incremental change detection)
# Never edit generated files by hand — change the English source and let the
# workflow retranslate. Docs: docs/systems/multilingual-translation.md
translation:
enabled : true
source_lang : en # human-maintained language
languages : [fr] # generated alternates (ISO 639-1)
provider : claude # claude | stub (offline test provider)
model : claude-opus-5-5 # Claude model for translation calls
ui_text : true # also translate _data/ui-text.yml en
sources: # English roots -> /<lang>/<output>/
- path: pages/_posts
output: posts
- path: pages/_docs
output: docs
- path: pages/_about
output: about
- path: pages/_quickstart
output: quickstart
- path: pages/_notes
output: notes
exclude:
- "**/README.md"
- "**/_templates/**"
# Admin config utility: embeds a raw _config.yml dump via `include_relative`,
# whose sibling data file isn't copied into the translated tree (breaks the
# GitHub Pages build). Nothing prose-like to translate anyway.
- "**/_about/settings/config.md"
## Site verification #############################################################
google_site_verification : null
bing_site_verification : null
alexa_site_verification : null
yandex_site_verification : null
aver_site_verification : null
baidu_site_verification : null
## Affiliations ##############################################################
default_icon: "bi" ## Bootstrap Icons https://icons.getbootstrap.com/
links:
- label: "Portfolio"
url: [ 'https://', *github_user, '.github.io/']
icon: "bi-link"
- label: "X"
icon: "bi-twitter-x"
url: "https://x.com/bamr87"
- label: "GitHub"
icon: "bi-github"
url: [ 'https://github.com/' , *github_user ]
- label: "Instagram"
icon: "bi-instagram"
url: "https://instagram.com/bamr42"
youtube:
- label: "YouTube"
icon: "bi-youtube"
url: "https://www.youtube.com/channel/UCO0j3Opg3J9i2iWnDwHUsXQ"
## Build Framework ##############################################################
powered_by:
- name: "Ruby"
version: "3.3"
url: "https://www.ruby-lang.org/"
icon: "bi-gem"
- name: "Jekyll"
version: "3.10"
url: "https://jekyllrb.com/"
icon: "bi-joystick"
- name: "Bootstrap"
version: "5.3.3"
url: "https://getbootstrap.com/"
icon: "bi-bootstrap"
- name: "MathJax"
url: "https://www.mathjax.org/"
icon: "bi-calculator"
- name: "GitHub Pages"
version: "232"
url: "https://pages.github.com/"
icon: "bi-github"
- name: "Docker"
url: "https://www.docker.com/"
icon: "bi-docker"
### Plugins #####################################################################
# https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/about-github-pages-and-jekyll#plugins
# http://jekyllrb.com/docs/plugins/
# All plugins are enabled by default for GitHub Pages. https://pages.github.com/versions/
plugins:
- github-pages
- jekyll-remote-theme
- jekyll-feed
- jekyll-sitemap
- jekyll-seo-tag
- jekyll-paginate
- jekyll-relative-links
# jekyll-redirect-from is on the GitHub Pages whitelist and powers Obsidian
# `aliases:` → URL redirects (see pages/_docs/obsidian/syntax-reference.md).
- jekyll-redirect-from
# jekyll-include-cache (on the GitHub Pages whitelist) provides the
# {% include_cached %} tag used by setup-banner.html and other includes to
# collapse per-page renders of stable content into a single cached render.
- jekyll-include-cache
# Note: jekyll-mermaid is NOT in GitHub Pages whitelist - it only provides the
# `mermaid` Liquid tag. Do NOT write that tag with its Liquid braces anywhere in
# this file: github-pages filters the non-whitelisted gem out, so the tag never
# registers, and a literal occurrence here is parsed as a real tag and fails the
# build with "Unknown tag 'mermaid'".
# Mermaid diagrams work without this plugin via client-side JavaScript (see _includes/components/mermaid.html)
- jekyll-mermaid
# Project resource links (used by landing page and includes)
resources:
github_repo: [ 'https://github.com/', *github_user, '/', *github_repository ]
github_fork: [ 'https://github.com/', *github_user, '/', *github_repository, '/fork' ]
contributing: [ 'https://github.com/', *github_user, '/', *github_repository, '/blob/', *branch, '/CONTRIBUTING.md' ]
rubygems:
name: *gem
url: [ 'https://rubygems.org/gems/', *gem ]
docker:
image: [ *github_user, '/', *github_repository ]
hub_url: [ 'https://hub.docker.com/r/', *github_user, '/', *github_repository ]
## Giscus Comments (GitHub Discussions) #########################################
# Powered by https://giscus.app/ — comments are stored as GitHub Discussions.
# The theme reads exactly three keys: enabled, data-repo-id, data-category-id.
# data-repo is filled automatically from `repository` above.
# Docs: pages/_docs/features/giscus-comments.md
# NOTE: the key MUST be `giscus` — layouts/includes read `site.giscus.*`.
giscus:
enabled: true
# IDs below belong to bamr87/zer0-mistakes (Announcements category).
# Regenerate for a fork at https://giscus.app/ or run:
# ./scripts/bin/giscus-discussions categories
data-repo-id: "R_kgDOMFgJHQ"
data-category-id: "DIC_kwDOMFgJHc4C52bX"
## Mermaid Diagram Configuration #################################################
# Mermaid diagrams support both native markdown code blocks and div syntax
# Usage:
# 1. Add 'mermaid: true' to page front matter
# 2. Use ```mermaid ... ``` code blocks OR <div class="mermaid">...</div>
#
# Every diagram renders as an accessible <figure> with a toolbar (zoom,
# fullscreen, copy source, download SVG), a caption from `accTitle`, and an
# error state that keeps the source visible. Colours are derived at runtime
# from the theme's design tokens, so diagrams follow the colour mode and skin —
# there is nothing to configure for dark mode. Component:
# _includes/components/mermaid.html + assets/js/mermaid-diagrams.js +
# _sass/components/_mermaid.scss; docs: /docs/features/mermaid-diagrams/
#
# GitHub Pages Compatible: Yes (client-side; script bundled under assets/vendor/)
# Update file: npm install && npm run vendor:mermaid (copies from node_modules/mermaid, not jsDelivr)
# Plugin: jekyll-mermaid is OPTIONAL (not needed for GitHub Pages)
# Documentation: https://mermaid.js.org/
mermaid:
src: '/assets/vendor/mermaid/mermaid.min.js'
# strict (default) sanitises diagram text. Set `loose` only if you need
# `click` callbacks or HTML in labels — it disables that sanitisation.
security_level: strict
toolbar: true # zoom / fullscreen / copy / download controls on each diagram
fullscreen: true # allow the expand-to-fullscreen view
download: true # allow "Download as SVG"
## Conversion
# Markdown Options https://jekyllrb.com/docs/configuration/markdown/
# https://github.com/github/jekyll-commonmark-ghpages
markdown: kramdown
# highlighter: rouge
# lsi: false
# excerpt_separator: "\n\n"
# incremental: false
# Markdown Processing https://jekyllrb.com/docs/configuration/markdown/
kramdown: # https://kramdown.gettalong.org/options.html
input: GFM
header_offset: 0
# hard_wrap: false
# auto_ids: true
# footnote_nr: 1
# entity_output: as_char
toc_levels: 1..6
# smart_quotes: lsquo,rsquo,ldquo,rdquo
# enable_coderay: false
# Collections: https://jekyllrb.com/docs/collections/
# Permalinks: https://jekyllrb.com/docs/permalinks/
collections_dir: &collections_dir pages
local_repo_path: [ *collections_dir, '/', *local_repo ]
# Collection metadata used by the sidebar's "collection" mode:
# title — heading shown above the collection tree (default: label)
# icon — Bootstrap Icons class for the heading
# sidebar — per-collection sidebar defaults, e.g.
# sidebar: { nav: collection, title: "Guides" }
# (page front matter still wins; see sidebar-config.html)
collections:
pages:
output: true
permalink: /:collection/:name/
posts:
output: true
permalink: /:collection/:year/:month/:day/:slug/
docs:
output: true
title: Documentation
icon: bi-journal-text
permalink: /:collection/:categories/:name/
quests:
output: true
permalink: /:collection/:categories/:name/
hobbies:
output: true
permalink: /:collection/:categories/:name/
notebooks:
output: true
title: Notebooks
icon: bi-journal-code
permalink: /:collection/:path/:name/
notes:
output: true
title: Notes
icon: bi-journal-richtext
permalink: /:collection/:path/:name/
quickstart:
output: true
title: Quick Start
icon: bi-rocket-takeoff
permalink: /:collection/:name/
about:
output: true
title: About
icon: bi-person-badge
permalink: /:collection/:categories/:name/
# Children's-book collection: each book is a folder of story "chapters"
# (numeric `chapter:` front matter) plus an index.md landing page
# (`layout: book`). Layouts: book.html + book-story.html; components:
# bookshelf / book-card / book-toc / book-nav / book-plate.
# Docs: /docs/features/book-collection/
books:
output: true
title: Books
icon: bi-book-half
permalink: /:collection/:path/
# Cookbook collection: each recipe is one file with structured front matter
# (`ingredients:`, `steps:`, `yield:`, `times:`) rendered by `layout: recipe`
# with client-side serving scaling and US↔metric conversion. A cookbook
# landing page uses `layout: cookbook` and gathers recipes by `cookbook:`.
# Docs: /docs/features/cookbook-collection/
recipes:
output: true
title: Cookbook
icon: bi-egg-fried
permalink: /:collection/:name/
permalink: pretty
# pagination https://jekyllrb.com/docs/pagination/
paginate: 10
paginate_path: "/pages/:num/"
# Defaults https://jekyllrb.com/docs/configuration/front-matter-defaults/
defaults:
# ALL
# No sidebar nav here on purpose: root-level pages (landing README, 404)
# use layouts without the #bdSidebar panel, so a resolvable site-wide nav
# would put a dead toggle in their navbar. Collections opt in below.
-
scope:
path: ""
values:
layout: root
author_profile: false
read_time: true
comments: false # true
share: true
related: true
permalink: /:collection/:name/
# pages
-
scope:
path: pages
values:
layout: &pages default
author_profile: true
read_time: true
comments: # true
share: true
related: true
toc_sticky: true
sidebar:
nav: categories
permalink: /:path/:name/
# pages/_about
-
scope:
path: pages/_about
values:
layout: *pages
collection: about
share: true
related: true
sidebar:
nav: auto
# pages/_quickstart
-
scope:
path: pages/_quickstart
values:
layout: default
collection: quickstart
share: true
related: true
sidebar:
nav: auto
# pages/_posts
-
scope:
path: pages/_posts
values:
layout: article
post_type: standard
index: false
sidebar: true
author_profile: true
read_time: true
comments: true # blog posts show Giscus comments (override per-page with `comments: false`)
share: true
related: true
# permalink: /:collection/:name/
# pages/_docs
-
scope:
path: pages/_docs
values:
layout: *pages
# category: docs
author_profile: true
read_time: true
sidebar:
nav: auto
comments: # true
share: true
related: true
# permalink: /docs/:category/:name/
# pages/_notes
-
scope:
path: pages/_notes
type: notes
values:
layout: note
collection: notes
author_profile: true
read_time: true
comments: true
share: true
related: true
sidebar:
nav: auto
# pages/_notebooks
-
scope:
path: pages/_notebooks
type: notebooks
values:
layout: notebook
collection: notebooks
author_profile: true
read_time: true
comments: true
share: true
related: true
jupyter_metadata: true
sidebar:
nav: auto
# pages/_books — picture-book stories read cover-to-cover: no sidebar,
# no comments by default; index.md overrides layout to `book` per book.
-
scope:
path: pages/_books
type: books
values:
layout: book-story
sidebar: false
comments: false
share: true
author_profile: false
# pages/_recipes — cookbook recipes. `layout: recipe` renders the structured
# front matter (ingredients, ratios, steps) and loads the scaler; a cookbook
# landing page overrides `layout: cookbook`. Sidebar navigates the collection
# so readers can hop between recipes without going back to the index.
-
scope:
path: pages/_recipes
type: recipes
values:
layout: recipe
comments: false
share: true
author_profile: false
sidebar:
nav: auto
# fr/ — GENERATED translations (scripts/translate.rb). These are plain
# Jekyll pages (safe-mode friendly: no plugin needed) whose permalinks are
# written explicitly into each file; the scopes below mirror the key
# front-matter defaults of their English source trees.
-
scope:
path: fr
values:
layout: default
author_profile: true
read_time: true
share: true
related: true
toc_sticky: true
sidebar:
nav: categories
-
scope:
path: fr/posts
values:
layout: article
post_type: standard
index: false
sidebar: true
comments: true
-
scope:
path: fr/notes
values:
layout: note
comments: true
# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
# the internal "default list".
#
# Excluded items can be processed by explicitly listing the directories or
# their entries' file path in the `include:` list.
#
# NOTE: When _config_dev.yml is layered on top (--config _config.yml,_config_dev.yml),
# the dev file MUST repeat this full list — Jekyll replaces, not merges, the exclude key.
exclude:
# ── Jekyll cache ─────────────────────────────────────────────────────────
- .sass-cache/
- .jekyll-cache/
# ── Obsidian vault working files ─────────────────────────────────────────
- .obsidian/
- "*.canvas"
- "*.excalidraw.md"
# ── IDE / editor config (dot-prefix dirs hidden by default; listed for clarity) ─
- .cursor/
- .devcontainer/
- .frontmatter/
- .github/
- .vscode/
# ── Ruby / Bundler ────────────────────────────────────────────────────────
- Gemfile
- Gemfile.lock
- gemfiles/
- jekyll-theme-zer0.gemspec
- lib/
- pkg/
- vendor/bundle/
- vendor/cache/
- vendor/gems/
- vendor/ruby/
# ── Node.js ───────────────────────────────────────────────────────────────
- node_modules/
- package.json
- package-lock.json
# ── Shell scripts and automation ──────────────────────────────────────────
- scripts/
- "*.sh"
# ── zer0 studio — the Rails workbench beside the theme (studio/README.md) ─
- studio/
# ── Docker configuration ──────────────────────────────────────────────────
- docker/
- docker-compose.yml
- docker-compose.test.yml
# ── Build / task runners ──────────────────────────────────────────────────
- Makefile
- Rakefile
# ── Project tooling metadata ──────────────────────────────────────────────
- AGENTS.md
- docs/
- frontmatter.json
- zer0.json
- logs/
- templates/
- vendor-manifest.json
- "*.code-workspace"
# ── Submodules, tests, and authoring scaffolding ──────────────────────────
# examples/ holds self-contained demo sites, each with its own _config.yml
# and Gemfile. They are built independently (see examples/README.md), never
# as part of this site.
- examples/
- submodules/
- test/
- tests/
- MERMAID-*.md
- MERMAID-*/
- pages/_notes/_templates/