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.
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 is tagged eithertechnicalorpersonal— this tag drives navigation (see below), so a new post without one of these tags won’t appear in the section pages._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 and Personal Blog → /personal-posts.
These are generated by technical.html and personal.html, which filter site.posts by the
technical / personal tag. This is the primary way posts are surfaced — the homepage
(index.html) lists all posts chronologically.
Standalone pages vs. blog
Beyond the blog there are hand-built one-off HTML landing pages at the repo root
(Plant-Fundraiser.html, LA_Fire_Relief_Donations.html, covid.html, Page-6.html,
about.html, etc.). Several were built with Nicepage — nicepage.css (~1MB) and
nicepage.js (~160KB) are its exported assets. These pages are largely self-contained and do
not share the Jekyll default.html masthead/nav; treat them separately from the templated
blog. jquery-1.9.1.min.js exists only to support this legacy page markup.
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.
Adding a blog post
Create _posts/YYYY-MM-DD-Title.md with front matter, and tag it technical or personal so it
shows up in the right nav section:
---
layout: post
title: Your Title
published: true
tags: technical
---