Trusted Servants Pro

A self-hosted portal for addiction-recovery fellowships.

  • Trusted Servants Pro
  • Python
Trusted Servants Pro screenshot

Trusted Servants Pro is a self-hosted web portal that helps addiction-recovery fellowship groups run the practical side of service work: managing meetings, sharing readings and files, coordinating Zoom host accounts, and handling member access requests — all from a single web UI, with no command line required. It ships as a single Docker container with persistent data volumes.

Features

  • Meetings — create, edit, archive and restore; in-person / online / hybrid; unlimited weekly schedules, per-meeting logos and alert banners, click-to-copy Zoom credentials
  • Libraries — grouped reading collections with drag-and-drop ordering, inline editing, thumbnails and external-link entries
  • File browser — a central media library with search, rename, and human-readable public share URLs at /pub/<filename>
  • Access requests — a public form on the login screen, emailed to admins, with a triage dashboard
  • Zoom account management — Fernet-encrypted credentials, a weekly assignment calendar with conflict detection, and separate OTP email logins
  • Themes & branding — six palettes, an animated login screen with nine selectable effects, and configurable sidebar branding
  • Dashboard, settings & email — configurable widgets, global SMTP with encrypted passwords and a one-click test send
  • Data export/import and Frontend Staging Sync — build on a staging instance and push the public site to live over the network, with automatic rollback snapshots

Requirements

  • Docker Engine with the Compose plugin (Ubuntu 24.04 LTS for the automated installer)
  • A port for the portal (default 8090) reachable, ideally behind TLS

Install

One-command install (Ubuntu 24.04)

Installs Docker, opens the firewall, provisions a TLS cert (Let's Encrypt or self-signed), generates a secret key, and starts the portal — typically in 2–5 minutes:

curl -fsSL https://raw.githubusercontent.com/hyprlab/trusted-servants-pro/main/install.sh | sudo bash

Run it non-interactively by passing env vars:

sudo TSP_DOMAIN=portal.example.org \
     [email protected] \
     TSP_ADMIN_PASSWORD='a-strong-password' \
     bash install.sh

Docker Compose (manual)

services:
  tsp:
    image: hyprlab/tspro:latest
    container_name: tspro
    ports:
      - "8090:8000"
    volumes:
      - ./data:/data
    environment:
      - TSP_SECRET_KEY=${TSP_SECRET_KEY:?TSP_SECRET_KEY must be set in .env}
      - TSP_ADMIN_USERNAME=admin
      - TSP_ADMIN_PASSWORD=admin
      - [email protected]
    restart: unless-stopped

Generate a secret key into .env, then start and open http://localhost:8090 (default admin / admin — change it immediately):

openssl rand -base64 48 | tr -d '\n/+=' | cut -c1-64   # -> TSP_SECRET_KEY in .env
docker compose up -d --build

Configuration

Variable Default Purpose
TSP_SECRET_KEY dev-secret-change-me Flask session signing key (set in production)
TSP_ADMIN_USERNAME / TSP_ADMIN_PASSWORD / TSP_ADMIN_EMAIL admin / admin / … Seeded on first boot only
TSP_DATA_DIR /data In-container data directory
TSP_FERNET_KEY auto Encryption key for Zoom/SMTP secrets (stored at data/zoom.key if unset)

Zoom, OTP-email and SMTP passwords are encrypted at rest with Fernet. Uploads are capped at 256 MB.

Updating

Manual:

cd /opt/tspro
docker compose pull && docker compose up -d

Or let the bundled Watchtower service auto-update the container every 24 hours.

Tech stack & license

Flask · SQLAlchemy · SQLite, with Fernet-encrypted secrets and Caddy for TLS, in a single Docker container. Free and open source under the GNU AGPL-3.0. Website: gettspro.com · Source and releases on GitHub.