CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this is
This is the Jekyll source for hardkoded.com, Darío Kondratiuk’s personal blog (hosted as kblok.github.io on GitHub Pages). It’s a fork/customization of the “Beautiful Jekyll” theme. There is no application code, build pipeline, or test suite — just Jekyll content, layouts, and static assets.
Commands
Serve the site locally (uses the github-pages gem, pinned to match GitHub Pages’ actual environment):
bundle install
bundle exec jekyll serve
Site is served at http://localhost:4000.
Alternatively, via Docker (uses an old, pinned toolchain — Dockerfile installs Jekyll 3.1.6 and specific gem versions):
docker build -t kblok.github.io .
docker run -p 4000:4000 kblok.github.io
There is no linter, formatter, or test suite in this repo.
Content architecture
_posts/— main blog posts (Markdown), filename patternYYYY-MM-DD-slug.md. Front matter usestitle,tags(space-separated string, e.g.tags: puppeteer-sharp csharp), andpermalink(posts use custom permalinks like/blog/...rather than the site-wide/:year-:month-:day-:title/default). Layout defaults topostvia_config.ymlscoping rules, so it usually doesn’t need to be declared per-file._tils/— a separate Jekyll collection (“Today I Learned” short posts), rendered ontil.html. Front matter here explicitly setslayout: post,tagsas a comma-separated string (different convention from_posts), and a/til/...permalink.tag/*.md— one stub page per tag (layout: tag_index), used as the target for tag-index URLs._data/tags.ymllists known tag slugs/names. Actual tag→post indexing is generated automatically by_plugins/_tag_gen.rb(a JekyllGeneratorthat builds aTagIndexpage per tag found insite.tags, using_layouts/tag_index.html) — you don’t need to hand-maintain per-tag post lists.goto/*.md— short-link redirect pages (layout: redirected,redirect_to: <url>), rendered via_layouts/redirect.html(meta-refresh + JS redirect). Used for stable outbound links (e.g. Slack invites) that might change destination later without changing the short URL.ui-testing-with-puppeteer/— a large flat set of standalone reference.mdnotes (not a Jekyll collection with an index); mostly source material/snippets related to the “UI Testing with Puppeteer” book._layouts/and_includes/— standard Jekyll templating.base.htmlis the root layout;default.html/page.html/post.html/minimal.htmlbuild on it. Analytics/social/comments snippets live in_includes/(google_analytics.html,gtm_head.html/gtm_body.html,disqus.html,social-share.html) and are pulled in via_config.ymlvalues (google_analytics,gtm,disqus) rather than hardcoded per page._config.yml— site-wide settings: nav bar links, colors, social links (_data/SocialNetworks.ymlbacks thesocial-network-linkskeys), Disqus/GA IDs, permalink scheme, and thedefaultsblock that setslayout: postfor everything under_postsandlayout: pagefor everything else.
Conventions to follow when adding content
- New blog posts: add to
_posts/with aYYYY-MM-DD-slug.mdfilename,title,tags(space-separated), and an explicitpermalink: /blog/<slug>. - New TILs: add to
_tils/withYYYY-MM-DD-slug.md, and front matter matching the existing pattern (layout: post, comma-separatedtags,permalink: /til/<slug>). - Introducing a brand-new tag: add an entry to
_data/tags.ymland create the matchingtag/<slug>.mdstub (copy an existing one and changetag/title/permalink) — the tag index generator does the rest. - Adding a redirect/short link: add a file under
goto/followinggoto/pptr-slack.md’s front matter shape.