CLAUDE.md
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview
This is an academic personal website built with Jekyll and hosted on GitHub Pages. It is based on the Academic Pages template, which is a fork of the Minimal Mistakes Jekyll theme.
The site showcases academic work including publications, blog posts, talks, teaching materials, and portfolio items.
Development Commands
Local Development
Run the site locally with live reload:
bundle exec jekyll serve
Or use the development config:
bundle exec jekyll serve --config _config.yml,_config.dev.yml
Note: There’s a typo in the README - the correct command is bundle exec jekyll serve (not liveserve).
Setup
First-time setup after cloning:
bundle clean
bundle install
If you encounter errors during bundle install, delete Gemfile.lock and try again.
Dependency Management
The site uses github-pages gem which manages Jekyll and plugins. Ruby dependencies are managed via Bundler.
Site Architecture
Content Collections
Jekyll collections are the core organizational structure:
_pages/: Static pages (About, CV, etc.) - rendered at root level viapermalinkfront matter_posts/: Blog posts - accessible via/year-archive/_publications/: Research publications_talks/: Conference talks and presentations_teaching/: Teaching experience and courses_portfolio/: Portfolio items and projects
Each collection has specific front matter defaults defined in _config.yml (lines 192-245) that control layout, author profile visibility, and sharing options.
Layout System
Custom layouts in _layouts/:
default.html: Base layout with header/footersingle.html: Single page/post layoutarchive.html: Collection listing pagestalk.html: Specialized layout for talkscompress.html: HTML minification wrapper
Includes and Components
Modular components in _includes/:
author-profile.html: Sidebar with author informationarchive-single.html: Individual item in collection listingsarchive-single-cv.html: CV-specific item formattingcomments.html&comments-providers/: Comment system integration (Staticman, Disqus, etc.)analytics.html&analytics-providers/: Analytics integration
Styling
SCSS architecture in _sass/:
- Component styles:
_base.scss,_masthead.scss,_sidebar.scss,_page.scss, etc. - Vendor libraries: Font Awesome, Susy grid system, Magnific Popup, Breakpoint
- Variables and configuration in
_sass/_variables.scss
Compiled to assets/css/main.scss with compression enabled.
Navigation
Site navigation configured in _data/navigation.yml. Currently displays:
- Publications
- Blog Posts (year-archive)
- CV (links to
/files/CV.pdf)
Author Data
Author information in _config.yml (lines 82-116) includes:
- Bio details (name, avatar, location)
- Social media links (GitHub: Kevincklhhh, LinkedIn, email: kailaic@umich.edu)
- Academic profiles (Google Scholar, ORCID, etc.)
Key Configuration
Site Configuration (_config.yml)
Important settings:
- URL:
https://kevincklhhh.github.io - Repository:
kevincklhhh/kevincklhhh.github.io - Timezone: America/Los_Angeles
- Markdown: kramdown with GFM input
- Plugins: jekyll-paginate, jekyll-sitemap, jekyll-gist, jekyll-feed, jekyll-redirect-from
Front Matter
All content files use YAML front matter. Common fields:
title: Page/post titlepermalink: Custom URL pathexcerpt: Short descriptioncollection: Which collection the file belongs tolayout: Template to usedate: Publication date (for posts/publications)
Example from _pages/about.md:
---
permalink: /
title: "About me"
excerpt: "About me"
author_profile: true
redirect_from:
- /about/
- /about.html
---
Content Generation Tools
Markdown Generators
Python/Jupyter tools in markdown_generator/ to bulk-create markdown files from TSV data:
publications.py/publications.ipynb: Generate publication pages from structured datatalks.py/talks.ipynb: Generate talk pages from structured datapubsFromBib.py/PubsFromBib.ipynb: Import publications from BibTeX files
These are useful when adding multiple items at once instead of creating individual markdown files.
Talk Map
talkmap.py / talkmap.ipynb generates an interactive map (talkmap/map.html) showing geographic locations of talks using Leaflet.js.
File Organization
Static Assets
files/: PDFs, documents (e.g., CV.pdf)images/: Images, profile photos (e.g., profile.png)assets/: Compiled CSS, JavaScript, fonts
Comments
User comments stored as YAML files in _data/comments/{post-slug}/comment-{timestamp}.yml when using Staticman comment system.
GitHub Pages Specifics
- Site is published from the
masterbranch - Uses
github-pagesgem to ensure local environment matches GitHub Pages - Some Jekyll plugins may not work on GitHub Pages - check the whitelist in
_config.yml(lines 268-273) - Future posts are enabled (
future: truein config), so posts with future dates will be published
Common Workflows
Adding a New Publication
- Create a new markdown file in
_publications/with filename patternYYYY-MM-DD-title.md - Add front matter with title, excerpt, date, venue, paperurl, citation
- Or use
markdown_generator/publications.pyto generate from TSV
Adding a Blog Post
- Create markdown file in
_posts/with filenameYYYY-MM-DD-title.md - Add front matter with title, date, permalink, tags
- Content written in Markdown below front matter
Updating the CV
Replace /files/CV.pdf with the updated PDF. The navigation link points directly to this file.
Modifying Site Navigation
Edit _data/navigation.yml to add/remove/reorder navigation items.
Customizing Appearance
- Colors, fonts, spacing:
_sass/_variables.scss - Layout modifications:
_layouts/and_includes/ - Per-page customization: Use front matter to override defaults
