localhost and 127.0.0.1 are exempt and load fine — this only affects other http:// hosts. To preview those, run this app locally or serve the local site over HTTPS.
It loads a website into desktop, tablet and mobile frames on one zoomable canvas, so you can review a Local and a Live version side by side.
Quick start
Type a Local and a Live URL up top, or pick a preset. Press Enter to load both. Local can be a dev server like http://localhost:5173 — see Previewing a local dev server below.
Switch Compare Mode between Live only, Local only, or Both side by side.
Drag to pan, scroll to zoom, or use the bottom toolbar. Press R to reset the view.
Press Ctrl+S to save a URL pair. Name it Folder / Name to group it into folders.
npm run dev / Vite / server prints). Press Enter to load it.http://localhost and http://127.0.0.1 load fine even though this tool runs over HTTPS — loopback addresses are exempt from the browser's mixed-content block. (Any other plain http:// host still is blocked; that is the only case where the red banner's “Download Standalone HTML” helps.)X-Frame-Options / Content-Security-Policy: frame-ancestors — same as the “Blank frame?” note above).node scratch/serve.js → localhost:4000) and point Local at your localhost app: both are localhost, so you stay logged in inside the frames. The hosted build (a different site) only shows the login page for a localhost app.Feature guide
mix-blend-mode: difference. Identical spots turn pitch black; layout Shifts glow in neon colors. Auto-aligns scroll position between same-domain views while active.Shift-key straight line snap ($0^\circ$ / $90^\circ$), crosshairs, and persistent distance badges.Keyboard shortcuts
| Key | Action |
|---|---|
| ? | Toggle this Help Center |
| 1 2 3 | Toggle Desktop / Tablet / Mobile |
| M | Toggle Pixel Ruler (measure tool) |
| Shift | Hold while measuring for straight line ($0^\circ$ / $90^\circ$) |
| L | Compare Mode: Live only |
| B | Compare Mode: Both (compare) |
| O | Compare Mode: Local only |
| Ctrl+S | Save preset |
| Alt + ↑ ↓ | Reorder presets (in the preset list; drag the grip does the same) |
| R | Reset zoom & layout |
| Esc | Exit Ruler / Focus view / dialogs |
Feedback & bug reports
Found a bug or have an idea? This generates a pre-filled email draft to the developer.
Scan to open on device
Alt+click an element to inspect it — plain clicks still go to the
page, so the preview stays usable. The selector is scoped to that frame's document,
and the size is in the page's own CSS pixels (canvas zoom doesn't affect it).
Alt+click hits the deepest element under the pointer — on an icon that is the
inner <path>, not the <svg> around it, so read
the selector to see where you landed.
nakija-ready arrived within 3s. A page with no bridge is perfectly
normal — but if you expected one, it is almost always one of these three:
localhost — a LAN IP such as
192.168.x.x is refused by the bridge on purpose
—) is not in the
bridge's allowlist, and it rejects silently
http://localhost:4000 (node scratch/serve.js) or the
hosted build — from any other port the bridge stays silent by design.
Option B: Dev Helper Script
Or paste a into your local website code
().