CLAUDE.md - AI Assistant Guide for jareth.github.io
Project Overview
This is a personal portfolio website (jareth.github.io) for Jareth van Bone, deployed via GitHub Pages. The site showcases professional experience, projects, and serves as a digital presence.
Project Type: Jekyll-based static website with Tailwind CSS Deployment: GitHub Pages Primary Purpose: Portfolio and professional showcase
Technology Stack
Core Technologies
- Jekyll (static site generator) - Compatible with GitHub Pages
- Tailwind CSS (v3.4.1) - Utility-first CSS framework
- Webpack (v5.90.3) - Asset bundler
- Ruby/Bundler - Jekyll dependency management
- Node.js/Yarn - JavaScript dependency management
Build Tools
- PostCSS - CSS processing with plugins:
tailwindcss- Core Tailwind functionalitytailwindcss/nesting- Nested CSS supportcssnano- CSS minificationautoprefixer- Vendor prefix management@fullhuman/postcss-purgecss- Removes unused CSS (production only)
- Webpack plugins:
MiniCssExtractPlugin- CSS extractionWebpackManifestPlugin- Generates manifest at_data/manifest.ymlCleanWebpackPlugin- Cleans dist folder before builds
Jekyll Plugins
# GitHub Pages compatible
- jekyll-default-layout
- jekyll-optional-front-matter
- jekyll-titles-from-headings
- jekyll-relative-links
# Custom plugins
- jekyll-feed
- jekyll-sitemap
- jekyll-seo-tag
Directory Structure
jareth.github.io/
├── _config.yml # Jekyll configuration
├── _data/
│ ├── manifest.yml # Webpack manifest (auto-generated)
│ └── navigation.yml # Site navigation structure
├── _includes/
│ ├── analytics.html # Analytics tracking
│ ├── navigation.html # Navigation component
│ └── video.html # Video embed component
├── _layouts/
│ ├── default.html # Base layout template
│ ├── post.html # Blog post layout
│ └── project.html # Project detail layout
├── _posts/ # Blog posts (date-based: YYYY-MM-DD-title.md)
├── _projects/ # Project case studies (Jekyll collection)
├── assets/
│ ├── css/
│ │ └── site.css # Main CSS entry point (Tailwind imports)
│ └── images/ # Image assets
├── dist/ # Webpack output (committed to repo)
│ ├── main.[hash].css # Compiled CSS
│ └── main.[hash].js # Compiled JS
├── _site/ # Jekyll build output (gitignored)
├── node_modules/ # Node dependencies (gitignored)
├── about.md # About page
├── blog.html # Blog listing page
├── index.html # Homepage
├── projects.html # Projects listing page
├── webpack.config.js # Webpack configuration
├── tailwind.config.js # Tailwind configuration
├── postcss.config.js # PostCSS configuration
├── purgecss.config.js # PurgeCSS configuration
├── package.json # Node dependencies
├── Gemfile # Ruby dependencies
└── README.md # Developer documentation
Development Workflow
Initial Setup
- Install Ruby dependencies:
bundle install - Install Node dependencies:
yarn install
Local Development
Recommended approach (runs both Jekyll and Webpack watch):
yarn run watch & bundle exec jekyll serve && fg
This command:
- Starts Webpack in watch mode (auto-recompiles CSS)
- Starts Jekyll development server (auto-regenerates HTML)
- Makes site available at
http://localhost:4000
Production Build
Two-step process required due to PurgeCSS dependency on final HTML:
- Build Jekyll in production mode:
JEKYLL_ENV=production bundle exec jekyll build - Build Webpack in production mode:
yarn run prod
The production build:
- Generates hashed filenames for cache busting
- Runs PurgeCSS to remove unused CSS (scans
_site/**/*.html) - Minifies CSS with cssnano
- Updates
_data/manifest.ymlwith new asset paths
Important: For GitHub Pages deployment, commit the files in the dist/ folder. The _site/ folder is gitignored and regenerated by GitHub Pages.
Available npm Scripts
{
"prod": "NODE_ENV=production yarn run webpack",
"dev": "NODE_ENV=development yarn run webpack",
"watch": "NODE_ENV=development yarn run webpack --watch"
}
Content Management
Jekyll Collections
Projects Collection (_projects/)
- Defined in
_config.ymlwithoutput: true - Default layout:
project - Each project is a markdown file with front matter
Example project front matter:
---
short_name: slide
name: SLiDE
client: Hoodlum / Foxtel / Playmaker
preview: https://assets.vanbone.com/images/slide_proj.jpg
---
Posts Collection (_posts/)
- Standard Jekyll posts
- Naming convention:
YYYY-MM-DD-title.md - Currently underutilized (blog section commented out in navigation)
Navigation
Navigation is data-driven via _data/navigation.yml:
- name: Home
link: /
- name: About
link: /about.html
- name: Projects
link: /projects.html
- name: LinkedIn
link: https://www.linkedin.com/in/jareth/
Blog navigation is currently commented out.
Pages
- index.html - Homepage with service offerings
- projects.html - Loops through
site.projectscollection - blog.html - Loops through
site.posts(blog section exists but not linked) - about.md - About page
Styling Conventions
Tailwind CSS Configuration
Custom font family:
fontFamily: {
sans: ['Quicksand', ...defaultTheme.fontFamily.sans]
}
Content scanning:
content: ['./_site/**/*.{html,js}']
Main Stylesheet
Location: assets/css/site.css
This file imports Tailwind layers and any custom CSS:
@tailwind base;
@tailwind components;
@tailwind utilities;
CSS Class Patterns
The site uses Tailwind utility classes extensively:
- Layout:
flex,flex-col,flex-wrap,justify-center - Spacing:
p-4,m-4,px-6,py-4 - Sizing:
max-w-sm,w-full,h-24 - Colors:
bg-teal-300(primary brand color) - Shadows:
shadow-lg - Typography:
font-sans,font-bold,text-base
Asset Manifest Integration
Jekyll uses the Webpack manifest to reference assets:
<link rel="stylesheet" href="/dist/main.c209ba6d7c758663c166.css">
This ensures cache-busted URLs are used in production.
Git Workflow
Branch Strategy
- Main branch: Not explicitly named in recent commits; uses default branch
- Feature branches: Use
claude/prefix (e.g.,claude/claude-md-mics2xu438u0cqay-014NRNW85DaERPCe5GnEN1Wt)
Commit Message Style
Based on recent commits:
- Descriptive and concise
- Examples: “Update versions and rebuild”, “Update index.html”
- Focus on what changed rather than why (conventional for this repo)
Files to Commit
Always commit:
- Source files (
_config.yml,*.md,*.html, layouts, includes) - Configuration files (
webpack.config.js,tailwind.config.js, etc.) dist/folder contents (required for GitHub Pages)package.json,Gemfile, lock files
Never commit (gitignored):
node_modules/_site/.jekyll-cache/.idea/
Deployment
Platform: GitHub Pages Domain: jareth.github.io (custom domain configured via CNAME)
Deployment Process
- Make changes to source files
- Run production build (Jekyll first, then Webpack)
- Commit changes including updated
dist/files - Push to repository
- GitHub Pages automatically rebuilds and deploys
Note: GitHub Pages runs Jekyll build automatically, but uses the committed dist/ files for assets.
Key Conventions for AI Assistants
When Modifying Styles
- Edit
assets/css/site.cssfor custom CSS or Tailwind imports - Use Tailwind utility classes in HTML templates when possible
- Run the development watch command to see changes immediately
- For production: Remember the two-step build process (Jekyll → Webpack)
When Adding Content
New Project:
- Create markdown file in
_projects/with appropriate front matter - Required fields:
short_name,name,client,preview - Use
projectlayout (set automatically by defaults) - Reference the example in
_projects/slide.md
New Blog Post:
- Create file in
_posts/with formatYYYY-MM-DD-title.md - Add front matter with at minimum
titleandlayout: post - Note: Blog section currently not visible in navigation
New Page:
- Create HTML or markdown file in root directory
- Add front matter with
titleandlayout - Update
_data/navigation.ymlif page should appear in menu
When Modifying Layouts
- Default layout (
_layouts/default.html) wraps all pages - Includes header with logo and navigation
- Includes footer with copyright notice
- Uses flexbox for sticky footer layout
- References manifest for asset URLs
- Includes analytics only in production (
jekyll.environment == 'production')
When Working with Dependencies
Update Ruby gems:
bundle update
Update Node packages:
yarn upgrade
Important: Test after updates, especially github-pages gem which may have specific version requirements.
Security Considerations
Recent dependency updates addressed security vulnerabilities:
- browserify-sign: 4.2.0 → 4.2.3
- nokogiri: 1.15.2 → 1.16.3
- postcss: 8.2.13 → 8.4.31
When updating dependencies, check for security advisories.
Image and Asset Hosting
Images are hosted externally at https://assets.vanbone.com/:
- Project previews
- Project detail images
- Videos (multiple formats: mp4, webm, ogg, flv)
This keeps the repository lightweight and separates content from code.
Video Embedding
Use the video.html include for responsive video embeds:
<video
width="800"
height="400"
poster="https://assets.vanbone.com/images/slide_4.jpg"
controls="">
<source src="https://assets.vanbone.com/videos/Slide_StepByStep.mp4" type="video/mp4">
<source src="https://assets.vanbone.com/videos/Slide_StepByStep.webm" type="video/webm">
<source src="https://assets.vanbone.com/videos/Slide_StepByStep.ogv" type="video/ogg">
<source src="https://assets.vanbone.com/videos/Slide_StepByStep.flv" type="video/f4v">
</video>
Performance Considerations
- PurgeCSS in production removes unused Tailwind classes
- Hashed filenames enable long-term caching
- cssnano minifies CSS
- External asset hosting reduces repository size
- Font optimization: Uses
display=swapfor Google Fonts
Common Tasks Reference
Add a new navigation link
Edit _data/navigation.yml and add entry with name and link
Change brand color
Search and replace bg-teal-300 or extend Tailwind config with custom color
Update site metadata
Edit front matter in pages or update _config.yml for site-wide settings
Add custom Tailwind utilities
Edit assets/css/site.css after the Tailwind directives
Rebuild after config changes
Restart Jekyll server and Webpack watch (config changes not auto-detected)
Check build errors
- Jekyll errors appear in Jekyll serve output
- Webpack errors appear in Webpack output
- Check both terminals when running watch mode
Browser Support
- Modern browsers (ES6+ JavaScript)
- CSS Grid and Flexbox required
- Font loading uses
display=swapfor better UX
Analytics
Google Analytics is included but only loads when jekyll.environment == 'production'
Additional Notes
- Site uses permalink
/for homepage (defined in front matter) - Footer includes copyright and asset ownership disclaimer
- Responsive design using Tailwind’s mobile-first approach
- SVG logo at
assets/images/jvb_logo.svg - Favicon present at root:
favicon.ico
Last Updated: 2025-11-24 Jekyll Version: Compatible with GitHub Pages Node Version: Modern LTS recommended (v14+) Ruby Version: 2.7+ recommended