The original engineering record: discovery, recovery, security hardening, family features, and validated operations.
1.0Release86Documented changes20System areas
PlumHome
A Cloudflare-hosted, authenticated control surface for the family cloud.
New
Built a mobile-first PWA with server-side Jellyfin authentication; credentials are validated upstream and never stored by PlumHome.
Security
Wrapped Jellyfin access tokens inside encrypted, HTTP-only, SameSite session cookies and kept artwork, dashboard, and telemetry routes authenticated.
New
Integrated Jellyfin Resume and Latest APIs for per-user playback position, production year, ratings, parental rating, recent additions, and protected artwork proxying.
New
Added a least-privilege telemetry pipeline for Radarr/Sonarr queue stages and shared-storage capacity, explicitly excluding torrent hashes, peers, paths, release names, and application API keys.
Improved
Added concurrent dashboard fetching with partial-failure handling, native refresh, abortable requests, responsive shelves, installable PWA metadata, and privacy-safe service status.
PlumStream · Jellyfin
Web access, playback infrastructure, and portal integration were repaired and verified.
Fixed
Resolved recurring multi-client transcode failures on iPhone and Wholphin/Fire TV. Jellyfin's FFmpeg logs showed CUDA_ERROR_NO_DEVICE and exit code 187 whenever a title required NVIDIA transcoding after the GPU had been idle.
Fixed
Enabled NVIDIA persistence mode at VM startup, recreated Jellyfin to clear its stale NVIDIA runtime attachment, and retained the pre-change Compose file as compose.yaml.pre-gpu-fix-20260725.
New
Added an in-container CUDA health check plus a watchdog that recreates only Jellyfin when GPU access becomes unhealthy, replacing the previous full-server-reboot recovery pattern.
Verified
After reboot, validated nvidia-smi in both the VM and Jellyfin container, successful CUDA initialization, and a real two-frame H.264 NVENC hardware encode with no new FFmpeg code-187 errors.
Fixed
Diagnosed /web/ failures that returned 'Error processing request' while the container remained healthy. Logs traced the failure to ObjectDisposedException in Jellyfin.Plugin.FileTransformation.
Fixed
Isolated Jellyfin Enhanced 11.12.0.0 after its transformation hooks conflicted with File Transformation 2.5.11.0, restarted Jellyfin, and restored HTTP 200 locally, over LAN, and through stream.theplummers.org.
Verified
Re-enabled Jellyfin Enhanced under observation and confirmed fresh logs contained no recurring ObjectDisposedException or request-processing errors.
Verified
After the Proxmox kernel upgrade and reboot, confirmed the GTX 1660 Ti remained bound to vfio-pci and passed through to media VM 202 via hostpci0 with x-vga enabled.
Diagnosed
Isolated Spider-Man playback failure to a malformed MP4 rather than the Fire TV or GPU. FFmpeg reported 'Referenced QT chapter track not found', could not enumerate streams, and exited with code 234; replacement of the damaged release was recommended.
New
Exposed authenticated continue-watching progress, latest titles, artwork, community ratings, and official ratings in PlumHome without making the Jellyfin API public.
PlumRequests · Seerr
A DNS-rooted outage was identified at the application layer and removed without rebooting the media VM.
Fixed
Traced repeated getaddrinfo EAI_AGAIN errors for TMDB, GitHub, Gravatar, and Anime-List to PLUM-ARR using the offline Pi-hole as its sole resolver.
Fixed
Persistently moved PLUM-ARR netplan DNS to AdGuard, flushed the live resolver cache, and recovered the public Seerr route to HTTP 200 in roughly 0.3 seconds.
Verified
Separated the DNS fault from NGINX Proxy Manager and media storage by confirming both the public proxy path and CIFS mount were healthy during diagnosis.
New
Mapped Radarr/Sonarr activity into family-safe Finding, Downloading, Getting ready, and Needs attention states on PlumHome.
Improved
Added a Docker-native Seerr health check with a rollback copy of the pre-change Compose configuration.
Sonarr
Series automation gained active health and queue visibility.
New
Connected Sonarr queue data to the two-minute telemetry collector and normalized it into title, progress, ETA, and family-safe pipeline stages.
Improved
Added a Docker-native health check and included container state, disk capacity, and Compose validation in the Sunday maintenance report.
Security
Kept the Sonarr UI and API private; only a minimized telemetry projection leaves PLUM-ARR.
Radarr
Movie automation gained active health and queue visibility.
New
Connected Radarr queue data to PlumHome with normalized progress and processing state while filtering download-client internals.
Improved
Added a Docker-native health check and weekly read-only Compose and capacity reporting.
Security
Kept Radarr administration LAN/VPN-only and restricted telemetry collection to the fields required by the family dashboard.
qBittorrent & NZBGet
Download clients are now monitored as dependencies rather than opaque containers.
Improved
Added Docker-native health checks for both clients and retained timestamped pre-change Compose files for rollback.
New
Included health and filesystem capacity in a non-mutating weekly report that does not pull images, prune data, recreate containers, or trigger upgrades.
Security
Excluded torrent hashes, peers, filenames, release names, credentials, and download paths from the PlumHome telemetry payload.
Prowlarr, FlareSolverr & Byparr
Indexer support services received health coverage and a documented network recovery path.
Improved
Added native health checks to Prowlarr and FlareSolverr; verified existing health coverage for Byparr and deunhealth.
Fixed
Documented the Docker namespace failure mode where services using network_mode: service:gluetun retain a reference to a removed Gluetun container.
Fixed
Established a targeted force-recreate procedure for Prowlarr and a full dependent-stack recovery path when Gluetun's network namespace changes.
Improved
Confirmed the active Byparr services belong to the primary Servarr project despite a separate legacy ByparrProxy Compose path.
Bazarr & Lidarr
Subtitle and music automation are included in operational health reporting.
Improved
Added Docker-native health checks to both applications with pre-change Compose backups.
New
Included both services in weekly container-health, filesystem-capacity, and Compose-validation reporting.
Gluetun
The shared VPN network namespace is now treated as a first-class dependency.
Verified
Confirmed the existing Gluetun health check and documented the Servarr network layout, including its fixed protected-network role.
Fixed
Added an operational recovery sequence for stale container namespace references after Gluetun recreation, avoiding misdiagnosis as an application-level outage.
Improved
Preserved the rule that Gluetun-dependent services are recreated deliberately and verified together rather than unattended.
Shared Media Storage
PLUM-ARR moved from an indirect SMB path to a direct, tuned NFS mount.
Improved
Replaced CIFS-through-plum-apps with direct NFSv4.2 access to the Proxmox-hosted ZFS dataset, removing an unnecessary storage hop.
Improved
Configured a hard systemd automount with negotiated 1 MiB read/write sizes for the media data path.
Fixed
Removed the ignored x-systemd.device-timeout option from PLUM-ARR's fstab after validating the active NFS mount.
Verified
Confirmed shared media capacity, mount availability, container access, and the intended exclusion of replaceable media from system backups.
Plum Status · Uptime Kuma
A dedicated unprivileged monitoring service now covers public and private dependencies.
New
Deployed Uptime Kuma 2.4.0 in unprivileged CT 103 with 1 vCPU, 512 MB RAM, an 8 GB root disk, no Docker socket, and no-new-privileges enabled.
New
Created 60-second checks with two retries for four public services and private checks for the proxy, RMM, Proxmox, UniFi, SMB, Pi-hole, and AdGuard.
Fixed
Corrected three false-down states caused by DNS monitor conditions serialized as JSON null; Kuma 2.4 requires an empty array.
Fixed
Changed the RMM monitor from a blocked direct-VM probe to its working published HTTPS route, matching the actual network policy.
New
Attached priority-1, device-scoped Pushover alerts with a 3600-second TTL to 11 leaf monitors while excluding parent groups to prevent duplicate notifications.
Plum Backup · Proxmox Backup Server
Backups moved from a plan to encrypted, scheduled, restore-tested infrastructure.
New
Deployed PBS 4.2.3 on separate downstairs hardware with an ext4 NVMe datastore and a least-privilege DatastoreBackup API token.
Security
Enabled client-side encryption with the recovery material retained separately from the backup datastore.
New
Scheduled a 03:00 backup for seven production guests, daily pruning at 06:00, Sunday verification at 08:00, and garbage collection at 12:00.
Improved
Applied retention of 3 daily, 4 weekly, and 2 monthly snapshots; explicitly included plum-apps /docker and excluded its 2.5 TB replaceable /data dataset.
Verified
Restored the CT 103 snapshot as isolated CT 104 with no network interface, booted its recovered LVM disk, started Uptime Kuma, and verified Compose plus persistent kuma.db before removing the test guest.
AdGuard Home & Unbound
A second recursive, DNSSEC-validating resolver replaced a single point of failure.
New
Deployed AdGuard Home with Unbound bound only to 127.0.0.1:5335; AdGuard forwards exclusively to the local recursive resolver.
Verified
Validated normal recursion, authenticated DNSSEC answers, and SERVFAIL for the deliberately broken dnssec-failed.org test domain.
Fixed
Removed active references to the offline Pi-hole from Proxmox, PlumRMM, Uptime Kuma, plum-apps, plum-proxy, and PLUM-ARR; PBS already used AdGuard.
Security
Kept the Unbound recursion port off the LAN and preserved pre-change AdGuard configuration under a dedicated backup path.
Pi-hole
The original DNS host was updated, reboot-tested, and fully inventoried.
Improved
Updated Pi-hole Core, Web, and FTL along with the Ubuntu host, installed the newer 6.8.0-136 kernel, and verified zero immediately applicable updates after reboot.
Verified
Confirmed Pi-hole FTL, Unbound, and SSH services; documented TCP/UDP 53, web ports, and the local Unbound listener.
New
Captured hardware, storage, temperature, virtualization, firmware, and CPU-security state for future maintenance and failover planning.
Proxmox VE & GPU Passthrough
The virtualization host received a full security update with post-reboot workload validation.
Improved
Installed 178 upgrades and five new packages across Proxmox, QEMU, ZFS, firmware, OpenSSH, OpenSSL, systemd, firewall components, and backup clients.
Improved
Rebooted into Proxmox 9.2.5 on kernel 7.0.14-6-pve and verified all intended VMs/LXCs autostarted.
Verified
Confirmed both ZFS pools remained ONLINE, PBS reconnected, public ingress returned, RMM SNI routing worked, and the GTX 1660 Ti remained attached to vfio-pci for VM 202.
Security
Enabled the Proxmox firewall with default-deny host ingress, default-allow egress, and a temporary current-LAN management allowance pending VLAN migration.
NGINX Proxy Manager, HAProxy & Cloudflare
Public ingress was documented, backed up, patched, and narrowed.
Improved
Patched 113 packages on plum-proxy, including 90 security updates covering OpenSSH, OpenSSL, Docker, containerd, AppArmor, systemd, libc, Git, and curl.
Verified
Rebooted the proxy and confirmed the landing page, status page, PlumStream, PlumRequests, and RMM routes returned successfully.
New
Configured HAProxy TLS-SNI routing for rmm, api, and mesh hostnames while passing other HTTPS traffic to NGINX Proxy Manager.
New
Published the status hostname through NPM with the existing wildcard certificate and a DNS-only Cloudflare record.
Security
Enabled UFW default-deny ingress with explicit public TCP 80/443 and a temporary LAN management allowance.
Fixed
Removed the obsolete helloworld service on TCP 8888 and retired a Twingate connector restart loop caused by its placeholder tenant configuration.
PlumIT Website
The public site became a privacy-safe service front door instead of an infrastructure index.
New
Redesigned the landing page around PlumStream, PlumRequests, invitation-only PlumSupport, onboarding, privacy, and device-specific Jellyfin setup.
Security
Removed public Proxmox and third-party stream links and excluded internal addresses, hostnames, software versions, and device inventory from public content.
New
Added a systemd timer that refreshes a minimal health.json every minute with only online/degraded states for media, requests, and support.
Improved
Added accessible keyboard navigation, mobile layouts, install guidance for TV, iOS, Android, desktop, and browser clients, plus low-profile community privacy resources.
PlumRMM · TacticalRMM & MeshCentral
Remote operations received dedicated branding and isolated TLS routing.
New
Applied a reversible PlumRMM presentation layer with PlumIT Remote Operations naming, custom plum/slate login styling, favicon, mark, accent colors, and a persistent family-site link.
New
Routed TacticalRMM frontend, API, and MeshCentral hostnames through HAProxy using TLS SNI without exposing unrelated proxy administration.
Security
Kept remote operations behind the VM's existing network policy and monitored the working published HTTPS endpoint instead of bypassing policy with a direct probe.
Improved
Created a repeatable deployment helper with timestamped server-side backups because TacticalRMM frontend upgrades can replace the customized index.
Host Firewalls & Shared Services
Core hosts moved from implicit LAN trust toward explicit ingress policy.
Security
Enabled default-deny UFW on plum-proxy and plum-apps while retaining the exact public web, SMB, and current-LAN administration paths required for service continuity.
Security
Enabled Proxmox datacenter firewall enforcement and verified management, guest startup, storage, backup, and proxy reachability after the change.
Improved
Documented VLAN 50 Guest, VLAN 100 Work, and VLAN 150 IoT behavior plus a staged Management/Server/Trusted/Voice segmentation plan.
Fixed
Removed the unused Homarr container after confirmation, reducing retained attack surface and abandoned service state.
Operations & Maintenance
PlumNet 1.0 includes an inspect-first operating model and repeatable rollback paths.
New
Created a complete host, VM/LXC, storage, Docker, network, DNS, public-routing, and service inventory with security audit and quick-reference handoff documents.
New
Installed a Sunday 10:15 read-only PLUM-ARR maintenance report covering filesystem capacity, Docker usage, container health, and Compose validation.
Fixed
Removed PLUM-ARR's recurring cron EXTRA_OPTS warning by explicitly defining the option as empty and retaining the original file for rollback.
Improved
Standardized pre-change backups, Compose validation, targeted recreation, post-change logs, and rollback notes for live household infrastructure changes.
Verified
Audited ZFS and sampled SMART health, documented the spare-disk iCloud replacement pilot, and tabled deployment until redundancy and cable health are addressed.