Commit

2e8043e

SSE or Websockets? Lesson from this week: WebSockets don’t survive mobile captive-portal sheets (the “sign in to Wi-Fi” popup). Our socket server was on a separate host, and the hotspot blocks every host except ours until the user pays. Server-sent events from the same origin do work. We swapped 1-second polling for SSE using FrankenPHP’s built-in Mercure. Payment to screen is now a median 337 ms, and the poll stays as a fallback. Anyone else fighting captive-portal webviews?

commit 2e8043e

Same lesson from the terminal side. SSE is just a long HTTP response, so it rides every proxy, captive portal and curl that already works. WebSockets need the upgrade to survive the whole path. For a CLI I'd pick SSE every time. The 337 ms number is nice, polling fallback is…