The control plane and campaign plane follow different trust paths. Switch
between them to trace authentication, authorization, and workload creation.
Administrative request
Campaign admission
Open the dashboard
The operator opens the loopback dashboard over HTTPS.
Proxy the API request
Frontend nginx proxies /api requests to the admin backend.
Authenticate the session
The backend authenticates the opaque server-side session cookie.
Authorize the route
Route-level authorization checks the user role and resource ownership.
Read or update state
The backend reads or updates SQLite and campaign storage.
Open the campaign URL
An approved recipient reaches the campaign URL through Traefik.
Validate routing state
The campaign service validates routing and tracking state.
Exchange the landing state
The landing flow exchanges valid state for a short-lived signed session
token.
Admit the WebSocket
The WebSocket handshake must complete within the configured timeout and
admission limits.
Create the browser workload
The campaign service asks the authenticated admin backend to create the
target browser container.
Tracking identifiers and stream paths are bearer-like capabilities and
must not be written to routine logs or documentation examples.
Collection
Campaign-local clients send bounded, validated records to private collection
routes. The campaign service forwards authenticated events to the admin
backend, which owns persistence. The dashboard later reads those records
through its authenticated API. Last modified on August 28, 2026