Skip to main content

Settings

Color Mode
Theme Skin
Background

Appearance preferences are saved in this browser only.

Environment
Current Environment Dev

Built with JEKYLL_ENV=development. Changes auto-reload under jekyll serve.

Theme & Build
Jekyll v3.10.0
Last Build Aug 23, 17:11
Page Location
Page Info
Layout admin
Collection about
Path _about/settings/config.md
URL /about/config/
Date 2026-08-23

Configuration Utility

View, manage, and update your Jekyll theme configuration from one place.

Updated Apr 04, 2026
https://zer0-mistakes.com
Site URL
bamr87/zer0-mistakes
Repository
Air
Theme Skin
10
Collections

title zer0-mistakes
founder Amr Abdel-Motaleb
email amr@zer0-mistakes.com
description "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."
name Amr
level n00b
locale en-US

github_user bamr87
repository_name zer0-mistakes
branch main
local_repo zer0-mistakes
repo_map /sitemap/

url https://zer0-mistakes.com
baseurl
remote_theme bamr87/zer0-mistakes
port 4000
permalink pretty
public_folder assets

locale en-US
logo /assets/images/gravatar-small.png
teaser /assets/images/favicon_gpt_computer_retro.png
og_image /assets/images/wizard-on-journey.png
theme_skin air
breadcrumbs true
words_per_minute 200

google_analytics G-ZBDKNMC168
posthog.enabled true
posthog.api_host https://us.i.posthog.com
posthog.respect_dnt true
posthog.session_recording false

Collection Output Items
about yes 30
books yes 4
docs yes 92
hobbies yes 0
notebooks yes 5
notes yes 5
pages yes 0
posts yes 38
quests yes 0
quickstart yes 5

  • github-pages
  • jekyll-remote-theme
  • jekyll-feed
  • jekyll-sitemap
  • jekyll-seo-tag
  • jekyll-paginate
  • jekyll-relative-links
  • jekyll-redirect-from
  • jekyll-include-cache
  • jekyll-mermaid
  • jekyll-coffeescript
  • jekyll-commonmark-ghpages
  • jekyll-gist
  • jekyll-github-metadata
  • jekyll-optional-front-matter
  • jekyll-readme-index
  • jekyll-default-layout
  • jekyll-titles-from-headings
  • jekyll-remote-theme

markdown kramdown
collections_dir pages
paginate 10
paginate_path /pages/:num/
kramdown.input GFM
kramdown.toc_levels 1..6

main
#007bff
secondary
#6c757d
red
#a11111
yellow
#ffe900
teal
#376986
blue
#007bff
green
#28a745
purple
#6f42c1
pink
#e83e8c
orange
#fd7e14
brown
#795548
cyan
#17a2b8
indigo
#6610f2
lime
#cddc39
amber
#ffc107
deep_orange
#ff5722
deep_purple
#673ab7
light_blue
#03a9f4
light_green
#8bc34a
light_purple
#9c27b0
light_red
#f44336
light_yellow
#ffeb3b
light_teal
#009688
Site Identity
0/160 characters
GitHub
URLs & Deployment
Production URL. For GitHub Pages: https://USERNAME.github.io
Leave empty for apex domains
Personalization
Analytics
Live Preview
Loading…
_config.yml

# 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.
# theme_color falls back to theme_color.main below when unset here.
favicon:
  ico                    : /favicon.ico
  apple_touch            : /assets/images/favicon_gpt_computer_retro.png

## Preview Image Generation (AI-powered) #####################################
# Settings for automatic preview image generation using AI
# Used by: scripts/generate-preview-images.sh → scripts/lib/preview_generator.py
#
# 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
# [redacted]
# [redacted]
# 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'
  # 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-4-8'
  # 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:
  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
# [redacted]
  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 = start opted OUT (memory-only persistence, no cookies) until the visitor
                                  # accepts the "analytics" category in the theme's cookie-consent banner
    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
# [redacted]
# [redacted]
#
# 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'        # AI provider (Claude Messages API)
  auth_mode              : 'proxy'            # 'proxy' (recommended) or 'direct'
  proxy_ready            : false              # Set true only when your proxy endpoint is deployed
  model                  : 'claude-opus-4-8'  # Claude model to use
# [redacted]
# [redacted]
# [redacted]
# [redacted]
  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
# [redacted]
  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
# [redacted]
                                              # '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:
# [redacted]
#     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
# [redacted]
                                          # '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-4-8'  # Model for the triage call
# [redacted]

## 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
# [redacted]
# [redacted]
# .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-4-8   # 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>
# 
# 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'

## 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/

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

  # 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"

  # ── Docker configuration ──────────────────────────────────────────────────
  - docker/
  - docker-compose.yml
  - docker-compose.test.yml

  # ── Build / task runners ──────────────────────────────────────────────────
  - Makefile
  - Rakefile

  # ── Project tooling metadata ──────────────────────────────────────────────
  - AGENTS.md
  - docs/
  - frontmatter.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/

# Force-include — underscore-prefixed paths Jekyll would otherwise skip.
# _design-system/ is the git mirror of the Claude Design project (contract:
# [redacted]
# manifest, and specimen cards live URLs under /_design-system/ — linked from
# the /design/ hub page and consumable by prototypes ("link THIS one file").
include:
  - _design-system

# Sass/SCSS
# Production default: minified output, no sourcemaps. main.css is render-blocking
# on every page, so we ship it compressed (~182KB expanded -> ~140KB minified)
# and skip the .css.map files. _config_dev.yml overrides this back to expanded +
# sourcemaps for local debugging.
sass:
  sass_dir: _sass
  style: compressed
  sourcemap: never

#  TODO: Fix bootstrap plugin
  # load_paths:
  #   - /usr/local/bundle/gems/bootstrap-5.3.3/assets/stylesheets


## Style Settings -------------------------------------------------------------

# theme                  : "zer0-mistakes-jekyll"
# remote_theme           : "bamr87/zer0-mistakes"
theme_skin               : "air" # "air", "aqua", "dirt", "neon", "mint", "plum", "sunrise"

# SVG background layers (fffuel.co style) — gradient, pattern, noise per skin
theme_background:
  enabled: true           # Master toggle for SVG backgrounds
  gradient_opacity: 0.6   # Hero/header gradient layer opacity
  texture_opacity: 0.04   # Body noise texture overlay opacity
  pattern_opacity: 0.08   # Surface/card pattern overlay opacity
  blend_mode: overlay     # CSS mix-blend-mode for all layers

# style                  : "default" # "default", "dark", "light", "solarized-dark", "solarized-light"
# remote_style           : "bamr87/zer0-mistakes"

# NOTE: Hex codes MUST be quoted — unquoted `#007bff` is parsed as a YAML
# comment and the key resolves to null. These values feed
# [redacted]
theme_color:
  main:         "#007bff"
  secondary:    "#6c757d"
  red:          "#a11111"
  yellow:       "#ffe900"
  teal:         "#376986"
  blue:         "#007bff"
  green:        "#28a745"
  purple:       "#6f42c1"
  pink:         "#e83e8c"
  orange:       "#fd7e14"
  brown:        "#795548"
  cyan:         "#17a2b8"
  indigo:       "#6610f2"
  lime:         "#cddc39"
  amber:        "#ffc107"
  deep_orange:  "#ff5722"
  deep_purple:  "#673ab7"
  light_blue:   "#03a9f4"
  light_green:  "#8bc34a"
  light_purple: "#9c27b0"
  light_red:    "#f44336"
  light_yellow: "#ffeb3b"
  light_teal:   "#009688"

## Copyright Settings --------------------------------------------------------------

cr_year: 2024
cr_entity: *name
cr_lisense: "MIT"

## Sitemap Settings --------------------------------------------------------------

# sitemap_include: A list of file extensions that should be included in the sitemap. By default, HTML files and any files with sitemap: true in their front matter are included.
# sitemap_exclude: A list of files or directories that should be excluded from the sitemap.

sitemap_include: ["html", "xml"]
# [redacted]
Regenerate Config

Copy the live _config.yml into this settings directory for documentation purposes.

Bash
```bash cd ~/github/zer0-mistakes # Wraps the copy in Liquid raw markers so config comments that mention # Liquid tags render literally (scripts/bin/validate checks for drift). # The awk string-splits keep this page itself Liquid-safe. awk 'BEGIN{print "{" "% raw %" "}"} {print} END{print "{" "% endraw %" "}"}' \ _config.yml > pages/_about/settings/_config.yml ```
PowerShell
```powershell cd ~/github/zer0-mistakes $raw = "{" + "% raw %" + "}"; $end = "{" + "% endraw %" + "}" $body = Get-Content _config.yml -Raw Set-Content -Encoding UTF8 pages/_about/settings/_config.yml ` -Value ($raw + "`n" + $body + $end + "`n") ```
Environment
jekyll.environment development
site.url https://zer0-mistakes.com
site.baseurl (empty)
site.remote_theme bamr87/zer0-mistakes
site.port 4000
site.collections_dir pages
# 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.
# theme_color falls back to theme_color.main below when unset here.
favicon:
  ico                    : /favicon.ico
  apple_touch            : /assets/images/favicon_gpt_computer_retro.png

## Preview Image Generation (AI-powered) #####################################
# Settings for automatic preview image generation using AI
# Used by: scripts/generate-preview-images.sh → scripts/lib/preview_generator.py
#
# 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
# [redacted]
# [redacted]
# 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'
  # 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-4-8'
  # 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:
  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
# [redacted]
  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 = start opted OUT (memory-only persistence, no cookies) until the visitor
                                  # accepts the "analytics" category in the theme's cookie-consent banner
    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
# [redacted]
# [redacted]
#
# 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'        # AI provider (Claude Messages API)
  auth_mode              : 'proxy'            # 'proxy' (recommended) or 'direct'
  proxy_ready            : false              # Set true only when your proxy endpoint is deployed
  model                  : 'claude-opus-4-8'  # Claude model to use
# [redacted]
# [redacted]
# [redacted]
# [redacted]
  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
# [redacted]
  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
# [redacted]
                                              # '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:
# [redacted]
#     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
# [redacted]
                                          # '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-4-8'  # Model for the triage call
# [redacted]

## 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
# [redacted]
# [redacted]
# .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-4-8   # 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>
# 
# 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'

## 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/

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

  # 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"

  # ── Docker configuration ──────────────────────────────────────────────────
  - docker/
  - docker-compose.yml
  - docker-compose.test.yml

  # ── Build / task runners ──────────────────────────────────────────────────
  - Makefile
  - Rakefile

  # ── Project tooling metadata ──────────────────────────────────────────────
  - AGENTS.md
  - docs/
  - frontmatter.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/

# Force-include — underscore-prefixed paths Jekyll would otherwise skip.
# _design-system/ is the git mirror of the Claude Design project (contract:
# [redacted]
# manifest, and specimen cards live URLs under /_design-system/ — linked from
# the /design/ hub page and consumable by prototypes ("link THIS one file").
include:
  - _design-system

# Sass/SCSS
# Production default: minified output, no sourcemaps. main.css is render-blocking
# on every page, so we ship it compressed (~182KB expanded -> ~140KB minified)
# and skip the .css.map files. _config_dev.yml overrides this back to expanded +
# sourcemaps for local debugging.
sass:
  sass_dir: _sass
  style: compressed
  sourcemap: never

#  TODO: Fix bootstrap plugin
  # load_paths:
  #   - /usr/local/bundle/gems/bootstrap-5.3.3/assets/stylesheets


## Style Settings -------------------------------------------------------------

# theme                  : "zer0-mistakes-jekyll"
# remote_theme           : "bamr87/zer0-mistakes"
theme_skin               : "air" # "air", "aqua", "dirt", "neon", "mint", "plum", "sunrise"

# SVG background layers (fffuel.co style) — gradient, pattern, noise per skin
theme_background:
  enabled: true           # Master toggle for SVG backgrounds
  gradient_opacity: 0.6   # Hero/header gradient layer opacity
  texture_opacity: 0.04   # Body noise texture overlay opacity
  pattern_opacity: 0.08   # Surface/card pattern overlay opacity
  blend_mode: overlay     # CSS mix-blend-mode for all layers

# style                  : "default" # "default", "dark", "light", "solarized-dark", "solarized-light"
# remote_style           : "bamr87/zer0-mistakes"

# NOTE: Hex codes MUST be quoted — unquoted `#007bff` is parsed as a YAML
# comment and the key resolves to null. These values feed
# [redacted]
theme_color:
  main:         "#007bff"
  secondary:    "#6c757d"
  red:          "#a11111"
  yellow:       "#ffe900"
  teal:         "#376986"
  blue:         "#007bff"
  green:        "#28a745"
  purple:       "#6f42c1"
  pink:         "#e83e8c"
  orange:       "#fd7e14"
  brown:        "#795548"
  cyan:         "#17a2b8"
  indigo:       "#6610f2"
  lime:         "#cddc39"
  amber:        "#ffc107"
  deep_orange:  "#ff5722"
  deep_purple:  "#673ab7"
  light_blue:   "#03a9f4"
  light_green:  "#8bc34a"
  light_purple: "#9c27b0"
  light_red:    "#f44336"
  light_yellow: "#ffeb3b"
  light_teal:   "#009688"

## Copyright Settings --------------------------------------------------------------

cr_year: 2024
cr_entity: *name
cr_lisense: "MIT"

## Sitemap Settings --------------------------------------------------------------

# sitemap_include: A list of file extensions that should be included in the sitemap. By default, HTML files and any files with sitemap: true in their front matter are included.
# sitemap_exclude: A list of files or directories that should be excluded from the sitemap.

sitemap_include: ["html", "xml"]
# [redacted]