03 — community
Your best amenity is
currently a WhatsApp group.
A community feed and a member chat that live inside your own app — posts, polls, threads, DMs, channels, reactions and the moderation tools a real community needs. We built the engine in-house and deleted the vendors, so there is no per-member chat bill and no member data parked with someone else.
feed · chat · moderation — 106 member api routes, self-hosted, no per-seat bill
One post, the whole space.
No group chat required.
what's included
Everything a community needs.
None of the per-seat invoices.
feed
The feed
Posts with markdown, up to ten attachments, hashtags, GIFs, link previews and polls with a close date — sorted New, Top or Hot, with nested comments underneath.
chat
Chat, DMs & channels
1:1 messages, private groups and public channels members can browse and join — plus threads, voice notes, scheduled sends, invite links with an expiry, and a search grammar (from:, in:, has:, before:, after:).
emoji
Reactions & custom emoji
Any emoji, several different ones per person per message, plus emoji your space uploads itself — and a 365-entry fold map so a thumbs-up never splits its count across platforms.
moderation
Feed moderation
Reports, banned-term flagging, slow mode, mute-a-member and remove-with-reason — every removal leaves a scrubbed tombstone plus an audit-log entry, and the person who reported it gets told it was handled.
realtime
Realtime & offline
Twenty broadcast events over a Reverb server you host, and on mobile the feed and every conversation sit in on-device SQLite — write a message with no signal and it queues in an outbox, deduplicated so a retry never double-posts.
surfaces
One implementation
The same shared packages mount in the staff backoffice, the member web app and the native iOS and Android app — a feature ships to all three or to none of them.
The kitchen is closed
A community manager tells tersAI
to post the notice.
Four AI tools reach the feed. She types one sentence on the way back from the kitchen; tersAI drafts the post, picks the channel and asks before it publishes.
The confirmation is the feature: write actions never fire on a guess, and what lands is an ordinary post — comments, reactions, edit history and all.
"Post that the kitchen is closed for cleaning until 14:00."
tersAI — Draft for #general: "Kitchen is closed for cleaning until 14:00 — coffee is on the ground floor." Post it?
"Yes."
Posted to #general. It's on the feed in the app and on member web already.
fig. 01 — an announcement, one sentence long · tersai · 09:41"Our community stopped living— the team behind tershouse, sarajevo
in a group chat nobody owned."
Works with