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 <noreply@anthropic.com>
This commit is contained in:
100
CLAUDE.md
100
CLAUDE.md
@@ -2,97 +2,25 @@
|
|||||||
|
|
||||||
Personal blog and server infrastructure for monotrope.au.
|
Personal blog and server infrastructure for monotrope.au.
|
||||||
|
|
||||||
## Project Structure
|
## Theme & Concept
|
||||||
|
|
||||||
```
|
The name is a play on [monotropism](https://en.wikipedia.org/wiki/Monotropism) —
|
||||||
monotrope/
|
the theory of autistic cognition as deep, singular focus. The site is built around
|
||||||
site/ # Hugo site (content, templates, CSS)
|
that idea: deep attention, flow states, and resisting the fragmentation of modern
|
||||||
infra/
|
(especially AI-mediated) work. It's also an exercise in ownership — writing and
|
||||||
ansible/playbook.yml # Single playbook for all server provisioning
|
reviews live here instead of on corporate platforms.
|
||||||
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)
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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)
|
The terminal/CRT visual aesthetic is deliberate, not just decorative — it
|
||||||
- **Web server:** Caddy (automatic HTTPS via Let's Encrypt)
|
reinforces the themes of simplicity, focus, and rejecting modern web bloat.
|
||||||
- **Hosting:** DigitalOcean droplet (Sydney region, Ubuntu 24.04 LTS)
|
No JavaScript unless strictly necessary. No images or decorative elements beyond
|
||||||
- **Deployment:** `hugo --minify` then `rsync` to `/var/www/monotrope`
|
CSS. The design should feel minimal, typographic, and monospaced-first.
|
||||||
- **Provisioning:** Ansible (`infra/ansible/playbook.yml`)
|
|
||||||
|
|
||||||
## Services
|
## Hosting
|
||||||
|
|
||||||
| Service | URL | How it runs | Port |
|
DigitalOcean droplet, Sydney region, Ubuntu 24.04 LTS.
|
||||||
|-------------|-----------------------------|-----------------|------|
|
|
||||||
| 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`).
|
|
||||||
|
|
||||||
## Conventions
|
## Conventions
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user