Scene-first frontend shell for the AcidNet simulation.
This repo is not a copy of the old web UI. Its purpose is to build a different visual shell on top of the same server contract, with:
- first-person movement
- 3D settlement / road presentation
- Desktop + Mobile + XR interaction paths
- scene contract testing for Three.js state
acidnet_front is the frontend sandbox for experimenting on the presentation layer without rewriting the simulator itself.
The main implementation lives at:
The simulator API it expects is the existing AcidNet web contract:
GET /api/stateGET /api/eventsPOST /api/commandGET /api/dialogue-prompt
You can run the frontend without the simulator backend.
cd src/acidnet/frontend/client
python3 -m http.server 4173Then open:
?demo=1 uses an embedded offline state instead of /api/*.
For normal development, run the existing simulator on :8765 and use the local proxy in this repo.
npm install
npm run dev:proxyDefault routing:
- page:
http://127.0.0.1:4173/ - API proxy:
http://127.0.0.1:4173/api/* - upstream simulator:
http://127.0.0.1:8765
Environment overrides:
HOSTPORTAPI_ORIGIN
XR was built for Quest-class WebXR browsers, but there are a few hard constraints.
- WebXR needs
https://on Quest. Plain LANhttp://will not enable XR. - The page and
/api/*must share the same HTTPS origin. Enter XRmust be triggered by a direct user gesture.- For remote Quest testing, tunnel the proxy server, not the simulator server directly.
Run the proxy first, then expose it:
ssh -p 443 -R0:localhost:4173 a.pinggy.ioOpen the HTTPS Pinggy URL on Quest.
- Left stick: locomotion
- Right stick: radial menu selection / turn
- Trigger: activate hovered target or selected radial action
- Action menu: shared concept with Desktop, but adapted for XR controller input
- Use the proxy or another same-origin HTTPS gateway.
https page -> http apiwill fail. - If XR start fails, the frontend now surfaces the failure message in the XR status text as well as the dialog.
- XR panels are intentionally different from Desktop panels and are laid out for center-lower viewing.
- Click empty scene to capture the mouse
WASDto move- Mouse to look
EorTabopens the action menu- While the action menu is open, mouse movement selects menu wedges instead of rotating the camera
Install Playwright once:
npm installRun tests:
npm testScene testing policy:
UI naming / layout reference: