CLAUDE.md

CLAUDE.md

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

Commands

# Install dependencies (both Ruby and Node)
bundle install && npm install

# Serve locally with live reload
bundle exec jekyll serve --livereload

# Build
bundle exec jekyll build

# Lint SCSS
npx stylelint "_sass/**/*.scss" "assets/css/**/*.scss"

# Lint YAML
yamllint _config.yml _data/ .github/

# HTML validation (runs build first)
bundle exec jekyll build && bundle exec htmlproofer ./_site --disable-external

Architecture

This is a Jekyll static site for Helm Information Security, deployed to GitHub Pages at helminfosec.com.

Content model:

  • _data/services.yml — authoritative service definitions; service pages in services/ pull from this via Liquid
  • _data/posts.json — auto-generated blog posts synced daily from Substack via .github/workflows/fetch-substack.yml + _scripts/parse_substack.py; do not hand-edit
  • products/ — standalone product pages with their own product layout

Layouts and includes:

  • _layouts/default.htmlpage.html (standard pages) / service.html (service pages) / product.html (product pages)
  • _includes/ holds partials: head.html, header.html, footer.html, json-ld-org.html (Schema.org structured data)

Styles:

  • Entry point: assets/css/main.scss
  • Source: _sass/*.scss — follow existing BEM naming (block__element--modifier) and use only lowercase hyphenated dollar variables
  • Font: Inter (self-hosted woff2 at assets/fonts/)

Navigation and products index:

  • The main nav is in _includes/header.html; the products index is products/index.html
  • When adding a new service or product page, update both the nav and the relevant index page

CI

All PRs run: SCSS lint → YAML lint → bundle exec jekyll build + HTML Proofer → bundle audit check. All four must pass before merging.