Followup from the chat sample (`examples/chat/`). A grab-bag of
nice-to-have client-facing features that aren't in v1.
Items
- File uploads: object-storage-backed. Frontend posts a binary
WS frame; server stores in `FilesystemObjectStorageBackend` (or
S3) and broadcasts a `{ type: 'attachment', url, filename }`
message.
- Emojis: client-side picker (e.g. `emoji-mart`); server is
agnostic — text payload carries the unicode char.
- Typing indicators: ephemeral `{ type: 'typing', room }` →
broadcast `{ type: 'user-typing', room, username }`; auto-times-out
after 3 s. Not persisted.
- Read receipts: track per-user "last seen sequence" in DD-LWWMap
(`read-up-to.` → roomName → seq). UI shows ✓✓ next
to seen messages.
These can land as separate sub-PRs once any of them is needed.
Source: `examples/chat/` README → "Out of scope" section.
Followup from the chat sample (`examples/chat/`). A grab-bag of
nice-to-have client-facing features that aren't in v1.
Items
WS frame; server stores in `FilesystemObjectStorageBackend` (or
S3) and broadcasts a `{ type: 'attachment', url, filename }`
message.
agnostic — text payload carries the unicode char.
broadcast `{ type: 'user-typing', room, username }`; auto-times-out
after 3 s. Not persisted.
(`read-up-to.` → roomName → seq). UI shows ✓✓ next
to seen messages.
These can land as separate sub-PRs once any of them is needed.
Source: `examples/chat/` README → "Out of scope" section.