CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Overview

This is Eric Ford's academic personal website built with Franklin.jl, a Julia-based static site generator. Source lives in the repo root; __site/ contains the generated output (not committed).

Commands

Local Development

# Serve with hot reload at http://localhost:8000
julia --project=. -e 'using Franklin; serve()'
# or
julia --project=. scripts/build_local.jl --serve

Production Build

julia --project=. -e 'using Franklin; optimize()'
# or
julia --project=. scripts/build_local.jl

Import Publications from BibTeX

julia --project=. scripts/import_bibtex.jl <file.bib>

Architecture

Content Model

All dynamic content is stored as TOML files in _data/ and rendered via custom Julia functions in utils.jl. The pattern is:

  1. Create/edit a TOML file in _data/<category>/

  2. The corresponding Markdown page calls a Franklin helper function (e.g., {{hfun_member_cards_from_dir members/postdocs}})

  3. Franklin calls the matching hfun_* function in utils.jl, which loads the TOML and emits HTML

Key Data Directories

DirectoryContent
_data/members/PI, postdocs, grad students, former members — each a TOML file
_data/courses/psu_recent/Course cards (title, emoji, description, archive_url)
_data/software/Software projects grouped by category subdirectory
_data/publications/YYYY/Publication entries by year (parsed from ADS BibTeX)

Franklin Helper Functions (utils.jl)

FunctionPurpose
hfun_member_cards_from_dirRender all member TOMLs from a directory
hfun_course_cards_from_dirRender course cards from a directory
hfun_software_cards_from_dirRender software cards from a directory
hfun_publication_listFilter & render publications by research_theme and/or tags
format_citationFormat a single publication TOML as HTML citation

Publication TOML Fields

Required: title, author, year, journal Optional: doi, adsurl, tags (array), research_themes (array), pages

Adding New Content

Layouts & Styles

Deployment

Deploys to Netlify automatically on push to main via .github/workflows/Netlify.yml. The build downloads Julia 1.10.5, runs Franklin.optimize(), and publishes __site/. Requires NETLIFY_AUTH_TOKEN and NETLIFY_SITE_ID secrets.