Copilot Instructions for Daniel Schroeder’s Programming Blog

Project Overview

Jekyll-based personal programming blog hosted on GitHub Pages at blog.danskingdom.com. Uses the Minimal Mistakes theme with extensive customizations. Migrated from WordPress in 2019 (posts before this have additional front matter).

Architecture

Critical Workflows

Create new blog post

# Use VS Code task "Create new blog post" OR:
./Scripts/NewBlogPost.ps1

Rename blog post

# Use VS Code task "Rename blog post" OR:
./Scripts/RenameBlogPost.ps1

Local development

# Standard (drafts not shown):
bundle exec jekyll serve --livereload

# With drafts:
bundle exec jekyll serve --livereload --draft

# Production mode (enables ads/comments):
# PowerShell:
$Env:JEKYLL_ENV='production'; bundle exec jekyll serve
# Bash:
JEKYLL_ENV=production bundle exec jekyll serve

Blog Post Conventions

Front matter (from template)

---
title: "Post Title With Capitals"
permalink: /Post-Title-With-Capitals/
#date: 2099-01-15T00:00:00-06:00  # Uncomment when publishing
#last_modified_at: 2099-01-22     # Optional
comments_locked: false
toc: false                        # true for long posts
categories:
  - Category Name
tags:
  - Should all
  - Start with
  - Capitals
---

Content patterns

1
2
  Your code here
  

- __Markdown__: Use standard markdown syntax.
  Avoid HTML unless necessary.
  Use underscores for emphasis, not asterisks.

## Customization Patterns

### Finding customizations

Search for `Dan's Customizations` to find all theme overrides. Custom files use __PascalCase__ naming; theme overrides use __lowercase-kebab-case__.

### Key overridden files (see [ReadMe.md](/ReadMe.md) for full list)

- [_includes/analytics-providers/google-gtag.html](/_includes/analytics-providers/google-gtag.html): Cookie consent wrapper
- [_includes/footer/custom.html](/_includes/footer/custom.html): Donations, advertisements
- [_includes/masthead.html](/_includes/masthead.html): Light/dark mode toggle
- [_layouts/default.html](/_layouts/default.html): Cookie notice, custom scripts
- [_layouts/single.html](/_layouts/single.html): Ads above/below post content

### Custom code location

All custom components in `_includes/_DansCustomFiles/`:

- CookieNotice.html
- DonationButtonAndModal.html
- MicrosoftClarityAnalytics.html
- RunThirdPartyCodeThatUsesCookies.js

## Theme Updates

When updating `remote_theme` tag in [_config.yml](/_config.yml):

1. Find latest stable tag from [theme changelog](https://github.com/mmistakes/minimal-mistakes/blob/master/CHANGELOG.md)
1. Update `remote_theme` to new tag
1. Checkout theme repo at that tag
1. Search this repo for `Dan's Customizations`
1. Copy updated code from theme while preserving customization blocks
1. Test locally, commit changes

## Environment Setup

### DevContainer (recommended)

Open repo in VS Code with DevContainer support—automatic setup via [.devcontainer/devcontainer.json](/.devcontainer/devcontainer.json).

### Manual setup (Windows)

1. Install [Ruby + Devkit v3.3](https://rubyinstaller.org/downloads/) with MSYS2
2. `gem update --system`
3. Handle SSL issues if needed (see [ReadMe.md](/ReadMe.md) for Cisco Umbrella Root CA fix)
4. `gem install jekyll bundler`
5. `bundle install`

### Keeping dependencies updated

```bash
bundle update  # Update all gems periodically

Configuration Notes

Important Paths

Mastodon