Source for johnlon.github.io — John Lonergan's personal site: bio, blog, projects and CV.
Built with Jekyll and served by GitHub Pages from main.
| Path | Purpose |
|---|---|
index.html |
Home page |
projects.html |
Projects page |
cv.html |
CV (screen theme + print CSS) |
blog/ |
Blog index (paginated) |
_posts/ |
Blog posts, YYYY-MM-DD-title.md |
_layouts/ |
Page layouts (post.html) |
_includes/ |
Shared fragments (styles, carousel, project cards) |
apps/vitals/ |
Landing page + privacy policy for the Vitals app — lives here because the Johnlon/vitals repo is private and cannot serve GitHub Pages |
assets/ |
Images, media, CV PDF |
404.html |
Not-found page |
_config.yml |
Jekyll config |
- Push to
main. GitHub Pages builds the repo root with its own Jekyll (classic "deploy from a branch" mode). - No GitHub Actions workflow, no
Gemfile. - Live at https://johnlon.github.io/ a minute or so after the push.
No Ruby or Jekyll on the host. Use the jekyll/jekyll Docker image, run from the repo root:
docker run --rm -p 4000:4000 -v "$PWD":/srv/jekyll jekyll/jekyll:latest jekyll serve- Site at http://localhost:4000, rebuilds on file changes.
- Output goes to
_site/(gitignored, owned by root because the container writes it). - Stop with Ctrl-C.
One-off build without serving:
docker run --rm -v "$PWD":/srv/jekyll jekyll/jekyll:latest jekyll build- Add
_posts/YYYY-MM-DD-title.mdwith front matter. - Markdown is kramdown (GFM), highlighting by rouge.
- Published at
/blog/YYYY/MM/DD/title/.
cv.htmlis the content source of truth.assets/john-lonergan-cv.pdfis generated from its print CSS with Puppeteer and committed alongside it.- Rules and the generation steps are in CLAUDE.md.