From 6c7afecce13c74b993218a56e7f3558afbdc848a Mon Sep 17 00:00:00 2001 From: Louis Simoneau Date: Fri, 10 Apr 2026 08:14:15 +1000 Subject: [PATCH] Trim CLAUDE.md to non-discoverable context only Remove project structure, tech stack, services, Makefile targets, DNS, and other sections that duplicate what's already in the code. Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 100 ++++++++---------------------------------------------- 1 file changed, 14 insertions(+), 86 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index fa41bf9..1657f29 100755 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,97 +2,25 @@ Personal blog and server infrastructure for monotrope.au. -## Project Structure +## Theme & Concept -``` -monotrope/ - site/ # Hugo site (content, templates, CSS) - infra/ - ansible/playbook.yml # Single playbook for all server provisioning - miniflux/ # Docker Compose for Miniflux RSS reader - Caddyfile # Copied to /etc/caddy/Caddyfile by Ansible - deploy.sh # Build + rsync to production - Makefile # Common tasks - .env # Local secrets (not committed) -``` +The name is a play on [monotropism](https://en.wikipedia.org/wiki/Monotropism) — +the theory of autistic cognition as deep, singular focus. The site is built around +that idea: deep attention, flow states, and resisting the fragmentation of modern +(especially AI-mediated) work. It's also an exercise in ownership — writing and +reviews live here instead of on corporate platforms. -## Tech Stack +The tone is personal and reflective. Content includes writing (posts) and book +reviews across all genres. -- **Static site generator:** Hugo (no theme — templates built from scratch) -- **Web server:** Caddy (automatic HTTPS via Let's Encrypt) -- **Hosting:** DigitalOcean droplet (Sydney region, Ubuntu 24.04 LTS) -- **Deployment:** `hugo --minify` then `rsync` to `/var/www/monotrope` -- **Provisioning:** Ansible (`infra/ansible/playbook.yml`) +The terminal/CRT visual aesthetic is deliberate, not just decorative — it +reinforces the themes of simplicity, focus, and rejecting modern web bloat. +No JavaScript unless strictly necessary. No images or decorative elements beyond +CSS. The design should feel minimal, typographic, and monospaced-first. -## Services +## Hosting -| Service | URL | How it runs | Port | -|-------------|-----------------------------|-----------------|------| -| Blog | https://monotrope.au | Static files | — | -| Miniflux | https://reader.monotrope.au | Docker Compose | 8080 | -| GoatCounter | https://stats.monotrope.au | systemd binary | 8081 | - -## Ansible Playbook - -**All server changes must go through Ansible.** Everything must be idempotent — no ad-hoc SSH changes. - -The playbook is at `infra/ansible/playbook.yml`. Tags let individual services be re-provisioned without touching the rest. - -| Tag | What it covers | -|---------------|------------------------------------------------------| -| `miniflux` | Miniflux Docker Compose + Caddyfile update | -| `goatcounter` | GoatCounter binary, systemd service + Caddyfile | -| (no tag) | Full provisioning (system, Caddy, Docker, UFW, users)| - -### Secrets - -Pulled from environment variables, loaded from `.env` via Makefile: - -``` -MONOTROPE_HOST -MINIFLUX_DB_PASSWORD -MINIFLUX_ADMIN_USER -MINIFLUX_ADMIN_PASSWORD -GOATCOUNTER_ADMIN_EMAIL -GOATCOUNTER_ADMIN_PASSWORD -``` - -### GoatCounter - -Runs as a systemd service (not Docker) using the pre-built binary from GitHub releases. -Version is pinned via `goatcounter_version` var in the playbook. -Initial site/user creation is gated on a `/var/lib/goatcounter/.admin_created` marker file -so re-running the playbook never attempts to recreate the user. - -## Makefile Targets - -``` -make build # hugo --minify -make serve # hugo server --buildDrafts (local dev) -make deploy # build + rsync to production -make ssh # SSH as deploy user -make setup # Full Ansible provisioning (fresh droplet) -make miniflux # Ansible --tags miniflux -make goatcounter # Ansible --tags goatcounter -``` - -## DNS - -- `monotrope.au` → droplet IP (A record) -- `www.monotrope.au` → droplet IP (A record, redirects to apex via Caddy) -- `reader.monotrope.au` → droplet IP (A record) -- `stats.monotrope.au` → droplet IP (A record) - -## Site Layout - -Content lives in `site/content/`: -- `posts/` — writing -- `reviews/` — book reviews -- `about.md` — about page (uses `layouts/page/single.html`) - -Templates are in `site/layouts/`. No JavaScript unless strictly necessary. -The GoatCounter analytics script is injected in `baseof.html` and only loads -in production builds (`hugo.IsProduction`). +DigitalOcean droplet, Sydney region, Ubuntu 24.04 LTS. ## Conventions