Localhost port watcher: detects a newly bound dev-server port via bounded TCP probing, opens an iframe preview pane, and captures a one-click timestamped screenshot receipt via headless Chrome. No Claude Code changes, stdlib-only, 16 passing tests plus a real end-to-end dogfood (demo.py) with a genuine recorded screenshot. Landing page at ventures/preview-sidecar/site/index.html uses a receipt/ticket visual identity (narrow thermal-paper column, dotted rules, wax stamp, monospace totals) distinct from the finishline venture, with one above-the-fold signup CTA and an honest free/paid pricing section. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
28 lines
1.3 KiB
Plaintext
28 lines
1.3 KiB
Plaintext
$ python3 demo.py
|
|
$ (throwaway dev server listening on 127.0.0.1:61125, serving a one-page site)
|
|
$ python3 sidecar.py watch --ports 61125 --interval 0.3 --max-cycles 3 --no-open --out /tmp/preview-sidecar-out
|
|
[preview-sidecar] watching 1 candidate ports on 127.0.0.1 every 0.3s: [61125]
|
|
[preview-sidecar] detected 127.0.0.1:61125 at 2026-10-10T17:29:17Z -> /tmp/preview-sidecar-out/preview-61125-20261010T172917Z.html
|
|
preview pane written: preview-61125-20261010T172917Z.html (iframe -> http://127.0.0.1:61125)
|
|
$ python3 sidecar.py screenshot --port 61125 --out /tmp/preview-sidecar-out --chrome '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
|
|
{
|
|
"url": "http://127.0.0.1:61125",
|
|
"host": "127.0.0.1",
|
|
"port": 61125,
|
|
"captured_at": "2026-10-10T17:29:17Z",
|
|
"chrome": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
"png": "/tmp/preview-sidecar-out/receipt-61125-20261010T172915Z.png",
|
|
"sha256": "6e13265f215eb1e39245011165192d703d99501ffd9c08499b513b06682fb3d5",
|
|
"bytes": 16208,
|
|
"json": "/tmp/preview-sidecar-out/receipt-61125-20261010T172915Z.json"
|
|
}
|
|
receipt verified: 16208 bytes, sha256=6e13265f215e...
|
|
$ (dev server on 61125 stopped)
|
|
|
|
$ python3 -m unittest discover -s ventures/preview-sidecar -p 'test_*.py' -v
|
|
...
|
|
----------------------------------------------------------------------
|
|
Ran 16 tests in 0.003s
|
|
|
|
OK
|