CLAUDE.md - Jekyll Blog: “Han, Not Solo”
CLAUDE.md - Jekyll Blog: “Han, Not Solo”
Personal blog by Han Lee on machine learning engineering, compound AI systems, search/information retrieval, and recsys. Hosted on GitHub Pages at https://leehanchung.github.io.
Build & Development Commands
# Install dependencies
gem install bundler && bundle install
# Build the site
bundle exec jekyll build
# Serve locally with live reload
bundle exec jekyll serve --livereload
# Validate HTML output (run after build)
bundle exec htmlproofer ./_site --ignore-status-codes "999,429,403" --ignore-urls "/twitter.com/,/x.com/"
Important: After any content or template change, always run bundle exec jekyll build to verify the site builds without errors.
Project Architecture
├── _config.yml # Jekyll site configuration (rarely changed)
├── _layouts/ # Page templates: default, home, post, page, portfolio
├── _includes/ # Reusable HTML partials (head, header, footer, analytics, etc.)
├── _sass/minima/ # Theme styles (Minima 2.x)
├── _data/ # Data files: SocialNetworks.yml, ui-text.yml
├── assets/
│ ├── css/ # Custom stylesheets
│ ├── fonts/ # Custom fonts
│ └── img/YYYY-MM-DD/ # Post images organized by date
├── blogs/_posts/ # Blog posts (primary content, ~83 posts)
├── notebooks/_posts/ # Tutorial/notebook posts
├── projects/_posts/ # Project writeups
├── talks/_posts/ # Talk/presentation posts
├── about/ # About page
├── scripts/ # Utility scripts (image optimization)
└── .github/workflows/ # CI/CD
Content Conventions
Creating a New Blog Post
- Create file:
blogs/_posts/YYYY-MM-DD-slug-title.md - Create image directory (if needed):
assets/img/YYYY-MM-DD/ - Add frontmatter (see template below)
- Write content in Kramdown/GFM markdown
Frontmatter Template
Every post MUST have this frontmatter structure:
---
layout: post
type: post
title: "Post Title Here"
subtitle: "Optional subtitle"
thumbnail: "/assets/img/YYYY-MM-DD/thumbnail.png" # optional
date: YYYY-MM-DD
author: "Han Lee"
category: blogs # one of: blogs, notebooks, projects, talks
math: false # set true if post uses LaTeX
comments: true
published: true # set false for drafts
tags: [Tag1, Tag2, Tag3]
description: |
Brief description for SEO and social sharing.
excerpt: |
Short excerpt shown in post listings.
---
Required fields: layout, type, title, date, author, category, tags
Category values: blogs, notebooks, projects, talks (must match the subdirectory)
Content Guidelines
- Markdown: Kramdown with GFM input. Hard wrap is enabled.
- Code blocks: Use triple backticks with language spec (
python,bash, etc.) - Math: Display mode
$$...$$, inline$...$(setmath: truein frontmatter) - Images: Reference as
/assets/img/YYYY-MM-DD/filename.png. Use descriptive filenames. - Links: Relative paths for internal links, full URLs for external
- Posts with
__prefix: Draft/incomplete posts (e.g.,__2021-09-30-ctr-model.md). Do not publish these.
Common Tags
Data Science, DevOps, Evaluation, Generative AI, LLM, Machine Learning, MLOps, NLP, Prompt Engineering, AI Engineering, Compound AI Systems, Agent Systems, Claude Code, Recsys
Tech Stack
- Jekyll 3.8.7 with Minima 2.x theme
- Kramdown markdown processor with GFM input
- Rouge for syntax highlighting
- Plugins: jekyll-feed, jekyll-sitemap, jemoji, jekyll-seo-tag
- Analytics: Google Analytics (UA-142121126-2)
- Comments: Disqus (calabazascreek)
- Ruby: 3.1.x recommended (Jekyll 3.8.7 has compatibility issues with Ruby 3.3+)
Repository Workflow
- Create a branch for changes, then PR to master
- Do not commit directly to the master branch
- Run
bundle exec jekyll buildto verify changes before committing - CI will build the site and run HTML validation on PRs
Key Files to Know
| File | Purpose | Edit frequency |
|---|---|---|
_config.yml |
Site-wide settings | Rarely |
_layouts/post.html |
Blog post template | Occasionally |
_includes/head.html |
HTML head (meta, CSS, fonts) | Occasionally |
_includes/header.html |
Site navigation | Rarely |
_includes/footer.html |
Site footer | Rarely |
_sass/minima/ |
Theme styles | Occasionally |
assets/css/ |
Custom CSS overrides | Occasionally |
frontmatter.json |
Frontmatter CMS config | When adding new tags/categories |
Troubleshooting
- Build fails: Check frontmatter YAML syntax (colons in titles must be quoted)
- _config.yml changes not reflected: Restart
jekyll serve(config is not live-reloaded) - Missing images: Verify path matches
/assets/img/YYYY-MM-DD/convention - Math not rendering: Ensure
math: trueis set in post frontmatter