Product · Workstation
Live debugger overlay.
A small pill on every dev page shows branch, service, memory, and running containers. Click to expand into the full workstation dashboard. Zero app-side integration — an HTML transform at the injector layer, not a library you add to your code.
What you see
Collapsed pill (bottom-right of any dev page served through your tunnel):
┌─────────────────────────────────────────┐ │ main.web.wiley hero-redesign 127MB │ │ 12 containers · p50 14ms · ws ok │ └─────────────────────────────────────────┘
Expanded dashboard:
- Worktree + branch + last commit
- Docker compose status per service (up/healthy/down)
- Memory + CPU rollup from the VM
- Published links (public + private) with toggle controls
- Recent network requests to the current page's backend
- Tail of the nearest service logs
How it works
The cloudflared tunnel points at the injector on :8081. The injector is a transparent proxy that passes all traffic through to portless on :80, but transforms HTML responses to inject a single <script src="/__remoco-overlay.js"> tag.
Key design choices:
- WS passthrough. WebSocket upgrades bypass the HTML transformer — no HMR breakage.
- Content-type gate. Only
text/htmlresponses are touched. JSON, assets, streams all flow untouched. - Opt-out per page. Add
<meta name="remoco:overlay" content="off">to skip injection on a specific route (e.g., print preview).
Works with everything
No SDK, no wrapper component, no build plugin. Because the injection happens at the tunnel layer, it runs for:
- Next.js, Nuxt, Remix, Vite-powered SPAs
- Rails, Django, Flask, Express, Phoenix
- Static sites served by
python -m http.server - Any dev framework that serves HTML — the overlay doesn't care
Production-safe by construction. The injector only runs on private/preview URLs. Public (snapshot) URLs don't hit the injector; the overlay never ships to real users.