CLAUDE.md
CLAUDE.md
Personal website for Nick Semenkovich, a physician-scientist at the Medical College of Wisconsin. Built with Jekyll and served by GitHub Pages at nick.semenkovich.com (see CNAME).
Stack
- Jekyll on the
github-pagesgem (noGemfileis checked in;.gitignoreand_config.ymlexclude it — installgem install github-pageslocally) - Plugins:
jekyll-sitemap,jekyll-feed,jekyll-seo-tag - Kramdown (GFM) with
rougesyntax highlighting - Sass in
_sass/(partials: base, typography, nav, layout, post, responsive); entrypointassets/css/main.scss - Fonts loaded from Google Fonts: Inter (400/500/600), JetBrains Mono (400)
Repo layout
index.md— home page bio (useslayout: default, not the page layout, because of custom bio flex layout)blog.html— post index at/blog(useslayout: page)404.html— at/404.html(nopage.title, so no.page-headingis rendered)_layouts/—default.html(shell),page.html(default + optional h1),post.html(full article with reading-time + tags)_includes/—head.html,header.html(nav),footer.html_sass/— all styles; compiled viaassets/css/main.scss_config.yml— permalinks are/blog/:year/:month/:title/; default layouts wired per scope_make_favicon.sh/_make_thumbnails.sh— one-shot ImageMagick helpers; both requirebrew install imagemagick._make_thumbnails.shexpectsimages/(source) andtn/images/(dest); neither exists in the repo yet.headshot.png— used byindex.mdand as the source forfavicon.ico- There is no
_posts/directory yet — the blog index falls through to the empty-state message.
Local dev
gem install github-pages
bundle exec jekyll serve --livereload
(The bundle exec workflow in the README presumes you create a Gemfile locally — none is committed.)
Conventions
- Color tokens are hard-coded stone/neutral hex values (e.g.,
#FAFAF9bg,#1C1917text,#2563EBlink). There is no color-variables file — if you edit one, grep across_sass/. - Content width:
.page-contentismax-width: 800px;.content-narrow(used by post bodies) ismax-width: 680px. - Navigation lives in
_includes/header.html; external links getclass="nav-external"which adds a→glyph via CSS. footer.htmlprints the current year fromsite.timeand links to the GitHub source.- Responsive breakpoints are 768px and 480px in
_sass/_responsive.scss. - Body type is justified (
text-align: justifyin_sass/_typography.scss).
Known issues / rough edges (from a quick review)
- Duplicate
<title>tags._includes/head.html:13renders a manual<title>, and `
` on line 21 also emits one. Fix: either remove the manual <title> or pass `
`.
- Dead CSS selector.
_sass/_layout.scss:60targets.blog-index .page-title, but_layouts/page.html:5renders the class.page-heading. Rename or remove. Gemfilemissing but referenced.README.mdtells users tobundle exec jekyll serve, yetGemfile/Gemfile.lockare git-ignored and excluded by_config.yml. New contributors will need to create one themselves._make_thumbnails.shsilently no-ops. It globsimages/*.pngandimages/*.jpg, but noimages/directory exists.- Favicon is heavy.
favicon.icois ~240 KB because it’s generated from the full-resolutionheadshot.pngat many sizes. - README tip is stale. The note about
permalink: /and sitemap duplicates no longer applies —index.mduses the default permalink.
None of these block builds; the site renders and deploys. They’re worth cleaning up opportunistically.
Deploy
Push to main on semenko/semenko.github.io; GitHub Pages builds and serves at the custom domain in CNAME (NICK.SEMENKOVICH.COM). Domain is on the HSTS preload list (see comment in _includes/head.html).