FreeBSD host
Use FreeBSD 15.1 or newer on amd64 with a supported package repository and root access.

Run the published TautWeekly OCI application through FreeBSD's documented Linux-container support, control it with service(8), keep private state under /var/db, and use the authenticated Manager through host loopback.
$ sudo ./install-freebsd.sh ✓ Linux emulation ready ✓ Podman service ready ✓ rc.d integration installed $ sudo tautweekly manager-bootstrap ✓ one-time token returned only here $ ssh -L 8787:127.0.0.1:8787 admin@freebsd-host → Manager Config · Verify · PreviewAll · TestEmail
This first FreeBSD track targets the host combination documented and testable today. It does not claim native PowerShell support.
Use FreeBSD 15.1 or newer on amd64 with a supported package repository and root access.
The installer enables FreeBSD Linux emulation and the Podman service, then verifies the public OCI image can be pulled.
Allow outbound access to GHCR, Tautulli, SMTP STARTTLS, and any optional Plex metadata endpoint.
Static scripts, archive integrity, and the Linux OCI payload run in GitHub CI, but GitHub-hosted runners do not boot this FreeBSD service. Complete preview and TestEmail acceptance on the target host before scheduling.
The installer may add Podman with pkg, enables the Linux and Podman services, installs one rc.d service, and preserves existing settings and data.
Enter the one-time token, create a unique administrator password, and complete Config. Tautulli supplies core activity and selected/flattened rating fallbacks. A direct Plex URL and administrator token reachable from the Podman container are recommended for complete provider ratings and artwork. Validate, save, and verify checks Plex identity and authenticated library access without printing the token.
Use this after first setup, after a Plex agent/source change, or after a ratings/artwork recovery update when data may be stale.
Confirm Edit → Advanced → Ratings Source for each included Plex Movie library.
Run Manage Library → Refresh All Metadata for every included movie/TV library and wait.
Open each same Library → Media Info tab, select Refresh media info, and wait. Repeat per library.
Do not refresh unrelated libraries. Tautulli's table refresh does not replace Plex's refresh. Routine TautWeekly updates do not require this when current output is correct.
The Manager exposes the everyday newsletter controls without requiring JSON edits. Use the full reference for advanced renderer fields.
Add Tautulli, recommended direct Plex, SMTP, sender identity, and a controlled TestEmail. Saved secrets remain write-only.
Choose the movie and TV libraries that define releases, Trending, and personal statistics. Unselected sections do not contribute.
Save who is excluded from personalized use. The policy blocks those users from previews, TestEmail, welcome, and production delivery while keeping them visible for policy review.
A separate card appears only for active Tautulli users without native email. Private fallback assignments may share an inbox, never override native email, and remain subject to existing exclusions; TestEmail stays isolated.
Set lookback, card limits, branding, and the optional custom text card. Its body is required when enabled; title, six-choice local title GIF, subheading, and border are optional.
When the cache is enabled or its coverage changes, validation starts a separate no-email refresh for every production-eligible included user and selected movie/TV library. It captures only qualifying live newsletter-window items by exact stable GUID and usable poster; it does not crawl the whole library or depend on PreviewAll. Run sudo tautweekly cache-refresh explicitly and sudo tautweekly cache-status for a share-safe aggregate summary. Unseeded means no qualifying live refresh or render has written an entry. Disabling the cache stops reads and writes but does not erase retained entries under /var/db/tautweekly.
Write Tautulli, recommended direct Plex, mail secrets, and the optional custom text card only inside private container data. Its body is required when enabled.
Check Tautulli, direct Plex identity/authenticated library access, SMTP TCP reachability, files, timezone, and schedule.
Render all deterministic states without mail.
Validate SMTP authentication, sender permission, MIME, and the actual mail client.
Enable the scheduler after roster review.
manage-libraries saves stable Tautulli section IDs and backs up private configuration. The renderer queries selected sections independently, rejects mismatched rows, and applies the resulting scope before quiet mode, Trending, Binge Champion, and personal statistics are calculated.
The inherited payload lists every qualifying personal movie and TV show in separate full-width cards. Both use two title columns on desktop; on mobile, movies stack one per row while TV retains two columns. Empty media cards stay omitted; compact personal total watch time and Binge Champion cards remain distinct. HOT NEW RELEASE is movie-only; a movie-empty week uses an authentic Trending hero when server history supplies one and retains new TV cards.
SMTP and API secrets never enter the image or service environment. Manager authentication is required and persistent state remains in a host-mounted mode-0700 data directory.
| Path | Purpose | Treatment |
|---|---|---|
/var/db/tautweekly | Configuration, Manager access, state, logs, output, assets, backups | Private; never attach publicly |
/usr/local/etc/tautweekly/tautweekly.env | Image tag, timezone, identity, Manager bind and proxy policy | Root-owned mode 0600; no SMTP/API secrets |
/usr/local/etc/rc.d/tautweekly | Service lifecycle | Root-owned executable |
Run sudo tautweekly remote-access-authorize to enable the isolated official Linux userspace runtime inside Podman and complete its interactive sign-in. Then enable the Manager password lock and use Settings to enable and verify the exact Funnel. Manager remains non-root with no Podman socket, host executable, TUN device, network privilege, auth key, token, or arbitrary CLI input. Remote viewers need an ordinary browser, not Tailscale or a VPN.
Retrieve the one-time token only with sudo tautweekly manager-bootstrap. For loss of access, manager-reset-access resets only authentication and preserves newsletter configuration, secrets, schedules, output, and backups.
Settings > Updates distinguishes the running application/image, FreeBSD package, and host adapter and reports the stable release, check history, sanitized failures, and release notes. Authenticated entry renders cached status first, then performs one bounded background refresh only when the last success is missing or at least 24 hours old and backoff permits. The main header Refresh reloads local status first and then starts that check only when the new typed status recommends it; it never waits for GitHub, while scoped refresh controls stay isolated. Successful results are reused for five minutes; Check now then explicitly refreshes the same endpoint. Current remains green, every non-current status gives the update card an attention glow, and the purple header SVG appears only after a successful check validates a newer running application. Normal health stays offline-capable. The web process cannot run sudo, Podman, or rc.d and instead provides sudo tautweekly update. The rc.d wrapper verifies the stable host package and internal manifest, preserves private data, and never enables unattended updates.
The wrapper stops the container briefly so state and configuration are captured consistently.
The host package version and candidate image are compared without replacing the service.
Podman registry auto-update expects systemd-managed units. FreeBSD uses rc.d, so the package does not add the otherwise inert auto-update label or a hidden timer. The wrapper verifies the stable release package, refuses concurrent sends, checks container health and version, and restores the previous image when the candidate fails.
If sudo tautweekly help does not list manager-bootstrap, verify and extract the current stable FreeBSD Podman TAR archive in a temporary directory, then run sudo ./install-freebsd.sh --upgrade-and-update. The installer preserves /var/db/tautweekly and the existing environment file while bringing the rc.d adapter and image forward together.
Config > Configuration backups requires Confirm delete, permanently removes only the chosen backup, and leaves the live configuration unchanged.
The default is /usr/local/bin/podman. Set TAUTWEEKLY_PODMAN_BIN in the root-owned environment file only when an administrator-managed installation uses another path.
Use 127.0.0.1 and SSH for setup/recovery; optional ordinary-browser remote access uses only the independently verified Funnel URL. The rc.d stop path gives an already-running newsletter delivery up to 30 minutes to drain after Manager access closes.
Start with Manager status and the rc.d/Podman lifecycle; keep credentials, generated output, and raw private logs out of public support reports.
Run sudo service tautweekly status, confirm the Podman container is healthy, and use the documented SSH tunnel to host loopback.
Test the saved Tautulli or Plex URL from the host and Podman network. Confirm the target listening address and firewall; container localhost means TautWeekly itself.
Confirm one owner/admin sample, selected libraries, and metadata readiness. Save and verify again before regenerating all previews.
Keep production disabled. Recheck SMTP, sender permission, TestEmail, exclusions, timezone, and the saved revision, then inspect the sanitized Manager result and recent Podman logs.