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.

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 is tagged either technical or personal — this tag drives navigation (see below), so a new post without one of these tags won’t appear in the section pages.
  • _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 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 Nicepagenicepage.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 in images/.
  • 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
---