So I built Firehose on top of it

Like ActionCable, but with persistence and sequencing

channel = Firehose.channel("report:#{report.id}")

# Each publish appends a sequenced message
channel.publish("page 1 done")  # sequence 1
channel.publish("page 2 done")  # sequence 2
channel.publish("page 3 done")  # sequence 3

# Client reconnects: "I last saw sequence 1"
# Firehose replays sequence 2, 3
31 / 45