CLAUDE.md

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

What this is

Personal website and blog for Corey K. Clippinger, served at coreyclip.github.io. It’s a static Jekyll site originally forked from the Jekyll Now template (the README.md is the unmodified upstream template readme — it does not describe this site’s actual customizations). Hosted on GitHub Pages, which builds Jekyll automatically on push.

Content scope: professional only

This site is for professional, tech-work content (tutorials, data projects, engineering write-ups), with only minimal personal material. Personal, faith, reflective, and civic/political opinion writing belongs to the separate WTOWL blog (wetoldourselveswelost.com), whose drafts live in the Obsidian vault at ~/Obsidian/projects/WTOWL/drafts/, not in this repo. In Oct 2026 the existing personal posts (grief series, Should and Yes, King of Kings, etc.) were moved there and removed from _posts/. Data-analysis posts with political subjects (Electoral College, SMS campaign dashboard) stayed because the work itself is technical. When a new post doesn’t clearly fit, ask before adding it here.

Build / serve / preview

There is no Gemfile committed (it’s .gitignored). To run locally you need the GitHub Pages gem set installed:

gem install github-pages   # mirrors GitHub Pages' Jekyll + plugin versions
jekyll serve               # builds + watches, serves at http://127.0.0.1:4000/
  • The built site goes to _site/ (git-ignored). Never edit _site/ directly.
  • There are no tests, linters, or CI checks. .travis.yml only restricts branch builds and is effectively vestigial (GitHub Pages does the real build).

Deployment

Push to master — GitHub Pages rebuilds and deploys automatically. The custom domain lives in CNAME. No manual build/deploy step. There is no staging environment; a bad push is live.

Architecture

Standard Jekyll layout with a few site-specific conventions worth knowing before editing:

  • _config.yml — site metadata, permalink: /:title/ (posts are served at /<title>/, not dated URLs), Kramdown + Rouge, jekyll-sitemap and jekyll-feed plugins.
  • _posts/ — blog content as YYYY-MM-DD-title.md with front matter. Every post should be tagged technical — this tag drives navigation (see below), so a post without it won’t appear on the Tutorials page (it will still show on the homepage). The personal tag is retired.
  • _layouts/ — default.html is the master shell (masthead, nav bar, footer, CSS includes); post.html and page.html both wrap default.html. Posts use layout: post, standalone content pages use layout: page or layout: default.
  • _includes/ — reusable fragments: meta.html (OpenGraph/Twitter meta), svg-icons.html (footer social links, driven by footer-links in _config.yml), youtube.html (`<div class="embed-container">

</div>

` responsive embed), analytics.html, disqus.html, collecttags.html.

  • _sass/ + style.scss — the Sass entry point is style.scss (compiles to style.css); partials live in _sass/ and are @imported.

Tag-based navigation (site-specific)

The nav bar links Tutorials → /technical-posts, generated by technical.html, which filters site.posts by the technical tag. The homepage (index.html) lists all posts chronologically. There is no longer a Personal Blog nav link or personal.html page (removed when personal content moved to WTOWL); don’t re-add them.

Standalone pages vs. blog

Beyond the blog, the remaining pages are about.html, hire_me.md, and resources.md. Older one-off landing pages built with Nicepage have been removed, but their exported assets (nicepage.css ~1MB, nicepage.js ~160KB, jquery-1.9.1.min.js) are still in the repo. archive/GraceClippinger.html is a memorial page that is intentionally kept live (family may have the link) even though it’s personal and not in the nav; leave it as-is.

CSS layering

_layouts/default.html pulls in several stylesheets in order, and load order matters for overrides: Bootstrap 4 + MDBootstrap (CDN), then the site’s style.css, then system.css/style.css (the retro system.css theme), then style.scss. system.css is a git submodule (see .gitmodules) — run git submodule update --init after cloning or its styles will be missing.

Other directories

  • jupyternotebooks/ — source notebooks (e.g. ElectoralCollege.ipynb) behind data-heavy posts; exported images land in images/.
  • archive/, old/ — retired pages/assets kept for reference, not part of the live nav.
  • claudedocs/ — Claude working notes (e.g. open-items files). Listed in _config.yml exclude so it is never published.

Adding a blog post

Create _posts/YYYY-MM-DD-Title.md with front matter, and tag it technical so it shows up on the Tutorials page (personal writing goes to WTOWL instead; see Content scope above):

---
layout: post
title: Your Title
published: true
tags: technical
---