From dcc078addd7b37bdf756f0532a5b11648e5340dd Mon Sep 17 00:00:00 2001 From: "Gan, Jimmy" Date: Wed, 25 Feb 2026 02:09:04 +0800 Subject: [PATCH] Add CLAUDE.md for shared project context --- CLAUDE.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..558166a --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,34 @@ +# NAS Tools Project + +## Architecture +- Synology DS224+ (x86_64, 18GB RAM), Tailscale IP: `100.78.131.124`, LAN: `192.168.31.221` +- Docker: `/volume1/@appstore/ContainerManager/usr/bin/docker`, compose dirs: `/volume1/docker/*` +- Caddy VPS (`161.33.182.109`, Tailscale: `100.109.198.126`): reverse proxy for `nas.jimmygan.com` → NAS:4000, `music.jimmygan.com` → NAS:4533 +- Build VPS (server2, `158.101.140.85`, Tailscale: `100.70.115.1`): podman, fast network for pulling images + +## Dashboard +- Backend: Python FastAPI (`dashboard/backend/`) +- Frontend: Svelte 5 + Tailwind CSS (`dashboard/frontend/`) +- Svelte 5 runes: use `$state`, `$props`, `$bindable` (not legacy `export let`) +- Sidebar: categorized as Main (Overview, Docker, Files, Terminal), Media (Navidrome, Jellyfin, Audiobookshelf, Immich), Tools (OpenClaw, Repos, Gitea Web, Stirling PDF, Vaultwarden, Speedtest) +- New pages: create route in `src/routes/`, import in `App.svelte`, add to appropriate category in `Sidebar.svelte` + +## Build & Deploy +- Build images on Mac: `docker build --platform linux/amd64` +- Transfer: `docker save | ssh zjgump@100.78.131.124 "/volume1/@appstore/ContainerManager/usr/bin/docker load"` +- Deploy: `git push` triggers Gitea Actions CI (`docker compose up -d --pull never`) — do NOT manually restart +- CI workflow `deploy.yml` is stored in Gitea, not in this repo + +## Synology Quirks +- No `crontab` — edit `/etc/crontab` with `sudo` + `printf`, restart crond +- No `scp` subsystem — use `cat file | ssh ... 'cat > dest'` +- ACLs override Unix perms — use `sudo chmod 777` + `synoacltool -enforce-inherit` for bind mounts + +## DNS +- dnsmasq on NAS resolves `*.jimmygan.com` → `161.33.182.109` (Caddy VPS) +- Tailscale split DNS: `jimmygan.com` → NAS (queries hit dnsmasq) +- All paths (LAN, Tailscale, public) route through Caddy for TLS + +## Proxy API +- URL: `https://www.bytecatcode.org` +- Models: `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-haiku-4-5-20251001` (no date-suffixed names)