Homelab — Week of 2026-05-05 → 2026-05-11
Highlights
Pinchflat is out, wytchr is in (Phase 4.9)
- Tore out Pinchflat. Shipped wytchr on top of
ytdl-sub-apias the new UI for click-to-download and channel curation. - wytchr layers free-form
prefix:valuetags, profile-driven "show only videos newer than X, cap at Y" windows (same source of truth as ytdl-sub's retention), a kanban-by-profile board with drag-or-click reassignment via popup drop slots (sections refuse drops — SortableJS biases "release into empty space"),/tagsand/presetsadmin pages, four food-themed palettes. - Upstream
ytdl-sub-apicut three releases to support it:v2026.5.1(POST /videos),v2026.5.2(preset CRUD via ruamel atomic write, comments preserved),v2026.5.3(Shape-2 channel DELETE fix). Pin lives incompose/ytdl-sub/.env.tpl. configs/ytdl-sub/config.yamlis mounted ro in the cron container and rw in the API container; preset CRUD only goes through the API.
Jay's Notes:
Service-status shim landed (Phase 4)
- Glance's "Systems" widget is now a composite (running + backed up + up-to-date). New
compose/service-status/Python shim fans out to update-shim + Prometheus (restic_last_success_timestamp_seconds) + per-service probes/collectors. - Registry at
configs/service-status/services.yml. Runbook atRUNBOOKS/phase-4-service-status.md. - Backup signal is host-global today — restic snapshots
/srvwholesale, so every row shares the same green/red. Per-service attribution deferred. - Added a
system-statusGlance widget that consumes the shim.
Jay's Notes:
SearXNG is up (Phase 4.8)
- Self-hosted meta-search at
searxng.kjaymiller.dev, tailnet-only behind Traefik. Limiter config inconfigs/searxng/limiter.toml.scripts/searxng/add-friend.shfor access handoff.
Jay's Notes:
1Password pilot (Phase 5)
- wytchr and ytdl-sub both moved to
.env.tpl+just secrets-render, pulling fromop://Private/wytcher/credential. Operator runsoplocally. - Runbook drafted at
RUNBOOKS/phase-5-1password-migration.md. Broader rollout gated on the auth-model decision (single service account vs. per-service).
Jay's Notes:
Things that AI Forgot to include
Smaller wins
- justfile at the repo root — install dances collapse to one-liners;
just secrets-renderis the 1Password entry point. - Restic prune: new
restic-prune.service+restic-prune.timerandscripts/restic/prune.sh. Also fixed restic-backup tosourcethe env file in-script instead of systemd'sEnvironmentFile=— systemd doesn't expand$VARinside values, and B2 creds with shell-special chars were silently truncating. - glancectl helper under
scripts/glancectl/for poking Glance config without hand-editing widget files. - all-my-favs compose stack started; nothing public yet.
- ytdl-sub circuit breaker now propagates SIGTERM correctly to the coprocess and caps at one video per run while the bot-gate threat model is hot.
- Grafana ytdl-sub dashboard hard-codes live datasource UIDs — provisioned dashboards were picking up a stale UUID after a Loki restart.
- AutoKuma got HTTP-monitor labels on every service in
proxy_net. Monitors now check Traefik routing, not just host liveness. - Glance widgets segmented one-per-file under
configs/glance/widgets/, glued by$include. - Tried splitting
docs/into Diátaxis-stylereference/andexplanation/. Reverted the direction — note now inCLAUDE.md: "Decision is intentional; don't 'tidy' it."
In flight / next
- Papra and job-crawler still on the Phase 4 list, still not shipped.
- Zima-side exporters — Zima Blade is a black box to Prometheus.
- Immich proxy route under the same tailnet hostname pattern.
- 1Password auth-model decision before migrating the next service.
- Per-service restic attribution so service-status can name the unbacked service, not just the host.
Webmentions
Loading mentions…
No webmentions yet.
What's this?