# Web App (Control Panel) The PilotVault control-panel BFF. It serves the embedded Vue single-page app and proxies `/bff/*` to the API Server, so the browser only ever talks to this server (same-origin). The API Server is the gateway to PocketBase and to the live Fly App data; the browser never contacts either directly. ## Layout ``` server/ # Go BFF (package main) — proxies /bff/* and serves the SPA dist/ # built web assets (go:embed target — produced by the web build) .env.example # configuration template go.mod main.go # entrypoint, routing, static serving bff.go # /bff/* proxy handlers web/ # Vue 3 + Tailwind source, built by Vite into ../server/dist ``` ## Configuration See [server/.env.example](server/.env.example). Key variables: - `ADDR` — address the BFF listens on (default `:8090`). - `API_BASE` — default API Server the BFF proxies to (default `http://localhost:8080`). Users can override this per-session at login. ## Develop ```sh # 1. Build the web app into server/dist (embedded by the Go binary) cd web && npm install && npm run build && cd .. # 2. Run the BFF cd server && go run . ``` For a live UI with hot-reload, run `npm run dev` in `web/` (it proxies `/bff` to a locally running BFF on `:8090`). ## Build ```sh cd server && go build -o web-app . ``` Or build the container image (multi-stage; builds the web app then the binary): ```sh docker build -t pilotvault-web-app . ```