Chat
Real-time direct messages and group chats with @mentions, presence, and search.
MangoApps
Overview
Pusher-powered real-time chat with one-to-one DMs, group rooms, @mentions feeding the existing Notification system, per-room presence, and PostgreSQL full-text search. Built on the same business-scoping and authentication patterns as the rest of the platform — every message is searchable, auditable, and tenant-isolated.
See how direct messages, group rooms and channels, one-click video huddles, threaded replies, and full-text or semantic search come together in one real-time workspace.
Highlights
Capabilities
Conversations & Channels
-
One-to-one direct messages Auto-deduped per pair — starting a chat with someone you already DM'd reopens the existing room.
-
Group rooms with admin/member roles Creator becomes room admin; admins add/remove members, members can leave, with a sole-admin guard against orphaned rooms.
-
Named public channels `channel` is a first-class room_type alongside `direct` and `group`, with its own name and topic.
-
Threaded replies Flat one-level threads in an offcanvas panel; replies fan out over the parent room's live channel.
-
Edit & soft-delete your own messages Editable for 15 minutes after send (admin-toggleable); delete is soft so audit trails survive.
Real-time, Presence & Read Receipts
-
Instant message delivery Messages persist to PostgreSQL then fan out sub-second over the room's private channel.
-
Per-room presence (who's here now) A presence channel authorized through the same business + room-membership gate drives the avatar strip.
-
Global online status A cache-based heartbeat tracks who is online business-wide, returned in a single batch.
-
Typing indicators Live "user is typing" inside rooms; admin-toggleable per business.
-
Read receipts ("Seen by") Shows last-read per user in DMs and groups; intentionally suppressed in channels; admin-toggleable.
-
Anonymized read receipts option Admins can keep the read state but hide reader names/avatars in both the live broadcast and the rendered attribution.
-
Important messages & read-receipt requests Senders can flag a message important or request an explicit per-message acknowledgement, with a 'Read by X/Y' report.
Rich Messaging & Media
-
File attachments Drag-and-drop or paperclip upload, up to 10 files per message, uploaded browser-direct to S3.
-
Inline images & GIFs Rendered inline with async-generated thumbnails and captured dimensions.
-
Video attachments Transcoded via AWS MediaConvert with a raw-MP4 fallback when no transcoder is configured.
-
Auto-generated video subtitles Optional per-business subtitle pipeline that runs alongside the transcode; off by default.
-
Emoji reactions Toggle from the 10-emoji platform default set; reactions broadcast live to everyone in the room.
-
@mentions Mention teammates to pull them in; mentions feed the platform Notification system.
Search & Discovery
-
PostgreSQL full-text search A `search_vector` (tsvector + GIN index) is kept fresh on create and edit; matches highlight with `<mark>` tags.
-
Semantic search via pgvector Admin-gated 'search by meaning' mode; embeddings refresh on create/edit and a one-time backfill seeds history.
-
Filter search by sender Narrow message-content search to specific people.
-
Find conversations by name Look up a room by group name or DM partner name, separate from message-content search.
-
Dedicated Mentions inbox Reverse-chronological feed of every chat mention with cursor pagination and jump-to-message.
Analytics & Insights
-
Admin analytics dashboard Adoption %, DAU/MAU stickiness, cross-department communication, and mention response rate.
-
CSV export of analytics One file with summary metrics, 30-day DAU, 12-week adoption trend, and top department-pair volumes.
-
Cross-department & mention-response metrics Percentage of messages crossing departments (with top dept pairs) plus 1h/4h/24h mention response rate and median.
-
Personal activity dashboard Every user sees active conversations, their mention response time vs. team, a messaging-hours heatmap, and top conversations.
Clients & API
-
Desktop client (Mac & Windows) The Messenger desktop app reuses the same Pusher transport and JSON API; download surfaced from the chat dashboard.
-
Mobile web (iOS & Android browsers) Dedicated mobile controllers/views for the room list, room view, mentions inbox, and sending.
-
REST API for chat Bearer-token or session-authed endpoints for rooms, members, messages, threads, reactions, search, mentions, presence, and settings.
-
Pin conversations Per-user pin state to keep priority rooms at the top (desktop client / API).
-
Mute conversations Per-user mute with an expiry to silence noisy rooms (desktop client / API).
Admin Controls
-
Toggle direct messages
-
Toggle group chats & channels
-
Toggle file uploads Hides the paperclip when off; server-side validation refuses uploads either way.
-
Toggle typing indicators & read receipts
-
Toggle semantic search Off by default — flipping it on kicks off a one-time embeddings backfill.
-
Toggle video huddles (Live Assist) Adds a one-click Huddle button; requires the Live Assist app + a configured LiveKit provider.
-
Configurable attachment size caps Separate per-file caps for files/images (1–500 MB) and for video.
Limits & Specs
-
Real-time transport: Pusher Channels
-
Message storage: PostgreSQL (single non-partitioned table — partitioned at ~100M rows)
-
Default max attachment size: 25 MB per file (admin-configurable, 1–500 MB)
-
Default max video attachment size: 500 MB per file (admin-configurable)
-
Max attachments per message: 10
-
Reaction emoji set: 10 platform-default emojis
-
Message edit window: 15 minutes after send
-
Mobile support: iOS & Android via mobile web
-
Pricing: Licensed add-on — standalone or in the Work Coordination Pack
Use cases
Resources
FAQ
They're two deliberately separate apps. Chat is the synchronous, real-time messenger: named rooms and channels, 1:1 and group DMs, live presence, typing indicators, read receipts, and one-click video huddles — built for conversations that happen while people are online together. Messages is the asynchronous, inbox-resident channel — like email — for private notes that don't need the recipient present. Chat's `direct_messages_enabled` toggle governs Chat's real-time 1:1 rooms; the Messages app is governed independently. Most organizations run both.
Chat is a licensed app (it requires a license and is disabled until an admin enables it). It's available standalone or as part of the Work Coordination Pack, which bundles Chat with Calendar, Tasks, Workspaces, and more. Talk to your MangoApps contact for current per-user pricing and packaging.
Yes — any room or DM can start a live video huddle with one click. Huddles are powered by the Live Assist app, so the button appears once an admin enables the huddle toggle in Chat settings AND the Live Assist app is set up with a LiveKit provider. Without those two pieces in place, Chat stays a text/media messenger.
Up to 10 files per message. Files and images default to a 25 MB per-file cap (admins can tune it from 1 to 500 MB), and video gets its own larger cap because transcoded video is routinely bigger. Executable and scriptable file types are blocked server-side by both extension and MIME as defense-in-depth. Videos are transcoded via AWS MediaConvert, with optional auto-generated subtitles and a raw-MP4 fallback.
Keyword (PostgreSQL full-text) search is on by default and covers most needs, with sender filters and a separate 'find a conversation by name' lookup. Semantic search adds a 'find a message about…' mode powered by pgvector embeddings — search by meaning rather than exact words. It's admin-gated and off by default because turning it on requires a one-time embedding backfill of your history; after that, new messages and edits keep their embeddings fresh automatically.
Yes, with two levels of control. One toggle governs whether the 'Seen by' indicator appears at all (it's shown in DMs and groups and intentionally excluded from channels). A second toggle anonymizes receipts — keeping the read state but hiding reader names and avatars — in both the live broadcast and the rendered attribution. Typing indicators, message editing, and semantic search each have their own toggle too.
Both. A Messenger desktop client for Mac and Windows reuses the same Pusher transport and JSON API and is downloadable from the chat dashboard. Mobile web gives iOS and Android browsers the room list, room view, mentions inbox, and sending. Every surface authenticates against the same business + room-membership rules, so tenant isolation holds everywhere.
Yes. Admins get a company-wide dashboard — adoption, DAU/MAU stickiness, cross-department communication (including top department pairs), and mention response rate — all exportable as a single CSV. Separately, every user gets a personal activity dashboard: active conversations, their mention response time versus the team, a messaging-hours heatmap, and their top conversations.
Messages always persist to PostgreSQL over the standard HTTP request/response, so sending never depends on the real-time layer — if Pusher is unavailable, real-time delivery, presence, typing, and receipts degrade gracefully and a refresh shows what was missed. Every channel subscription is authorized inside Rails against the caller's business and room membership before it's signed, and all data is scoped per business, so tenants never see each other's conversations.