The deployable prototype runs with Docker Compose while the future browser worker reaches a dedicated local Chrome profile through a tightly constrained reverse SSH tunnel.
2always-on services
1private bridge
1reverse tunnel
0public CDP ports
Topology
One outbound tunnel connects the two trust zones
The user’s computer initiates SSH to the VPS. Browser control traffic crosses the encrypted tunnel; Stop & Shop traffic originates from the local Chrome session.
Compose creates a fixed private bridge. OpenSSH listens only on its gateway, forwarding CDP traffic to loopback on the local computer. The Chrome profile is dedicated to this prototype.
Deploy
The current prototype is container-ready
VPS
cd mvp
cp .env.docker.example .env
# set POSTGRES_PASSWORD
docker compose build
docker compose up -d dashboard postgres
docker compose ps
The dashboard binds to 127.0.0.1:3000 by default. Put a TLS reverse proxy in front of it or use an SSH local forward.
Dedicated non-admin user, key-only authentication, remote forwarding only, GatewayPorts clientspecified, no PTY, no agent forwarding, and no X11 forwarding.
Key policy
restrict,port-forwarding,permitlisten="172.30.0.1:9223" limits the dedicated key to the single listener used by Compose.
!
CDP is equivalent to browser control
Never use 0.0.0.0, a VPS public IP, the user’s everyday Chrome profile, or a shared SSH key. A party that reaches this endpoint can inspect and control the signed-in browser.
Operations
Offline is a visible workflow state
Condition
System action
Dashboard
Offline before run
Do not start browser work; optionally wait for a bounded grace period
Local browser offline · reconnect Chrome and SSH
Disconnect before write
Pause with no cart mutation
No cart changes were made
Disconnect after write
Re-read retailer state before considering any retry
Verifying retailer state
Unknown result
Never repeat blindly; require user verification
Manual verification required
docker compose --profile tools run --rm chrome-check
Decisions
Deployment questions still to answer
1
VPS baseline
Which Linux distribution, CPU architecture, SSH port, domain, and reverse proxy?
2
Local availability
Can the Mac remain awake and online during both weekly preparation windows?
3
Network collision
Is 172.30.0.0/24 free across Docker, VPN, and VPS networks?
4
Tunnel lifecycle
Manual start for the prototype or automatic restart with launchd?
5
Grace period
Skip an offline run immediately or wait up to a defined limit?
6
Fallback
Local Chrome only, or a separately approved managed-browser fallback?