udobroering — Jekyll blog

A minimal personal blog built with Jekyll and hosted on GitHub Pages. This is a clean, blog-only fork of a larger multi-app site: no PolyVote, no Blog Admin, no Inventory Manager, no Firebase, no Giscus comments, no search crawler, and no branding yet (identity is driven by _config.yml variables).

Architecture

A single Jekyll static site. There is no build step beyond Jekyll itself and no JavaScript framework — assets/js/*.js are small vanilla-JS enhancements.

Build & Development

bundle install
bundle exec jekyll serve        # local dev server at http://localhost:4000/
bundle exec jekyll build        # production build into _site/

Key conventions

SEO

jekyll-seo-tag (`

udobroering — Jekyll blog | Your Blog Name

` in _includes/head.html) plus hand-rolled extras: Open Graph + Twitter cards, canonical, JSON-LD (WebSite in head; BlogPosting + BreadcrumbList in _layouts/post.html), a custom status-filtered sitemap.xml and Atom feed.xml, and robots.txt.

Deployment & CI/CD

One workflow: .github/workflows/jekyll-gh-pages.yml — builds with Jekyll and deploys to GitHub Pages on push to main (and workflow_dispatch). One-time setup: Settings → Pages → Source: GitHub Actions. .github/dependabot.yml keeps the bundler and github-actions ecosystems updated weekly.

Project structure

├── _config.yml              # Config + identity variables
├── _data/
│   ├── pages.yml            # Navigation registry (nav + footer)
│   ├── series.yml           # Post series definitions
│   └── papers.yml           # Optional metadata for PDFs in assets/papers/
├── _includes/               # head, header, footer, hero, search-modal,
│                            #   post-card, post-list-item, series-nav, toc
├── _layouts/                # default, home, page, post
├── _posts/                  # Blog content (Markdown)
├── pages/                   # articles, papers, projects, categories, tags, about, privacy, disclaimer
├── assets/
│   ├── css/                 # style.css, cookie-consent.css
│   ├── js/                  # main, cookie-consent, search, carousel, charts, read-aloud, share
│   ├── papers/              # Published PDFs (auto-listed at /papers/)
│   └── images/              # icon_alpha.png (logo) + per-post hero dirs
├── icons/                   # Favicons + PWA icons (placeholders)
├── feed.xml sitemap.xml search.json robots.txt
├── site.webmanifest sw.js offline.html 404.html index.html
└── .github/
    ├── dependabot.yml
    └── workflows/jekyll-gh-pages.yml

Post-task self-check

After a change, scan whether it should be reflected in README.md, CLAUDE.md, the workflow, or dependabot.yml (new conventions, scripts, paths). Auto-apply small unambiguous doc updates; prompt for anything structural. Skip for pure Q&A.