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.ymlonly 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-sitemapandjekyll-feedplugins._posts/— blog content asYYYY-MM-DD-title.mdwith front matter. Every post should be taggedtechnical— 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). Thepersonaltag is retired._layouts/—default.htmlis the master shell (masthead, nav bar, footer, CSS includes);post.htmlandpage.htmlboth wrapdefault.html. Posts uselayout: post, standalone content pages uselayout: pageorlayout: default._includes/— reusable fragments:meta.html(OpenGraph/Twitter meta),svg-icons.html(footer social links, driven byfooter-linksin_config.yml),youtube.html(`<div class="embed-container">
</div>
` responsive embed), analytics.html, disqus.html,
collecttags.html.
_sass/+style.scss— the Sass entry point isstyle.scss(compiles tostyle.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 inimages/.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.ymlexcludeso 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
---