When the always-on tunnel daemon already serves :3000, the app reuses it (close() is a no-op) rather than spawning a second server on another port, so the GUI and the tunnel share one base app.
When the always-on tunnel daemon already serves :3000, the app reuses it (close() is a no-op) rather than spawning a second server on another port, so the GUI and the tunnel share one base app.