ParallelPathdocumentation

Admin guide

For the people who run a ParallelPath server.

The server-admin portal is separate

Server administration lives at /admin and is completely separate from family accounts:

Create additional admins on the server:

sudo ppctl create-admin

Admin dashboard

Dashboard

Counts of people, family accounts, messages, calls and encrypted storage; new inbox items; failed sign-ins in the last 24 hours; active sessions; and CPU, memory and disk at a glance.

System

Host details, uptime, CPU (with load), memory and swap, disk, the encrypted vault, network throughput, days left on the TLS certificate, the state of every service, pending updates (and security updates), whether a reboot is required, and a 24-hour CPU/memory chart.

Metrics come from a small root helper (pp-sysd) that runs every minute. The web app itself has no root access.

Analytics

Privacy-friendly statistics for the last 24 hours, 7 days or 30 days:

No trackers, cookies or third parties are used. IP addresses are counted in memory and never written out by the analytics helper.

Analytics

Security

Security

Accounts

Accounts

Verify identity before any reset. Confirm it's really them (e.g. a call to a known number). The person sees every admin action in their account, with your reason.

Family accounts

Metadata only: ID, creation date, member count and legal-hold status. Family names and all content are encrypted with the family's own key and never shown.

Legal hold stops shared documents from being moved to the recycle bin (e.g. while proceedings are ongoing). Parents are notified when a hold is switched on or off.

Inbox

Problem reports and ideas sent via Report a problem, stored encrypted. Reports are anonymous unless the person ticked "include my username so the administrator can reply". Set them to new, open or closed and keep internal notes.

Inbox

Settings

Settings

Provider URL example Notes
Ollama https://gpu-box.lan:11434 Any Ollama server - this host, a LAN GPU box or a remote co-processor. Model e.g. llama3.2:3b, qwen2.5:3b.
OpenAI-compatible https://gpu-box.lan:1234/v1 LM Studio, vLLM, llama.cpp server, LocalAI, etc.

Encrypted in transit: remote AI servers must use https://; plain http:// is only accepted for localhost. To put a LAN Ollama behind TLS, run a small reverse proxy on that machine (e.g. Caddy: caddy reverse-proxy --from gpu-box.lan:11434 --to localhost:11435 with Ollama on 11435), or use an SSH tunnel to this server and point ParallelPath at http://localhost:PORT. | Anthropic Claude | (no URL) | Needs an API key. Model e.g. claude-opus-5-5 (default) or claude-haiku-5-5 for lower cost. |

API keys are stored encrypted. Remote providers are only used once you tick the privacy acknowledgement - they receive the text of draft messages. Users see which provider is in use and can turn Tone Check off. Use Test the provider chain to check your setup.

Every settings change needs a reason and is audited.

Audit trail

Every event on the server is in the chain, and each event stores the hash of the previous one, so any alteration is detectable. Admin and system actions are shown in full; everything people do is redacted to "family member"/"person" plus the type of action - no names, records, IP addresses or reasons. Filter, page back and export to CSV (same redaction; hashes kept so the chain can be verified).

Audit trail

Backups

Backups never contain readable data. Family content and personal details are already encrypted inside the database and file store, and each backup archive is encrypted again (AES-256-GCM, chunked and authenticated) with the backup key. Administrators can create, schedule, copy, verify and download backups - none of which reveals anything without the keys from the passphrase-protected recovery bundle.

Restore (replaces all current data):

sudo ppctl restore /var/backups/parallelpath/parallelpath-YYYYMMDD-HHMMSS.ppbak
sudo ppctl verify-audit

Restoring on a new server: install ParallelPath, open your recovery bundle at /decrypt-export with your recovery passphrase, then put back the keys before restoring:

printf '%s' 'MASTER_KEY' | sudo systemd-creds encrypt --name=master_key - /etc/parallelpath/creds/master_key.cred
printf '%s' 'BACKUP_KEY' | sudo systemd-creds encrypt --name=backup_key - /etc/parallelpath/creds/backup_key.cred
sudo systemctl restart parallelpath
sudo ppctl restore /path/to/backup.ppbak

The ppctl command

Command What it does
sudo ppctl status Service status and counts
sudo ppctl logs [N] Last N application log lines
sudo ppctl create-admin Create a server-admin account
sudo ppctl reset-admin-2fa USER Clear an admin's 2FA (if they lost their phone)
sudo ppctl verify-audit Verify the whole audit chain
sudo ppctl backup / restore FILE Encrypted backup / restore
sudo ppctl rotate-master-key Re-wrap every key with a new master key (update your recovery copy afterwards)
sudo ppctl tls Re-run the HTTPS step
sudo ppctl upgrade [DIR] Upgrade from a newer source folder
sudo ppctl migrate Apply database schema changes

Routine care

Handling requests from courts or authorities

ParallelPath is designed so that parents generate the records they need (Reports) and anyone can check them at /verify. Administrators can't read family content through the portal. If you receive a legal request, take legal advice; record what you did in the inbox notes. See the Privacy notice for your obligations as the operator.