This is Si Jobling's personal website built with Eleventy (11ty), a static site generator. The site is based on the eleventy-high-performance-blog starter and is deployed on Netlify.
Site URL: https://sijobling.com
Primary Technologies: Eleventy 1.0, Node.js 18.x, Nunjucks templating, Markdown
.eleventy.js - Main Eleventy configuration file that:
package.json - Dependencies and build scripts
npm run build, npm run servenpm run watchnpm run testrollup.config.js - JavaScript bundling configuration for client-side code
/posts/ - Content Directory #The main content area organized by content type:
/posts/blog/ - Main blog posts organized by year (2011-2025)/posts/aside/ - Shorter thoughts/notes organized by year/posts/portfolio/ - Portfolio/project showcase items/posts/weeknotes/ - Weekly update posts (numbered 1-N)Each directory has a posts.11tydata.js file that sets default frontmatter for that section.
/_data/ - Global Data Files #Data files accessible to all templates:
metadata.json - Site-wide metadata (title, URL, author, feeds)csp.js - Content Security Policy configurationgoogleanalytics.js - Google Analytics configurationisdevelopment.js - Development mode detectionwebvitals.js - Web Vitals tracking configuration/_includes/ - Templates & Layouts #Nunjucks templates for rendering pages:
/layouts/base.njk - Base HTML template/layouts/home.njk - Homepage layout/layouts/post.njk - Individual post layoutpostslist.njk - Reusable component for listing postsclap.njk - Clapping/applause component/_11ty/ - Custom Plugins & Transforms #Custom Eleventy plugins and HTML transformations:
apply-csp.js - Applies Content Security Policy headersblurry-placeholder.js - Generates blurred image placeholdersgetTagList.js - Extracts and manages post tagsimg-dim.js - Adds image dimensions to img tagsjson-ld.js - Adds JSON-LD structured dataoptimize-html.js - Minifies and optimizes HTML outputsrcset.js - Generates responsive image srcsetsvideo-gif.js - Converts videos to GIF formatyoutube-embed.js - Embeds YouTube videosyoutube-html-transform.js - Transforms YouTube embeds in HTML/img/ - Image Assets #Image storage organized by category:
/img/assets/ - General assets organized by year (2010-2025)/img/posts/portfolio/ - Portfolio-specific images/img/remote/ - Cached remote images (downloaded and optimized)/img/favicon/ - Favicon assets/css/ & /js/ - Static Assets #/css/main.css - Main stylesheet/js/cached.js - Cached JavaScript/js/web-vitals.js - Web Vitals tracking code/feed/ - RSS/Atom Feeds #Templates for various feed formats:
feed.njk - Main RSS feedjson.njk - JSON feedpodcast.njk - Podcast feedhtaccess.njk - .htaccess file for Apache servers/api/ - API Endpoints #ga.js - Google Analytics API endpoint/test/ - Tests #Mocha test files for validating the build:
test-generic-post.js - Tests for post functionality/third_party/ - Third-Party Code #/eleventy-plugin-local-images/ - Plugin for downloading and caching remote images locallyThe site supports different content types with their own templates and collections:
sitemap.xml.njk)npm run watchnpm run build_site/posts/* directoryAll generated files go to /_site/ directory (not tracked in repo).
The site is deployed on Netlify (based on the Netlify badge in README).
Configuration files:
_headers - HTTP headers configuration_redirects - URL redirect rulesCreate a new .md file in the appropriate directory:
/posts/blog/YYYY/post-slug.md/posts/aside/YYYY/post-slug.md/posts/portfolio/YYYY/post-slug.md/posts/weeknotes/N.mdAdd frontmatter:
---
title: "Post Title"
date: 2025-01-03
tags:
- tag1
- tag2
---title - Post titledate - Publication date (YYYY-MM-DD format)tags - Array of tags for categorizationdescription - Optional meta descriptionlayout - Template to use (defaults set in .11tydata.js)Eleventy automatically creates collections:
collections.blog - All blog postscollections.aside - All aside postscollections.portfolio - All portfolio itemscollections.weeknotes - All weeknotescollections.tagList - All unique tags across the siteThese collections are used in:
index.njk - Homepagearchive.njk - Archive pagetags.njk - Tag listing pagesasides.njk - Asides listing/posts/blog/2026/new-post-slug.mdnpm run build to testEdit /_data/metadata.json to change:
.eleventy.jseleventyConfig.addPlugin().njk file in /_includes/layout: your-template.njkEdit /css/main.css - changes are automatically processed during build.
/src/main.js for bundled JS/js//src/main.js to output/_site/ - they're auto-generated/img/ subdirectories/img/remote/npm run testnpm run clean to clear old generated postsnpm install to ensure dependencies are installed.eleventy.js/img/ directory/posts/ subdirectoryposts.11tydata.js has correct settings/css/main.css for conflictsMIT License (see LICENSE file)
Last Updated: January 2026