This guide covers the deployment infrastructure of omp.0rk.de.

⚠️ Public Exposure Note: The dashboard at omp.0rk.de/omp-webui has no authentication and is completely public by design. Skills and telemetry stats are world-readable.

Services

The stack is powered by two distinct systemd daemon services:

  1. omp-webui.service
    • Runs: The SvelteKit dashboard (Node.js).
    • Port: 3001
    • Path: /home/dv/omp.0rk.de/omp-webui
  2. omp-stats.service
    • Runs: The official @oh-my-pi/omp-stats viewer.
    • Port: 3847
    • Path: /home/dv

Common Operations:

sudo systemctl status omp-webui.service
sudo systemctl restart omp-webui.service
sudo journalctl -u omp-stats.service -f

Build Process

Rebuilding the WebUI

When code in omp.0rk.de/omp-webui changes:

cd /home/dv/omp.0rk.de/omp-webui
npm run build
sudo systemctl restart omp-webui.service

Rebuilding the Quartz SSOT

When documentation in quartz-omp/content changes:

cd /home/dv/quartz-omp
npx quartz build

Note: npx quartz build completely wipes the public/ directory before rendering.

Nginx Reverse Proxy

Because the Quartz build wipes the public/ folder, placing symlinks inside public/ (e.g. public/omp-webui) is fragile. Instead, we use ^~ proxy rules in /etc/nginx/sites-enabled/omp.0rk.de.

Canonical Domain Redirect (ui.0rk.de)

The domain ui.0rk.de previously served the dashboard directly at the root. To maintain compatibility with existing links (like https://ui.0rk.de/collab#...) while enforcing the SvelteKit /omp-webui base path, ui.0rk.de is configured to 301 redirect all root traffic to https://omp.0rk.de/omp-webui/. The browser preserves any URL #fragments (like the Collab E2E secret) during this redirect, ensuring existing links continue to work seamlessly.

The ^~ Gotcha

The ^~ modifier ensures the proxy block takes precedence over regex blocks. Without it, nginx’s standard regex rule location ~* \.(css|js|...)$ would hijack the requests for SvelteKit and Stats assets, resulting in a 404 since they don’t exist in the Quartz public/ folder.

Proxy Routing Table

  • ^~ /omp-webui/ β†’ http://127.0.0.1:3001 (Trailing slash omitted to preserve the /omp-webui base path)
  • ^~ /omp-stats-ui/ β†’ http://127.0.0.1:3847/ (Trailing slash added to strip the path for the backend)
  • ^~ /api/ β†’ http://127.0.0.1:3847/api/ (Required because the stats JS makes absolute calls to /api/)