6.4 KiB
6.4 KiB
created, modified, type, status, tags, aliases
| created | modified | type | status | tags | aliases | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-08-26 | 2026-08-26 | project | active |
|
|
FAMILY CONSOLE
Single reference for the self-hosted Family Home Lab console. Consolidates the four daily FAMILY notes (Build Status, Enterprise Architecture, S3/Garage, dsh Harness). Authoritative code/plan: /home/sam/home_network/custom_tools/family_home_lab/ (repo on .27 desktop; pushed to Gitea sam/family_home_lab).
What it is
A private web dashboard + tool launcher + chat tieren for the family. Log in at https://console.lab.audasmedia.com.au and reach every self-hosted service in the home lab (media, docs, storage, AI, notes, portfolio), one per-user account.
Where it runs / how traffic flows
- Portal + core stack run on the
.13server (/home/sam/Docker/Containers/family-home-lab/): FastAPI + Jinja2 + HTMX portal on port8500, with Postgres (users/prefs), Redis, RabbitMQ, Celery, Garage S3. - Reverse proxy / DNS: existing Caddy on
.35; public zone*.lab.audasmedia.com.au→.35→.13.*.home.labare LAN-only. - Data under
/mnt/data/family-home-lab/(garage, shared-media, dsh, pi-dashboard) — covered by Borg backup on.13.
How it works (key pieces)
- Accounts: four users
sam/jo/harry/finn. Login = bcrypt password in Postgres (changeable via the portal Password page). No SSO — every app keeps its own login. - Home dash: a categorized catalogue with a search box listing all services. Cards open tools; badges mark LAN-only / has-own-login / admin.
- Files: upload from your browser → files appear in the webtop tools (e.g. GIMP) under
/media/<user>/, with thumbnail + view + download (console → email etc.). - Transcriber: audio → MIDI (Basic Pitch) and sheet music (MuScriptor).
- Admin (sam only): add/rename users, change passwords, Pi Dashboard (live pi agent sessions synced from the pi host), manage the tool catalogue.
Chat bot (dsh)
A per-user DeepSeek chat harness (dsh-sam·jo·harry·finn.lab), custom FastAPI + SSE, one container each on .13 (ports 3081–3084). Includes:
- Model picker — chat (opencode-go flash) · reasoning (deepseek flash) · coding (deepseek pro) · multimodal (GLM-5v). Default is opencode-go flash.
- Memory — conversations saved with a sidebar (list/new/delete).
- Web & doc summarise, image ingest, image generate, video/screen-recording analyze (ffmpeg → GLM).
- Hardened — no shell/system calls:
cap_drop ALL, read-only rootfs, non-root; read /workspace per user (on/mnt/data/.../dsh/<user>/). - Vision/media go through OpenRouter; text chat through OmniRoute on
.13:20129.
Insights for future LLMs / maintenance (how to fix, edit, add)
- Edit → deploy flow: change code in the repo (
.27), commit + push to Gitea, thenscp/rsync the changed folders to the matching.13dir anddocker compose up -d --build <service>. Caddy edits happen on.35(back upCaddyfilefirst; reload withcaddy reload). - Auth gotcha: Caddy basic-auth was removed from the browser media/chat tools earlier because it broke their asset loading (401s) — those have no login now. Apps with their own login kept it. Keep this in mind when adding a web tool.
- OmniRoute: the built-in
auto/best-*pools are flaky (stream empty). Don't add combos via its API (creates empty combos). dsh pins deterministic provider/model strings instead. OmniRoute is now behind Caddy basic-auth + a strong password (was being brute-forced). - Secrets hygiene: never put
.env, API keys, or passwords in the repo..gitignorecovers.env/.pi/. OmniRoute/OpenRouter tokens are held by Sam (keep out of memory/notes). - Kids: jo/harry/finn get a reduced view (no AI/chat, no admin-only tools) and no shell in dsh.
- Storage: Garage S3 buckets
sam, jo-media, harry, finn, shared-media(S3 needs ≥3-char names). Per-user files land inshared-media/<user>/.
Architecture (Mermaid)
flowchart LR
U[Family browsers / phones] -->|https *.lab.audasmedia.com.au| C[<b>Caddy</b> :35 reverse proxy]
C -->|console.lab| P[<b>Console portal</b> FastAPI+HTMX :8500]
C -->|dsh-*.lab| D[<b>dsh chat</b> per-user x4 SSE]
C -->|gimp/video/audio.lab| M[<b>WeWebtop media tools</b> GIMP/KdenLive/Audacity/LMMS]
C -->|metube/outline/jellyfin/nextcloud +| APPS[~40 self-hosted apps]
P -->|logins/admin| PG[(Postgres+Redis)]
P -->|transcribe| W[<b>Celery workers</b> RabbitMQ]
D -->|LLM| OR[<b>OmniRoute</b> :20129 gateway]
OR -->|chat/reasoning/coding| OC[opencode-go · deepseek flash/pro]
D -->|vision/video| OL[OpenRouter → GPT-5 · GLM-5v]
D -->|audio → text| WS[Whisper (faster-whisper :13:5000)]
W -->|MIDI/sheet| BP[Basic Pitch · MuScriptor]
U -->|Voice page| V[<b>Jervis</b> voice agent :8501]
V -->|HA REST/MQTT| HA[Home Assistant :30]
P -->|Files / S3| G[(Garage S3 + shared-media .13)]
G -.->|Borg backup| BACK[(Amazon S3 offsite)]
Diagrams
- Archify map (interactive HTML): repo →
docs/family-home-lab-map.html(+ source JSONdocs/archify/family-home-lab.architecture.json) - Mermaid: see "Architecture (Mermaid)" above.
Project management
- Tasks: Vikunja → project "Family Home Lab" — https://vikunja.lab.audasmedia.com.au/projects/8
- Docs (AI bots): Outline → collection "Family Home Lab" — https://outline.lab.audasmedia.com.au/collection/family-home-lab-XgbVukpg1g
- Source: Gitea
sam/family_home_lab; Obsidian vaultsam/obsidian-vault
Tools involved (employment)
- Portal/dash — FastAPI · Jinja2 · HTMX · Postgres/pgvector · Celery/RabbitMQ · Redis · boto3 · docker compose · Caddy
- AI — OmniRoute (gateway) · OpenRouter (vision/image) · DeepSeek/opencode-go · GLM-5v · Basic Pitch (tensorflow) · MuScriptor · piper TTS · dsh (custom chat)
- Apps — Garage S3 · Gitea · Vikunja · Outline · Home Assistant (Jervis) · Metube · Jellyfin · Nextcloud · Immich · +40 self-hosted
- Infra — NixOS (.13/.27) · Ubuntu (.35) · pi agent · systemd · RustDesk
Related
- Repo:
/home/sam/home_network/custom_tools/family_home_lab/(README.md,docs/websites.md,plan.md) - Websites on Nixos-Desktop 13 · Home Network Map Overview · Docker Containers