@nasser I use object storage for this. I've been using Backblaze for my password manager for like 7+ years and IDK if they have billed me 1$ yet. I just give the backblaze credential out publicly on pwm.sequentialread.com. I've never had any issues with that. The token can PUT and GET but not delete or list.
-----
For realtime stuff, my favorite has been HTTP/2 + Server Sent Events. No limit on number of client -> server event sends (each one is a POST request in HTTP/2) and no WebSocket-related-protocol-negotiation issues.
The client-side JavaScript is very simple and only uses built-in browser APIs (EventSource + fetch)
I've always implemented the backend from scratch, IDK if there's a simple "broadcast" SSE server you could just download and run.
Here's an example implementation with python-flask as the server:
https://github.com/pingnova/depottextline/blob/main/api_server_sent_events.py
https://github.com/pingnova/depottextline/blob/main/frontend/src/EventHub.js
Here's an example in Go:
https://git.sequentialread.com/forest/mixtape/src/branch/main/server.go#L118-L143