GitHub - bradfitz/sotot: Stay On Top Of Things: a dashboard of what needs your attention, fed by separate source programs over tailcat

GitHub

1 min read Original article ↗

sotot is a small daemon and read-only dashboard for the things that need your attention, from the next few minutes to months away: PRs to review, email to answer, bills to pay, domains and registrations to renew.

Each integration is a separate program, a source, that publishes things to the daemon over a documented WebSocket protocol, carried by tailcat so sources need no inbound ports. Sources can live anywhere, with their own credentials.

cmd/sotot the daemon: source listeners, state, dashboard (TCP or tsnet)
cmd/sotot-cast shows the dashboard on a Chromecast
cmd/sotot-gandi, cmd/sotot-porkbun sources: domain expiries at those registrars
cmd/sotot-gmail source: Gmail threads with a label
cmd/sotot-demo-live, cmd/sotot-demo-periodic fake sources for testing
source Go client for writing sources
protocol the wire types

Quick start

go generate ./web     # builds the dashboard's Go/Wasm browser client
go run ./cmd/sotot new-identity keys/demo.json
cat > sotot.json <<'EOF'
{"version": 1, "sources": [{"id": "demo", "name": "Demo", "listeners": [{"identity_file": "keys/demo.json"}]}]}
EOF
go run ./cmd/sotot run --config=sotot.json --state-dir=state &
SOTOT_ADDR=$(go run ./cmd/sotot address --config=sotot.json demo) go run ./cmd/sotot-demo-live

Then open http://127.0.0.1:8080/.

Requires Go 1.27.1 or later.