Reactions

Every shared session and plan has live emoji reactions powered by WebSocket:

coolcool cool · heartheart heart · lightbulblightbulb lightbulb

How it works

When you view a session or plan, the page opens a WebSocket connection to the server. Clicking a reaction button sends the emoji, and the server broadcasts it to all connected viewers. Reactions fall down the screen with a gentle animation.

Reaction counts are persisted — they accumulate across all viewers and sessions. Counts are displayed on the reaction buttons and on profile page tiles.

Rate limiting

Reactions are rate limited to 3 per second per connection. Excess reactions are silently dropped.

Muting

Click the bell icon in the toolbar to mute reaction animations. Your mute preference is saved in localStorage and persists across page loads.

WebSocket protocol

Connect to GET /s/{nanoid}/reactions or GET /p/{nanoid}/reactions.

Send:

{"emoji": "😎"}

Receive:

{"emoji": "😎", "x": 0.42}

The x field is a random float between 0 and 1, used for horizontal positioning of the floating animation.