- Documents recent infrastructure cleanup (8 CTs destroyed, 35 DNS records removed, Headscale cleanup) - Adds 24 new runbooks covering Authentik, PeerTube, Meshtastic, RECON, Proxmox, Mailcow, Internet Archive, GPU routing - Adds project documentation for headscale, vaultwarden, peertube, matrix, mmud, advbbs, arr stack - Updates services.md, environment.md, caddy.md, authentik.md to match live infrastructure - Removes 4 deprecated runbook duplicates (canonical versions live in projects/) - Adds .gitignore for binary archives and editor temp files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.6 KiB
RUNBOOK — Deploy Echo6 Theme to Open WebUI
STATUS: COMPLETED — 2026-02-17 Theme deployed to https://ai.echo6.co. Open WebUI runs in Docker (not native as originally stated). Theme files bind-mounted from
/home/zvx/echo6-theme/into container via docker-compose.yml. Compose path:/opt/open-webui/docker-compose.ymlon cortex.
OBJECTIVE
Apply the togglable Echo6 custom CSS theme to the Open WebUI instance running at ai.echo6.co. The instance runs in Docker on the cortex VM. The theme is toggled on/off via a small "E6" button in the bottom-right corner, with the preference persisted in localStorage per browser.
THEME FILES
Located in this project's reference assets:
.ref/assets/echo6-openwebui-theme.css # Theme styles (activates via .echo6 class on <html>)
.ref/assets/echo6-theme-toggle.js # Toggle button + localStorage persistence
SAFETY FIRST — BACKUP BEFORE ANYTHING
Before making ANY changes:
-
Find the Open WebUI static build directory. Likely locations:
- Check:
pip show open-webui 2>/dev/nullfor the install path - Search:
find / -name "index.html" -path "*/open*webui*" 2>/dev/null - Search:
find / -name "app.html" -path "*/open*webui*" 2>/dev/null - Common pip paths:
/usr/lib/python3/dist-packages/open_webui/static/
- Check:
-
Once found, identify the root HTML file (likely
index.htmlorapp.html). -
Create a timestamped backup:
OWUI_DIR="/path/to/open-webui/build" # ← set this once found BACKUP_DIR="/home/matt/backups/openwebui-theme-$(date +%Y%m%d-%H%M%S)" mkdir -p "$BACKUP_DIR" cp -a "$OWUI_DIR" "$BACKUP_DIR/" echo "Backed up to: $BACKUP_DIR" -
Create a revert script at
/home/matt/revert-openwebui-theme.sh:#!/bin/bash # Revert Echo6 theme — restores original Open WebUI files BACKUP_DIR="<populated during deploy>" OWUI_DIR="<populated during deploy>" echo "[REVERT] Restoring Open WebUI from $BACKUP_DIR" cp -a "$BACKUP_DIR"/* "$OWUI_DIR/" echo "[REVERT] Done. Restart Open WebUI service if needed."Make it executable:
chmod +x /home/matt/revert-openwebui-theme.sh
DEPLOYMENT STEPS
Step 1: Copy theme files to Open WebUI static directory
cp .ref/assets/echo6-openwebui-theme.css "$OWUI_DIR/static/"
cp .ref/assets/echo6-theme-toggle.js "$OWUI_DIR/static/"
Also keep persistent copies that survive upgrades:
mkdir -p /home/matt/echo6-theme
cp .ref/assets/echo6-openwebui-theme.css /home/matt/echo6-theme/
cp .ref/assets/echo6-theme-toggle.js /home/matt/echo6-theme/
Step 2: Inject into the root HTML
Find the root HTML file and add BOTH a <link> and a <script> tag BEFORE </head>:
sed -i 's|</head>|<link rel="stylesheet" href="/static/echo6-openwebui-theme.css">\n<script src="/static/echo6-theme-toggle.js" defer></script>\n</head>|' "$OWUI_DIR/index.html"
IMPORTANT: Check existing <link> and <script> tags in the HTML first to confirm the /static/ prefix matches how Open WebUI serves assets. Adjust the path if it uses a different pattern (e.g. /_app/, /build/, etc.).
Step 3: Verify
grep "echo6" "$OWUI_DIR/index.html"
ls -la "$OWUI_DIR/static/echo6-openwebui-theme.css"
ls -la "$OWUI_DIR/static/echo6-theme-toggle.js"
Restart the service if needed:
sudo systemctl restart open-webui # or whatever the service name is
Step 4: Test
curl -s https://ai.echo6.co | grep echo6should show both the CSS and JS references- Load ai.echo6.co in browser — should see a small "E6" button in the bottom-right corner
- Click it: theme activates (dark bg, cyan accents, JetBrains Mono)
- Click again: reverts to stock Open WebUI appearance
- Refresh page: preference should persist
HOW THE TOGGLE WORKS
- The JS injects a fixed-position "E6" button at bottom-right
- Clicking it toggles the
echo6class on<html> - ALL CSS selectors in the theme are
.echo6 <target>— they ONLY fire when that class is present - The toggle state is saved to
localStorageunder the keyecho6-theme-active - On page load, the JS reads localStorage and restores the previous state before first paint
- Open WebUI's built-in theme picker (Light/Dark/OLED) still works independently
CONSTRAINTS / DO NOT
- Do NOT modify any Open WebUI Python source code
- Do NOT modify any existing JavaScript files
- Do NOT install additional packages
- Do NOT change Open WebUI configuration/database
- ONLY touch: one HTML file (add one
<link>+ one<script>tag) and add two static files - If anything looks wrong or the build structure is unexpected, STOP and report back
DEBUGGING
If the theme doesn't apply:
- Browser dev tools → Network tab — are both files loading? (200 vs 404)
- Browser dev tools → Elements → check
<html>— does it have classecho6after clicking toggle? - Browser dev tools → Console — any JS errors?
- If selectors don't match the actual DOM, inspect elements and adjust selectors in the CSS
If the toggle button doesn't appear:
- Check Console for JS errors
- Verify the
<script>tag is present in the HTML source - Check if the JS file path is correct (404 in Network tab)
AFTER UPGRADE PROCEDURE
After any Open WebUI upgrade, the build files get overwritten. To re-apply:
cp /home/matt/echo6-theme/echo6-openwebui-theme.css "$OWUI_DIR/static/"
cp /home/matt/echo6-theme/echo6-theme-toggle.js "$OWUI_DIR/static/"
# Re-inject the tags into the HTML:
sed -i 's|</head>|<link rel="stylesheet" href="/static/echo6-openwebui-theme.css">\n<script src="/static/echo6-theme-toggle.js" defer></script>\n</head>|' "$OWUI_DIR/index.html"
Or just re-run this runbook from the top.