Core Files:
_config.yml - Main Jekyll configuration file containing site metadata (title, description, URL, social links, logo path, SEO settings, Google Analytics ID) and collection settings_site/ - Generated static site (git-ignored, auto-generated on build).jekyll-cache/ - Build cache (git-ignored)CNAME - Contains custom domain for GitHub Pagesrobots.txt - Search engine crawler configuration with sitemap declaration404.html - Custom 404 error pagePages:
All page files are located in the _pages/ directory:
_pages/index.markdown - Homepage displaying portfolio grid (uses portfolio layout)_pages/bio.markdown - About/bio page at /bio/_pages/bio-gallery.markdown - Bio gallery page at /bio-gallery/_pages/works.markdown - Portfolio works page at /works/ with filterable grid_pages/events.markdown - Events page at /events/_pages/contact.markdown - Contact page at /contact/_pages/privacy.markdown - Privacy policy page at /privacy/The _pages/ directory is configured as a Jekyll collection in _config.yml to organize all site pages in one location.
Layouts:
_layouts/portfolio.html - Main layout for pages with navigation and logo_layouts/work.html - Layout for individual portfolio work detail pages_layouts/bio-gallery.html - Layout for bio gallery page with lightbox supportCollections:
_portfolio/ - Portfolio items collection (31 items numbered 01-31)
title, work_id, abstract, category/categories, image, order, metadata, and sections arraywork_id field (alphanumeric with hyphens/underscores only) for linking to events and internal referencesabstract field (1-2 sentences) displayed in grid hover and printable pagemetadata field (centralized metadata structure) with category-specific fieldsinstallations, live-acts, releases, commissions/works/:name/_events/ - Events collection
title, date, time, country, city, venue_name, venue_link, ticket_link, descriptionwork_id field to link event to a specific work (must match work’s work_id)output: false)File Naming Conventions:
Portfolio works use a dual naming system for flexible organization:
YYYY-MM-DD-work-slug.md):
2026-01-01-vibrotanica.md, 2023-09-22-racines-et-resonances.md1900-01-01- prefixorder: 31 appears before order: 30)This dual system allows you to:
Example:
# File: _portfolio/2023-04-20-biosonification.md
---
title: "Biosonification"
order: 29 # Displayed after works with order 30+, before works with order 28-
# ... rest of front matter
---
Assets:
_sass/ - SCSS stylesheets compiled by Jekyll (including _portfolio.scss, _work-detail.scss, _print.scss, _bio-gallery.scss, etc.)assets/js/portfolio.js - JavaScript for portfolio filtering with multi-category supportassets/js/lightbox.js - Lightbox functionality for image galleriesassets/js/cookie-consent.js - GDPR-compliant cookie consent manager for analytics and embedded contentassets/js/print-header-qrcode.js - Universal QR code generator for print header (all pages)assets/js/works-qrcode.js - QR codes for individual works in printable WORKS pageassets/js/bio-links-qrcode.js - QR codes for bio page links in print versionassets/js/bio-gallery-qrcode.js - QR codes for bio gallery images in print versionassets/js/contact-social-qrcodes.js - QR codes for social media links in print version of contact pageassets/js/newsletter-form.js - Newsletter form validation and submission handlingassets/js/qrcode.min.js - QR code generation libraryassets/img/ - Images including logo and portfolio work imagesassets/img/bio-gallery/ - Press photos and artist images for bio galleryIncludes:
_includes/seo.html - SEO optimization with jekyll-seo-tag, structured data, Open Graph tags, and canonical URLs_includes/analytics.html - Privacy-compliant Google Analytics 4 integration with cookie consent_includes/work-modules/ - Modular components for work detail pages (11 modules total):
hero-image.html - Large featured image with optional captiontext.html - Rich text content with Markdown supportdescription.html - Displays page.description field for work overviewimage-grid.html - Grid of images (1-6 columns) with lightbox and captionsiframe.html - Universal iframe embed for any platformmetadata.html - Key-value metadata displayquote.html - Blockquote with attributionspacer.html - Vertical spacing controllinked-events.html - Display events linked to the worksplit-hero-metadata.html - Two-column layout with hero content (2/3) and metadata (1/3)split-bandcamp-metadata.html - Two-column layout with iframe (1/3) and metadata/text (2/3)Main Navigation (appears on all pages):
site.logo in _config.yml| BIO | WORKS | EVENTS | CONTACT |
class="active" based on page URL/bio-gallery/) accessible via bio page linksWorks Page Sub-Navigation:
| Filter buttons: All | Installations | Live Acts | Releases | Commissions |
All pages (BIO, BIO GALLERY, WORKS, EVENTS, CONTACT) are optimized for A4 print with professional layouts and automatic QR code generation. Print PDFs are maintained in the docs/ folder.
Universal Print Features (All Pages):
print-header-qrcode.js generates QR codes dynamically@page settings in CSS (lines 1658+)WORKS Page Print Layout:
works.markdown (lines 50-127)# | Image | Contentmetadata field with labels:
Year: 2024 • Location: Paris • Role: Composer • Technology: Max/MSP • Collaborators: Artist Name • Client: Company • Commissioned by: Festival • ISRC: XXX • UPC: XXX • ISWC: XXXworks-qrcode.jsBIO Page Print Layout:
bio-links-qrcode.js generates QR codes for CV, Press Kit, Pictures linksportfolio.css (lines 1762-2148)BIO GALLERY Page Print Layout:
bio-gallery-qrcode.js generates QR codes for direct image download URLsgallery_images array:
filename and caption fields_sass/_bio-gallery.scssEVENTS Page Print Layout:
portfolio.cssCONTACT Page Print Layout:
grid-template-columns: 1fr 1fr)contact-social-qrcodes.js generates individual QR codes for each social link| Grid layout per item: QR code (left, spanning 2 rows) | Platform Name + URL (right, stacked) |
page-break-inside: avoid ensures items stay togetherPrint CSS Architecture:
portfolio.css lines 1658-2148Collection Configuration (_config.yml):
collections:
portfolio:
output: true
permalink: /works/:name/
sort_by: order
Portfolio Item Structure:
Each file in _portfolio/ follows this format:
---
layout: work
title: Work Title
category: installations|live-acts|releases
image: /assets/img/filename.jpg
order: 1
---
Optional work description content in markdown.
Display Order:
Portfolio Grid:
rgba(66, 135, 245, 0.68)rgba(245, 66, 66, 0.68)rgba(66, 245, 135, 0.68)rgba(245, 176, 66, 0.68)Individual Work Pages:
| Navigation: Previous work (← left) | Back to Works (center) | Next work (→ right) |
Active Navigation States:
border-bottom-color: #333#333#666#999#f9f9f9#e0e0e0Site Settings:
title - Site titleemail - Contact emailbooking_email - Booking contact emaildescription - Site descriptionurl - Base URL (https://www.j3zz.com)repository - GitHub repository (username/repo)logo - Path to logo imageSEO Configuration:
author.name - Author name for SEOauthor.email - Author email for SEOauthor.twitter - Twitter username for SEOsocial.name - Social profile namesocial.links[] - Array of social profile URLs for structured datatagline - Site tagline for SEOdefault_image - Default image for social sharinglang - Site language (e.g., en_US)Analytics:
google_analytics - Google Analytics 4 measurement ID (format: G-XXXXXXXXXX)Social Media:
bandcamp_usernamesoundcloud_usernameyoutube_usernamevimeo_usernamefacebook_usernameinstagram_usernametwitter_usernamelinkedin_usernamegithub_usernameNewsletter:
mailchimp_action_url - Mailchimp form action URLmailchimp_bot_field - Mailchimp bot field name for spam preventionThe site includes comprehensive SEO optimization using the jekyll-seo-tag plugin with custom enhancements.
Jekyll Plugins:
jekyll-seo-tag - Automatic generation of SEO meta tagsjekyll-sitemap - Automatic sitemap generation at /sitemap.xmlSEO Components:
_includes/seo.html - Main SEO include with:
` tag from jekyll-seo-tag plugin
CreativeWork structured datapage.metadata.release_date for publication datepage.last_modified_at (from jekyll-last-modified-at plugin) for modification dateog:type set to “article”article:published_time from release_datearticle:modified_time from last_modified_atarticle:author from site authorarticle:section from work categoryarticle:tag for each category in multi-category worksUser-agent: * / Allow: /Sitemap: https://www.j3zz.com/sitemap.xmlSEO Configuration in _config.yml:
author:
name: J3ZZ
email: hello@j3zz.com
twitter: j3zz
social:
name: J3ZZ
links:
- https://bandcamp.com/iamj3zz
- https://soundcloud.com/j3zz
# ... additional social profile URLs
tagline: "Experimental sound art merging music, generative systems, and immersive installations"
default_image: /assets/img/J3ZZ-logo-black-300px.png
lang: en_US
Benefits:
The site implements privacy-compliant analytics with GDPR-compliant cookie consent management.
Google Analytics 4 Integration:
_includes/analytics.html - Privacy-compliant GA4 implementation:
localStorage.getItem('cookieConsent') for user preferencesconsent.analytics === trueanonymize_ip: trueSameSite=None;SecurecookieConsentUpdated events to reload analytics when consent changeswindow.gaLoaded flaggoogle_analytics in _config.yml with GA4 measurement IDG-XXXXXXXXXXCookie Consent System:
assets/js/cookie-consent.js - GDPR-compliant cookie consent manager:
{analytics: boolean, embedded: boolean, timestamp: ISO8601}cookieConsentUpdated custom event when preferences changehasConsent() - Check if consent has been givengetConsent() - Get current consent preferencessaveConsent(analytics, embedded) - Save preferences and dispatch eventshowBanner() / hideBanner() - Control banner visibilityloadPreferences() - Load saved preferences into UIacceptAll() / acceptSelected() / rejectAll() - Handle user choicesassets/css/style.css (.cookie-consent-banner class)Privacy Features:
Compliance:
Site deploys to GitHub Pages automatically when pushed to the main branch. The custom domain www.j3zz.com is configured via the CNAME file and GitHub Pages settings.
Note: This site uses the github-pages gem instead of a specific Jekyll version to ensure compatibility with GitHub Pages infrastructure.
All page files are located in the _pages/ directory:
_pages/bio.markdown_pages/bio-gallery.markdown (press photos with front matter-based image management)_pages/events.markdown_pages/contact.markdown_pages/privacy.markdown_pages/index.markdown or managed by portfolio collection in _portfolio/Bio Gallery Front Matter Structure:
---
layout: bio-gallery
title: Bio Gallery
permalink: /bio-gallery/
gallery_images:
- filename: photo-01.jpg
caption: Descriptive caption with event and equipment details
- filename: photo-02.jpg
caption: Another descriptive caption
---
Gallery images should be placed in assets/img/bio-gallery/ directory.
Change the logo path in _config.yml:
logo: /assets/img/your-logo.png
Restart Jekyll server after config changes.