This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a personal blog website built with Pelican, a Python-based static site generator. The site is deployed to AWS S3 with CloudFront for distribution.
- Content is written in Markdown (.md) and reStructuredText (.rst)
- Uses a custom theme ("offby1")
- Includes custom plugins for social media integration
- Deploys to AWS S3/CloudFront
# Start development server with live reload
just serve
# Build the site with development settings
just build
# Build with production settings
just generate
# Build and deploy to S3 + invalidate CloudFront cache
just publish
# Create a new blog post
just new_post# Compile dependencies
just compile-deps
# Install dependencies
just install-deps
# Both compile and install dependencies
just deps
# Update dependencies
just update-deps# Generate gallery metadata for photos
uv run invoke photo-gallery-gen --location=path/to/gallery
# List all used tags
uv run invoke list-tags
# List all categories
uv run invoke list-categoriescontent/: All blog contentposts/: Blog postspages/: Static pagesimages/: Image filesextra/: Extra files like robots.txt, favicon.ico
themes/offby1/: Custom themeplugins/: Custom Pelican pluginspelicanconf.py: Development settingspublishconf.py: Production settings
New posts should follow this format (Markdown):
Title: Post Title
Slug: post-title-slug
Date: YYYY-MM-DDTHH:MM:SS
Tags: tag1, tag2
Category: CATEGORY
Author: Chris Rose
Email: offline@offby1.net
Status: draft
Summary: Brief summaryPhoto galleries should have:
- Image files
captions.txt: Photo captionsexif.txt: EXIF metadata
The site uses:
uvfor Python dependency managementjustas a command runnerinvokefor more complex tasks- AWS S3 for hosting
- CloudFront for distribution
The deployment workflow:
- Build site with production settings
- Upload to S3 bucket
ideas.offby1.net - Invalidate CloudFront distribution to refresh caches
- Python code follows
ruffformatting style - Follows modern Python practices (pathlib over os, etc.)
- When possible, make minimal changes to maintain compatibility