This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a Jekyll static site deployed to GitHub Pages at www.j3zz.com. The site is a portfolio website with a custom design inspired by julienbayle.net, featuring a grid-based portfolio system with filterable works.
Key Features:
abstract for grid/print lists, description for work detail pagesbundle exec jekyll serve
Starts local development server at http://localhost:4000 with auto-regeneration enabled. The server watches for file changes and rebuilds automatically.
Important: Changes to _config.yml require a server restart to take effect.
bundle exec jekyll build
Generates the static site in the _site/ directory.
⚠️ IMPORTANT: All testing happens LOCALLY. GitHub Actions only builds and deploys - it does NOT run tests!
Tests run automatically before EVERY commit:
git add .
git commit -m "Your message" # ← Full tests run here automatically
git push origin main # ← Push proceeds immediately (tests already passed)
The pre-commit hook automatically runs the complete test suite (./test-before-push.sh) before EVERY commit. This ensures you never commit broken code.
Commits will be blocked if tests fail. Fix the errors, then try committing again.
Optional - Manual testing during development:
./test-before-push.sh
Run this to test your changes before committing. Useful for catching errors early during development.
Individual test commands:
yamllint .
Validates YAML syntax and formatting in all configuration files and workflows. Very fast.
bundle exec rake test
Runs automated tests (html-proofer) to validate links, images, and HTML structure.
npm run lighthouse
Runs Lighthouse CI for performance, accessibility, and SEO validation (requires Chrome/Chromium). Optional but recommended for major releases.
npm run test:print
Runs print tests to validate QR codes, print layouts, and A4 formatting (requires Chrome/Chromium).
Note: Print tests may skip locally in WSL due to Chrome availability, but the pre-push hook handles this gracefully.
bundle install
Run after modifying Gemfile or when setting up the project for the first time.
npm install
Installs Node.js dependencies for Lighthouse CI testing and Lefthook git hooks.
bundle update github-pages
Updates GitHub Pages and all associated Jekyll dependencies.
This project uses Lefthook to enforce local testing before commits and pushes.
⚠️ CRITICAL: These hooks are your ONLY safety net! GitHub Actions does NOT run tests.
Setup (first time only):
npm install
npx lefthook install
What runs automatically and BLOCKS commits if tests fail:
./test-before-push.sh on ALL files (YAML, build, HTML, print tests - ~30-60 sec)Tests run before EVERY commit to ensure you never commit broken code. All commits are validated and safe.
Skipping hooks (use with EXTREME caution):
LEFTHOOK=0 git commit -m "message"
# or
git commit --no-verify -m "message"
⚠️ WARNING: Skipping hooks means committing untested code. Only skip if:
./test-before-push.sh manually and all tests passedManual hook testing:
npx lefthook run pre-commit
npx lefthook run pre-push
Configuration is in lefthook.yml.
New to the project? See Development Workflow for complete step-by-step instructions from making changes to deployment with all necessary commands.
Quick workflow:
This project’s documentation is organized into topic-specific files for better performance and maintainability:
⭐ START HERE - Complete workflow from making changes to deployment.
Read this for:
Site structure, navigation system, portfolio configuration, styling, print functionality, SEO, analytics, and deployment details.
Read this for:
Front matter standards, adding portfolio works and events, multi-category support.
Read this for:
Complete reference for all 11 modular layout components with examples.
Read this for:
Category-specific metadata templates and field documentation.
Read this for:
Workflows, guidelines, and standards for creating and maintaining portfolio works.
Read this for:
Automated testing system to prevent breaking changes during development.
Read this for:
⭐ START HERE - Step-by-step practical guide for testing and deployment.
Read this for:
_portfolio/YYYY-MM-DD-work-slug.md (e.g., 2026-01-01-new-work.md using the actual release/creation date)bundle exec jekyll serve/works/_events/YYYY-MM-DD-event-name.md (e.g., 2025-06-15-festival-performance.md using the actual event date)work_id field/events/_pages/bio.markdown_pages/bio-gallery.markdown (press photos with front matter-based image management)_pages/events.markdown_pages/contact.markdown_pages/index.markdown or managed by portfolio collection in _portfolio/All page files are located in the _pages/ directory.
For detailed information, see Architecture > Modifying Page Content
Edit _config.yml for:
Remember: Restart Jekyll server after config changes.
See Architecture > Configuration Variables for all available settings.
The contact page includes a Mailchimp newsletter signup form. To enable it:
<form action="...">b_XXXXXXXXXX_XXXXXXXXXX)_config.yml:
mailchimp_action_url: "https://XXXX.usX.list-manage.com/subscribe/post?u=XXXXXX&id=XXXXXX"
mailchimp_bot_field: "b_XXXXXXXXXX_XXXXXXXXXX"
If Mailchimp is not configured, the form will show “Newsletter signup coming soon.”
The site includes comprehensive SEO optimization powered by the jekyll-seo-tag plugin with custom enhancements.
SEO Features:
jekyll-sitemap plugin)Configuration in _config.yml:
# Basic site info
title: J3ZZ
description: >-
French sound artist creating experimental electronic music...
# Author information
author:
name: J3ZZ
email: hello@j3zz.com
twitter: j3zz
# Social profiles for SEO
social:
name: J3ZZ
links:
- https://bandcamp.com/iamj3zz
- https://soundcloud.com/j3zz
# ... additional social links
# Additional SEO settings
tagline: "Experimental sound art merging music, generative systems, and immersive installations"
default_image: /assets/img/J3ZZ-logo-black-300px.png
lang: en_US
SEO Implementation:
_includes/seo.html - Main SEO include with jekyll-seo-tag and custom enhancementsrobots.txt - Search engine crawler configurationNote: The site automatically generates a sitemap at /sitemap.xml and declares it in robots.txt.
The site includes privacy-compliant Google Analytics 4 integration that respects GDPR cookie consent preferences.
To enable Google Analytics:
G-XXXXXXXXXX)_config.yml:
google_analytics: G-XXXXXXXXXX # Replace with your actual GA4 measurement ID
Privacy Features:
anonymize_ip: true)SameSite=None;Secure)Implementation:
_includes/analytics.html - Privacy-compliant GA4 integrationcookieConsentUpdated events to load/reload analyticsNote: If google_analytics is not configured in _config.yml, no analytics code is loaded.
The site includes a GDPR-compliant cookie consent system for managing user privacy preferences.
Cookie Categories:
User Controls:
Implementation:
assets/js/cookie-consent.js - Cookie consent manager_layouts/default.html){analytics: boolean, embedded: boolean, timestamp: ISO8601}cookieConsentUpdated events for analytics and other scriptsCustomization:
Cookie banner styling can be customized in assets/css/style.css (search for .cookie-consent-banner).
Reference these portfolio works for implementation examples:
_portfolio/1900-01-01-complete-template.md): ⭐ ULTIMATE TEMPLATE - Comprehensive reference with ALL metadata fields and module types_portfolio/1900-01-01-modular-example.md): All standard module types_portfolio/1900-01-01-split-layout-example.md): Split layout modules_portfolio/1900-01-01-centralized-metadata-example.md): Centralized metadata system⚠️ CRITICAL: All testing happens LOCALLY. GitHub Actions does NOT run tests!
The site includes comprehensive automated testing that runs on your machine before pushing:
Tests enforced by Lefthook git hooks:
--full flag)Required workflow:
./test-before-push.sh (or let Lefthook run it automatically on git push)Getting started:
Site deploys automatically to GitHub Pages when pushed to the main branch. Custom domain www.j3zz.com is configured via CNAME file.
Deployment workflow:
./test-before-push.sh or automatic via Lefthook)main branch⚠️ Important: GitHub Actions does NOT run tests - it only builds and deploys. Your local Lefthook hooks are the ONLY quality gate.
Note: This site uses the github-pages gem for compatibility with GitHub Pages infrastructure.
This codebase follows modern web development best practices and maintains high code quality standards.
Modern Standards:
var declarations (replaced with const/let)Performance Utilities:
debounce() and throttle() functions available globally via assets/js/utils.jsFiles:
assets/js/utils.js - Performance helper functionsassets/js/cookie-consent.js - GDPR-compliant consent management with localStorage error handlingassets/js/portfolio.js - Portfolio filteringassets/js/navigation.js - Mobile menu with ARIA supportassets/js/newsletter-form.js - Form validationassets/js/lightbox.js - Image galleryARIA Support:
aria-expanded state management on mobile menuImplementation:
HTTP Security Headers:
X-Content-Type-Options: nosniff - Prevents MIME type sniffingX-Frame-Options: SAMEORIGIN - Prevents clickjackingReferrer-Policy: strict-origin-when-cross-origin - Controls referrer informationError Handling:
File: _includes/seo.html contains security meta tags
Script Loading:
defer attribute for non-blocking loadCSS:
CSS Custom Properties:
_sass/_variables.scssVariables Available:
--color-text, --color-background, --color-link, etc.--spacing-xs through --spacing-3xl--font-family-base, --font-size-*, --line-height-base--max-width-content, --border-radius, --transition-speedModular Architecture:
Based on modern web development best practices:
| Category | Score | Status |
|---|---|---|
| JavaScript Quality | 9.5/10 | ✅ Excellent |
| Accessibility | 9/10 | ✅ Strong |
| Security | 8.5/10 | ✅ Good |
| Performance | 8/10 | ✅ Good |
| Maintainability | 9/10 | ✅ Excellent |
| SEO | 9/10 | ✅ Comprehensive |
| Error Handling | 9/10 | ✅ Robust |
Overall: 8.9/10 - Top 10-15% of websites in code quality.
Consider these advanced improvements if needed: