# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
Builds is a static site of craft build write-ups: templates, 3D print files and step-by-step guides. There is no build step and no backend.
**Live URL:** https://builds.kestrelsnest.social
## File Structure
- `index.html` - Site index (HTML/CSS in one file, no JavaScript). One `
` card per build, newest first.
- `og-image.jpg` - OpenGraph image for the index, 1200 x 630
- `deploy` - Rsync deployment script
- `/` - One folder per build, self-contained: `index.html`, `img/`, `dl/`
- `greenman/` - Green Man mask
## Conventions
- Each build folder is self-contained and uses relative links, so it works at any path.
- Build pages and the index share a look: Bricolage Grotesque for headings, Inter for text, the same green accent and neutral tokens, light and dark via `prefers-color-scheme`.
- Downloads live in `/dl/`. Zip files there are part of the site, so `*.zip` is deliberately NOT in `.gitignore`.
- `greenman/index.html` is generated from the mask kit's own source (not in this repo). Hand edits to it are lost when the kit is regenerated; change the source and re-copy.
## Adding a build
1. Create `/index.html` with its `img/` and `dl/`.
2. Add a card to the top of the list in the top-level `index.html`.
3. `./deploy -n`, then `./deploy`.
## Development
```bash
python3 -m http.server 8000
```
Then open `http://localhost:8000`.
## Deployment
The `deploy` script uses rsync to push to YunoHost (a My Webapp static app, like pantry):
```bash
./deploy -n # dry run, changes nothing
./deploy # push
```
**Important deployment notes:**
- `DIR` in `deploy` is `/var/www/my_webapp__3/www`. The script refuses to run if it is ever reset to the `my_webapp__N` placeholder.
- rsync runs with `--delete`: anything on the server that is not in this folder is removed. Do not keep server-only files in the web root.
- `HOST=social` is an SSH config alias, the same one pantry uses.
## OpenGraph
Meta tags in the index `` point to `https://builds.kestrelsnest.social/og-image.jpg`. If the URL changes, update `og:image`, `og:url` and `twitter:image`.