# whiteboard-render Local sidecar for whiteboard frame mode -- see `server.js`'s own header comment for the full "why Node, why not a headless browser" reasoning. Not an independently deployed service: it runs as a second process inside the main server's container (`../Dockerfile` installs Node, `../start.sh` launches this in the background before `exec`-ing uvicorn), reachable only at `127.0.0.1:3001` from the Python process in that same container. **Not runtime-tested against a real `npm install` during development** -- this environment had no Node.js/npm available, only the npm registry API (used to verify the dependency versions/licenses in `package.json` actually exist and resolve). The code is written carefully against each library's documented API (`@excalidraw/utils`'s `exportToSvg`, `@resvg/resvg-js`'s `Resvg` class), but `docker compose build`+actually running it is the first time this has executed end to end -- and the first real run did in fact crash: `@excalidraw/utils`'s bundle touches bare browser globals (`devicePixelRatio`, `location`, `matchMedia`, ...) the same way inline `