A self-hosted family console + tool lab on our home network. One login at https://console.lab.audasmedia.com.au gives every household member a dashboard of ~40 self-hosted services, AI chat, a voice assistant, media tools and file sharing — all running on our own gear.
Console portal — per-user logins (sam/jo/harry/finn), searchable home-dash tool cards, admin area (users, passwords, live Pi-dashboard), Files upload, dark mode.
AI chat (dsh) — a private per-user chat (chat/reasoning/coding + multimodal GLM), with conversation memory, web/doc summarise, image ingest & generate, and video screen analysis. Hardened: read-only filesystem, no shell.
Voice assistant (Jervis) — a local LLM voice agent: talk to it or type on the Voice page — it controls Home Assistant (lights/switches), shopping list, weather, timers, reminders, character voices.
Media tools — GIMP (edit), KdenLive (video), Audacity (audio), LMMS (music) — all browser-based.
Transcriber — turn audio or video into MIDI (Basic Pitch) or sheet music (MuScriptor).
Storage — Garage S3 object storage + a shared media folder; offsite Amazon S3 backups.
How to use it
Go to console.lab.audasmedia.com.au and log in.
Dashboard — every service is a card, grouped and searchable; kids get a reduced view, admins see everything.
Files — upload from your browser; it appears in the media tools (~/media) and you can view/download/delete.
Chat — pick a model (chat / reasoning / coding / multimodal), attach images, summarise a page or file, generate an image, or analyze a screen recording.
Voice — type a command (lights, weather, shopping, timers) and Jervis answers and speaks.
Admin — add/rename users, change passwords, watch live agent sessions.
Architecture
flowchart LR
U[Family browsers / phones] -->|https *.lab| C[Caddy :35]
C -->|console.lab| P[Console portal FastAPI :13:8500]
C -->|dsh-*.lab| D[dsh chat x4 SSE]
C -->|media/apps.lab| A[Media + ~40 apps]
P -->|SQL| DB[(Postgres+Redis)]
P -->|transcribe| W[Celery workers + RabbitMQ]
D -->|LLM| OR[OmniRoute :20129]
OR -->|chat/reasoning/coding| OC[opencode-go / deepseek]
D -->|vision/video| OL[OpenRouter GPT-5 · GLM-5v]
P -->|Files/S3| G[(Garage S3 + shared-media)]
G -.->|Borg| BACK[(Amazon S3 offsite)]
U -->|Voice page| V[Jervis voice agent :8501]
V -->|HA REST/MQTT| HA[Home Assistant]
Infra — NixOS (.13/.27) · Ubuntu (.35) · pi agent · systemd · RustDesk · Borg
Config notes for future maintenance (no secrets)
LLM routing: chat/reasoning/coding go through OmniRoute on .13:20129 as pinned deterministic model ids (skip the flaky auto/* pools); vision/image/video go through OpenRouter.
Secrets live only in .env files (git-ignored) and the machine secrets store — never commit.
Deploy an edit: push to Gitea → rsync/scp to .13 → docker compose up -d --build <service>; Caddy edits on .35.
Maps: after any archify deliver, run publish-maps.sh to update maps.lab.
Related
Human deep-dive: FAMILY CONSOLE (360 Dev-Ops Network Computers)