# 00 โ€” Master Index > Last updated: 2026-08-11 > Quick-reference card for Claude. Read this first, then load specific files only as needed. --- ## ๐Ÿ  Infrastructure Constants | Key | Value | |---|---| | **Proxmox host** | `192.168.1.48:8006` | | **Gateway** | `192.168.1.1` | | **NAS** | `192.168.1.12` (Synology, spendlikstation.local) | | **Domain** | `spendlik.sk` | | **WebSupport service ID** | `15056760` | | **Gitea owner** | `spendlik` | | **MCP server** | `mcp.spendlik.sk` (CT 112, port 3500) | | **Proxmox kernel** | `6.14.11-5-pve` PINNED + `apt-mark hold` on all other installed kernel packages (as of 2026-08-11) โ€” see gotchas | --- ## ๐Ÿ–ฅ๏ธ Container & VM Inventory | ID | Hostname | IP | Domain | Purpose | |---|---|---|---|---| | 100 | n8n | 192.168.1.29 | automation.spendlik.sk | Workflow automation (Authelia protected) | | 101 | reverse-proxy | 192.168.1.10 | โ€” | nginx reverse proxy for all services | | 102 | authelia | 192.168.1.50 | auth.spendlik.sk | SSO / 2FA gateway | | 103 | matrix-synapse | 192.168.1.60 | matrix.spendlik.sk | Self-hosted messaging | | 104 | snappymail | 192.168.1.55 | email.spendlik.sk | Webmail (Authelia protected) | | 105 | audiobookshelf | 192.168.1.70 | books.spendlik.sk | Ebooks / audiobooks (NAS bind mount) | | 106 | jellyfin | 192.168.1.75 | jellyfin.spendlik.sk | Media server (NAS NFS mount) | | 107 | wireguard | 192.168.1.80 | โ€” | VPN (UDP 51820) | | 108 | ddns | 192.168.1.95 | โ€” | DDNS updater (WebSupport API v2) | | 109 | gitea | 192.168.1.90 | git.spendlik.sk | Self-hosted Git (v1.22.6, code indexer enabled) | | 110 | windows11 (VM) | 192.168.1.227 | โ€” | RTX 4060 passthrough, Rhino 7 + Sunshine/Moonlight | | 111 | paperless | 192.168.1.111 | paperless.spendlik.sk | Document management (6-lang OCR, media+data on NAS) | | 112 | mcp-server | 192.168.1.100 | mcp.spendlik.sk | MCP bridge โ€” Proxmox + Gitea tools for Claude | | 114 | koillection | 192.168.1.114 | collections.spendlik.sk | Collection manager โ€” CT created 2026-08-11, **app deployment in progress** (Docker/Koillection/nginx/SSL/DNS still pending, see `114_koillection_deployment.md`) | | 115 | vaultwarden | 192.168.1.115 | vault.spendlik.sk | Password manager (Vaultwarden, Docker, Bitwarden-compatible) | > โš ๏ธ CT 117 (Radicale) has a deployment guide written but is **NOT yet deployed** โ€” do not treat as live infrastructure. It will be added to this table once physically provisioned. > โš ๏ธ CT 113 (stirling-pdf) is documented elsewhere in this repo but does **not** appear in live `proxmox_list_containers` output as of 2026-08-11 โ€” flagged for investigation, do not assume it's running without checking live state first. > Next available CT ID: **116** (Bookmark Manager, undecided tool) ยท CT 117 reserved for Radicale. --- ## ๐ŸŒ WebSupport DNS Record IDs Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map: `secrets-index.md`. > Since 2026-08-10: all subdomains are **CNAME โ†’ spendlik.sk**; only the root record holds an IP and is updated by the DDNS script. See `homelab-overview.md` DNS architecture section. | Subdomain | Record ID | |---|---| | spendlik.sk | 12631197 | | *.spendlik.sk | 12631200 | | automation.spendlik.sk | 306256338 | | matrix.spendlik.sk | 307776273 | | email.spendlik.sk | 308845857 | | auth.spendlik.sk | 308994393 | | books.spendlik.sk | 311013228 | | jellyfin.spendlik.sk | 311384664 | | git.spendlik.sk | 323271195 | | mcp.spendlik.sk | 327475181 | | paperless.spendlik.sk | 328109687 | | vault.spendlik.sk | 330343277 | | pdf.spendlik.sk | *(add after DNS record created in WebSupport)* | | collections.spendlik.sk | *(add after CNAME record created in WebSupport โ€” Koillection app deployment in progress)* | | cal.spendlik.sk | *(add after DNS record created in WebSupport โ€” Radicale not yet deployed)* | > โš ๏ธ When adding a new subdomain: (1) create **CNAME** record โ†’ `spendlik.sk` in WebSupport admin (never a per-subdomain A record), (2) add nginx vhost in CT 101, (3) run certbot, (4) inspect nginx config after certbot. No DDNS script edit needed โ€” see above. --- ## ๐Ÿ’ป Devices | Device | OS | Key Detail | |---|---|---| | Main PC | CachyOS (Arch), KDE Plasma 6 / Wayland | i7-13700K, RTX 4060 Ti, 32GB DDR5 | | Galaxy S25 | Android | WireGuard VPN client; MGit for Obsidian sync; Bitwarden | | Galaxy Tab S9 | Android | MGit for Obsidian sync; Bitwarden | | Bambu A1 + AMS Lite | โ€” | LAN Only Mode, OrcaSlicer | --- ## ๐Ÿ“ Documentation Map | File | Covers | |---|---| | `homelab-overview.md` | Hardware specs, full container/VM table, NAS mounts, network diagram, **DNS architecture (CNAME-based, updated 2026-08-10)** | | `cachy-overview.md` | CachyOS main PC โ€” hardware, software, kernel, services, keyboard customisation | | `services.json` | Structured inventory of all containers/VMs โ€” IPs, ports, stacks, compose paths | | `secrets-index.md` | Map of service credentials and WHERE they are stored (no actual secrets) | | `PROJECT_INSTRUCTIONS.md` | Canonical behavioural/methodology reference โ€” decision defaults, checklists, gotchas, **Pre-Flight Verification protocol (added 2026-08-11)** | | `113_stirling_pdf_deployment.md` | CT 113 โ€” Stirling PDF Docker deploy, nginx, SSL, n8n API integration | | `114_koillection_deployment.md` | CT 114 โ€” Koillection Docker deploy, NAS uploads mount, collection setup โ€” **IN PROGRESS: CT created 2026-08-11, app install pending** | | `115_vaultwarden_deployment.md` | CT 115 โ€” Vaultwarden Docker deploy, nginx, SSL | | `117_radicale_deployment.md` | CT 117 โ€” Radicale CalDAV/CardDAV deploy, nginx, SSL, Thunderbird/DAVxโต clients โ€” **guide only, not yet deployed** | > ๐Ÿ’ก Load only the file(s) relevant to the current task. Do not load all files by default. > ๐Ÿ’ก Use `gitea_search_content` to find relevant files by keyword instead of guessing filenames. > ๐Ÿ’ก Files `01_` through `11_` referenced previously do not exist โ€” they were placeholders never written. > ๐Ÿ’ก For "is CT X running/deployed right now" questions, don't read docs โ€” call `proxmox_list_containers` directly (single cheap live call, always accurate). > ๐Ÿ’ก Before running Phase 1 of any not-yet-executed deploy guide, verify volatile values (LXC template version, DNS record type) against `homelab-overview.md` and `obsidian-vault/05 Resources/Proxmox LXC Templates.md` โ€” guides can go stale. See `PROJECT_INSTRUCTIONS.md` โ†’ Pre-Flight Verification. --- ## ๐Ÿ”‘ Key Gotchas | Area | Warning | |---|---| | **nginx / certbot** | Certbot corrupts configs โ€” always inspect after issuance; check for duplicate `server_name` and missing closing braces | | **NFS mounts** | Use `soft,timeo=30,retrans=3` โ€” hard NFS can freeze Proxmox host | | **DDNS script** | `/tmp/ddns_last_ip` cache persists at runtime; cleared on reboot. Since 2026-08-10 only updates the root A record โ€” no per-subdomain edits needed. | | **WebSupport DNS** | Two separate management pages โ€” missing the second caused an outage. DNS record must exist before certbot can verify. Always update both pages. | | **WebSupport DNS โ€” subdomains are CNAME-only** | Since 2026-08-10: all `*.spendlik.sk` subdomains are CNAME โ†’ `spendlik.sk`. Only the root A record ever holds an IP โ€” WebSupport rejects (422) writing an A record whose IP value already exists on *any other record* in the zone. | | **WebSupport API โ€” PUT silently resets `name`** | A `PUT` to `/v2/service/{id}/dns/record/{recordId}` that omits the `name` field does NOT preserve the existing name โ€” it silently renames the record to the bare zone apex. Always include `name` explicitly in PUT payloads, or avoid partial-field updates. | | **WebSupport API โ€” POST `name` is relative** | Creating a record via POST: `name` is relative to the zone, not a full FQDN. Passing `"email.spendlik.sk"` creates `email.spendlik.sk.spendlik.sk`. Use the bare subdomain only (`"email"`, `"*"`, `"git"`). | | **Gitea writes** | Always read file content before writing โ€” writes replace entire file | | **Proxmox kernel** | PINNED to `6.14.11-5-pve` (`proxmox-boot-tool kernel pin`). **2026-08-11 incident**: an accidental `apt upgrade -y` run directly on the Proxmox host (meant for a container) pulled in `proxmox-kernel-6.14.11-9-pve` and the entire `proxmox-kernel-7.0.x` branch. No impact occurred โ€” the boot pin held, running kernel never changed, NVIDIA DKMS module remained built against the pinned `6.14.11-5-pve` only. Resolved by re-affirming the pin and running `apt-mark hold proxmox-kernel-6.14 proxmox-kernel-7.0 proxmox-kernel-6.14.11-9-pve proxmox-kernel-7.0.14-11-pve-signed proxmox-kernel-7.0.6-2-pve`, which now blocks apt from proposing these kernel packages at all. **Verify hold status with `apt-mark showhold` before assuming any future `apt upgrade` on the host is kernel-safe.** | | **LXC template versions** | Verify exact template filename in `obsidian-vault/05 Resources/Proxmox LXC Templates.md` (or live `pveam list local`) before every `pct create` โ€” versions bump periodically and guides can reference stale strings. Once a container is created, template version is irrelevant โ€” `apt upgrade` keeps it current, no need to recreate existing containers on a newer template. | | **OpenRGB** | Uninstalled โ€” SMBus interaction with ADATA XPG GAMMIX D35 poses hardware risk. Do not reinstall. | | **Hairpin NAT** | Slovak Telekom router blocks hairpin โ€” test external domains from mobile data, not LAN | | **WebSupport API auth** | HMAC-SHA1 signed requests; `X-Date` header in `YYYYMMDDTHHmmSSZ` format; service ID is numeric `15056760` | | **kocka-novinky.sk** | Wordfence blocks login โ€” keep disabled. wp-config.php WP_SITEURL/WP_HOME hardcoded. Zen browser Content-Encoding issue โ€” use Firefox/Chrome. | | **Paperless consume** | File watcher only detects new files โ€” use `document_consumer --oneshot` for bulk imports | | **LXC Docker** | Requires `--unprivileged 0 --features nesting=1` for Docker to work inside container | | **Stirling PDF nginx** | Set `client_max_body_size 100M` โ€” large PDFs will be rejected without it | | **Stirling PDF + Authelia** | Add `/api/*` bypass rule before catch-all 2FA rule โ€” required for n8n API access | | **Koillection HTTPS** | Set `HTTPS_ENABLED=1` in `.env` and restart the container after SSL is in place โ€” otherwise redirect loops | | **Koillection upgrades** | Always back up PostgreSQL DB before upgrading โ€” data migrations can have edge cases | | **Radicale + Authelia** | CalDAV clients use Basic Auth on every request, not browser SSO โ€” bypass Authelia for `cal.spendlik.sk`, rely on Radicale htpasswd + HTTPS instead | | **pveproxy crash** | `Can't call method "process" on an undefined value at pveproxy.pm line 304` โ€” seen 2026-07-28, likely NFS-cascade freeze (host + SSH fully unresponsive). Fix: physical power cycle. Confirmed **all CTs (100โ€“115) + VM 110 now set to "Start at boot"** as of 2026-07-28, so recovery should be automatic next time. | | **NVIDIA driver on host shows as unavailable** | `nvidia-smi` failing on the Proxmox host with "couldn't communicate with the NVIDIA driver" is **expected**, not a fault, whenever VM 110 is running with GPU passthrough active โ€” the GPU is owned by `vfio-pci` for the VM, not the host. Only investigate if VM 110 is stopped and the host still can't see the GPU. | --- ## ๐Ÿ”„ Active Projects (as of 2026-08-11) | Project | Next Action | Reference | |---|---|---| | Koillection | CT 114 created 2026-08-11 โ€” continue with Phase 2 (Docker install) onward | CT 114 | | kocka-novinky.sk automation | Build n8n POC: Brickset โ†’ Claude API โ†’ WordPress lego-set + post | CT 100 | | Paperless-ngx | ~730 docs processing; next: Gemini post-processing setup | CT 111 | | Gemini post-processing | Get Gemini API key โ†’ install Python package in CT 111 | CT 111 | | WireGuard DDNS | Add `vpn.spendlik.sk` DNS record + update CT 108 script | CT 107/108 | | Bookmark manager | Decide tool โ†’ deploy CT 116 | CT 116 (free) | | Authelia enforcement | Extend 2FA to Jellyfin, Audiobookshelf, Gitea | CT 102/101 | | Radicale (CalDAV) | Guide written (`117_radicale_deployment.md`) โ€” not yet deployed | CT 117 | | Investigate pveproxy/NFS crash | Check dmesg/NFS logs around 2026-07-28 16:45โ€“17:40 UTC to confirm root cause | Proxmox host | | Investigate CT 113 discrepancy | Documented as deployed but absent from live `proxmox_list_containers` โ€” confirm actual state | CT 113 | > Full task list: `obsidian-vault/Tasks.md` --- ## โœ… Recently Resolved | Item | Resolution | |---|---| | Accidental `apt upgrade -y` on Proxmox host (2026-08-11) | Ran against host instead of a container; pulled in `6.14.11-9-pve` + `7.0.x` kernel packages. Boot pin held throughout, no actual impact on running kernel or NVIDIA passthrough. Sealed with `proxmox-boot-tool kernel pin 6.14.11-5-pve` (reaffirmed) + `apt-mark hold` on all 5 non-pinned kernel packages. Verified via `apt-mark showhold`. | --- ## ๐Ÿง  Life OS โ€” Obsidian Vault Structure | Folder | Purpose | |---|---| | `00 Inbox` | Capture everything first | | `01 Goals` | Long-term goals | | `02 Projects` | Active projects (each has its own `.md`) | | `03 Areas` | Ongoing responsibilities (Homelab, Main PC, Personal Admin) | | `04 Daily Notes` | Daily log | | `05 Resources` | Reference material | | `06 Archive` | Completed projects | | `Tasks.md` | Master task dashboard (hand-curated) | **Sync**: Obsidian Git plugin on PC โ†’ Gitea `spendlik/obsidian-vault`; MGit on Android ### ๐Ÿ“‹ Vault Quick Reference โ€” Known File Paths | File | Purpose | |---|---| | `Tasks.md` | Live task dashboard | | `05 Resources/Possible Purchases.md` | Purchase wishlist | | `05 Resources/3D Print Queue.md` | 3D print job queue | | `05 Resources/Proxmox LXC Templates.md` | LXC template reference โ€” **verify before every `pct create`** | | `03 Areas/Personal Admin.md` | Personal admin tasks | | `03 Areas/Homelab.md` | Homelab recurring tasks | | `03 Areas/Main PC.md` | CachyOS main PC tasks | --- ## ๐Ÿ› ๏ธ Automation & Tools Stack | Layer | Tool | Location | |---|---|---| | Scheduling / plumbing | n8n | CT 100 / automation.spendlik.sk | | AI content generation | Claude API (claude-sonnet-4-20250514) | via n8n HTTP node | | Agentic coding assistant | Claude Code 2.1.173 | CachyOS / VSCodium extension | | MCP tools | Proxmox + Gitea + search | CT 112 / mcp.spendlik.sk | | Notifications | Matrix | CT 103 / matrix.spendlik.sk | | DNS management | WebSupport REST API v2 | CT 108 | | Password manager | Vaultwarden | CT 115 / vault.spendlik.sk | | Affiliate site | WordPress on WebSupport | kocka-novinky.sk | ### MCP Tools Available | Tool | Description | |---|---| | `proxmox_list_containers` | List all LXC/VMs with status | | `proxmox_get_resources` | Node CPU/RAM/disk usage | | `proxmox_get_container_status` | Status of specific CT by vmid | | `proxmox_start_container` | Start a stopped CT | | `proxmox_stop_container` | Stop a running CT | | `gitea_list_repos` | List repos for a user | | `gitea_read_file` | Read file from any repo | | `gitea_write_file` | Write/update file in any repo | | `gitea_list_files` | List files in a repo directory | | `gitea_search_content` | Full-text search across all .md files in a repo | --- ## ๐Ÿ—ƒ๏ธ Gitea Repositories | Repo | Visibility | Purpose | |---|---|---| | `Claude_Homelab` | Public | Infrastructure docs, deploy guides, this index | | `obsidian-vault` | Private | Life OS / second brain / task dashboard |