CLAUDE.md

Project Overview

Personal/professional homepage for Dr Stuart Grey — Senior Lecturer in Engineering Systems Design at the University of Glasgow and founder of Student Voice AI. Built with Eleventy 3 and Tailwind CSS 4, hosted on Netlify.

Live site: stugrey.com

Tech Stack

Development

npm install          # install deps
npm run dev          # Eleventy serve + Tailwind watch in parallel
npm run build:css    # one-off Tailwind build to css/style.css
npm run dev:css      # Tailwind watch only
npm run eleventy:serve  # Eleventy dev server only

npm-run-all orchestrates parallel dev processes.

Directory Structure

.eleventy.js          # Eleventy config — passthrough copies, dir settings
tailwind.css          # Tailwind v4 entry point (@import, @source, @plugin)
tailwind.config.js    # Legacy config (content paths, typography plugin) — may be unused with v4
purgecss.config.js    # Legacy PurgeCSS config — likely unused with Tailwind v4
style.css             # Legacy full Tailwind build (1.8 MB) — pre-v4 artifact
index.html            # Homepage (Liquid template, not in any collection)
_data/site.json       # Global data: { "title": "Dr Stuart Grey" }
_includes/            # Partials: head.html, header.html, footer.html
_layouts/             # Layouts: post, page, default, publications, articles, engagement, compress
_posts/               # All content as Markdown files (~77 posts)
publications/         # Section index (index.md → publications layout)
articles/             # Section index (index.md → articles layout)
engagement/           # Section index (index.md → engagement layout)
Images/               # Media organised by date: Images/YYYY_MM_DD_event_name/
css/style.css         # Tailwind build output (git-tracked, generated by build:css)
static/_redirects     # Netlify redirects (Plausible proxy, short URL /3092)
admin/                # Netlify CMS (config.yml + index.html)
documents/            # PDFs (handouts, whitepapers)
templates/            # Scaffolding templates (article.md) for new posts
_site/                # Eleventy build output (gitignored)

Content Model

All content lives in _posts/ as Markdown files. The tags frontmatter field determines which Eleventy collection a post belongs to, and therefore which section it appears in:

Tag Collection Section page Layout used
publication collections.publication /publications/ publications.html
article collections.article /articles/ articles.html
engagement collections.engagement /engagement/ engagement.html

Some older posts have no tag — they still render via the post layout but don't appear in section listings.

Post Frontmatter Reference

---
layout: post                          # always "post" for content pages
title: "Post Title"
date: YYYY-MM-DD HH:MM:SS            # or ISO 8601 with T/Z
description: "One-line summary."       # shown in listing pages
tags: article                          # one of: article, engagement, publication
permalink: "/2026/03/29/CLAUDE/index.html"
# Optional fields:
authors: "Name and Name"              # publications only
journal: "Journal Name"               # publications only
social_image: "YYYY_MM_DD/image.png"  # relative to /Images/
overview: "OG/Twitter description"     # used in meta tags
sidenote: '<img src="...">'           # thumbnail HTML for listing pages
categories:                           # present but typically empty/null
---

Post File Naming

Files follow the pattern: YYYY-MM-DD-slug-with-dashes.md

Permalink Pattern

All posts use: /YYYY/MM/DD/slug/index.html — generated via the Liquid permalink in frontmatter.

Layouts

All layouts include head.htmlheader.html → content → footer.html.

Template Globals

Passthrough Copies

Configured in .eleventy.js:

Images

Design Context

See .impeccable.md for full design guidelines. Key points:

Important Notes