This change adds a network-only PWA surface to the login and panel pages. It does not cache panel data, API responses, credentials, or WebSocket traffic.
Run these commands from the repository root after installing the pinned Node and Go toolchains:
cd frontend
npm run typecheck
npm run lint
npx vitest run --project unit
npx vitest run --project components
npm run build
cd ..
go test ./...
go build ./...
The built binary must serve these paths beneath the configured webBasePath:
manifest.webmanifestpwa-register.jsservice-worker.jsicons/3x-ui-16.pngicons/3x-ui-24.pngicons/3x-ui-32.pngicons/3x-ui-64.pngicons/3x-ui-192.pngicons/3x-ui-512.pngThe login and panel HTML must contain a manifest link and registration script
whose URLs begin with the same runtime base path. The manifest must contain
display: "standalone", relative start_url and scope, and all six icon
entries.
Before replacing a server binary, record the current x-ui binary checksum and
create a timestamped copy of the binary and /etc/x-ui/x-ui.db. Restart only
the x-ui service after the candidate is staged. Because x-ui manages Xray as
a child process, the restart can briefly interrupt VPN connections.
After the restart, verify:
x-ui is active and its child Xray process is running.200.If any check fails, restore the exact binary backup, restart x-ui once, and repeat the checks against the original build.