Skip to content
baloisePublic

About

A tiny digital signage stack.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CatCast

CatCast logo

A tiny digital signage stack for places where you can't install software as admin. Three pieces:

  • catstage — fullscreen viewer (Tauri / WebView2). Drop the EXE on a machine, point it at a broker, walk away.
  • catsocks — dumb WebSocket relay. Runs on Cloudflare Workers' free tier. Sees only opaque ciphertext.
  • catc — the CLI. Drives one or many stages from your laptop.
  • catproxy — optional same-origin rewriting proxy (Cloudflare Worker) for pages whose sub-resources get lost behind per-domain authenticating corporate proxies. See workers/catproxy, including what to do when a kiosk lands on the corporate proxy's login page and how catc trace shows where a stage really is.

End-to-end encrypted. No accounts, no master server, no telemetry. Stage state survives reboots and broker outages.

Status

Early. v1 targets Windows x64 only — macOS / Linux / ARM distribution may follow. The first install of a stage is a manual EXE drop; after that catc stage update pushes a release to running stages: each one downloads the asset (through catproxy's /b64/ route as text, so a content-sniffing corporate proxy never sees an executable), verifies the SHA-256 and an Ed25519 release signature, swaps the binary in beside itself, relaunches with its own arguments and keeps the previous binary as .old for one generation. For kiosks whose proxy blocks the download outright, catc stage update --stream pushes the verified binary over the encrypted broker instead. catc self-update updates the CLI the same way. Nothing updates on its own — there is no periodic check, by design. WSL/Linux is the recommended dev path.

Quick start

# 1. Deploy the broker (once per deployment)
cd crates/catsocks && wrangler deploy
# -> wss://catsocks.<your-acct>.workers.dev/r/<your-room>

# 2. On each stage machine
catstage.exe --install-autostart --start --socks wss://.../r/<room> --name kitchen --screen 2
# --install-autostart only installs for the next login; --start also starts it now.
# Optional: --screen is 1-based. If unavailable, catstage falls back to primary monitor.
# --socks is remembered: later starts can be plain `catstage.exe`.

# 3. On your laptop
catc init --socks wss://.../r/<room>
catc stage add kitchen        # the name shows on the stage's catcast://about page
catc config import config.yaml --name kitchen
catc nav 'https://example.com/board?team=a&view=tv#geek,flags' --for 5m
catc status                   # broker, stages, mirrors: up/down, last seen, uptime

See examples/ for config.yaml, aliases.yaml, and a default Rhai logic.

URLs with ?, &, # or spaces. URLs travel and are stored exactly as written, but two layers in front of catcast parse them first:

  • The shell. Put the URL in single quotes on the catc command line: unquoted, & sends the command to the background, ? is a wildcard and # starts a comment.
  • YAML. In config.yaml a URL in a list (- https://…) or after url: needs no quotes. Inside [ … ] or { … } the comma splits it, so quote it there (["https://x/#geek,flags"]).

catc and the stage refuse a string that is not a URL. A page whose #fragment changes is reloaded so it reads the new one. When a proxy or single-sign-on login sends the kiosk back without its fragment, the stage puts the fragment back and reloads once.

Mirror a stage outside the network

A stage inside the network can relay screenshots of what it shows to a stage in a building without access, end-to-end encrypted through the same broker. See docs/mirror.md.

License

0BSD. Use it. Fork it. Strip the credits. Sell it. Whatever.

Contributing

Yes please. See CONTRIBUTING.md. No CLA, no DCO, no gatekeeping. Send a patch, an issue, or a sketch on a napkin.

About

A tiny digital signage stack.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages