Chat is the part of Korat everything else leans on. A friend invites you to their restaurant table and the invite is a chat card. Someone shares a post and it lands as a card that opens the post. A Dating match becomes a real conversation the moment both people like each other. Because there is one place a message can arrive, there is one place to look — and the messenger only has to do one job well: a thread between two people, with enough attachment types that you never have to leave for another app.
Two people, one thread
Korat chat is one-to-one only: a direct thread holds exactly two people and there is no way to add a third. Conversation between more people happens in two other places, and neither of them is this messenger. Groups carry it as posts — a post takes a group id and picks up comments, mentions and notifications from the ordinary feed machinery, which is threaded, searchable and permanent. And a group or a sports club can have rooms: Discord-style text channels listed inside the group, built on their own tables with their own permissions, and doing a good deal less than a direct thread. The limits are set out in full below, because a room that looks like chat and is not is worse than no room at all.
What a one-to-one thread gets in exchange is depth. You can reply to a specific message as a quote, edit a message after sending it, unsend one, pin the important one to the top of the thread, and react with a quick set of six emoji or open a bar of thirty. Typing indicators and read state work the way you expect.
What you can put in a message
Beyond text there are image uploads, arbitrary file attachments, and voice messages recorded through the device's own MediaRecorder as AAC in an M4A container, with playback inside the bubble. You can send your location. And there are system cards the rest of the app mints: a shared post, an invitation to a dining table, a record of a call that happened.
A new message raises a push notification on the other person's device — one-to-one messages and the business inbox alike. It reaches only devices that have not been revoked, and opening the room clears that room's notification. A chat that produces messages nobody is told about is not a quiet chat; it is a broken one. The limitation to state alongside it: the web app has no push. Talking from a browser, you see the message when you open the tab, not when it arrives.
The call record card matters more than it sounds. A call that rang and was missed is otherwise invisible — you open the app later and there is nothing to tell you anything happened. Writing the call into the thread as a message means the history of a relationship is one scrollable list, not a conversation in one place and a call log in another.
Calls that both people opened the door for
Voice and video calls run on real WebRTC through a manager in the app, with mute, camera off, camera switching, a full-screen incoming-call screen and a notification when the app is in the background. What is unusual is the gate in front of them: call consent is two-sided and per-chat. The call buttons do not appear in a thread until both people have opened the lock on their side. Until then neither of you can ring the other.
This is a deliberate answer to the fact that a ringing phone is the most intrusive thing an app can do. A stranger who found you through Dating or a shop page can send a message you can ignore; they cannot make your phone ring at two in the morning unless you have specifically agreed that they can. The consent is per conversation, so agreeing with one person says nothing about anyone else, and it is a lock you open rather than a setting buried in preferences.
Two honest limits. Direct messages are one-to-one — a thread cannot be turned into a group, and there is no multi-person version of the messenger described on this page. What does exist is the rooms a group or club gets, and they are a thinner system on different tables: plain text you can send and delete, with no editing, no reply to a specific message, no reactions, no photos, files or voice messages, and no calls. Read nothing on this page as a description of a room.
Calls are not end-to-end encrypted, and there is no TURN server. Media is peer-to-peer where the two networks can reach each other directly, but without a relay some combinations of mobile carrier and restrictive NAT simply fail to connect. If a call will not establish, that is usually why, and it is a piece of infrastructure we have not stood up yet rather than a bug in the app.
Presence is a heartbeat, not a socket
The green dot in Korat means one specific thing: that person's client wrote a last_seen timestamp within the last ninety seconds. It is polling on an interval, not a persistent socket connection, so it is cheap on battery and it is coarse. Someone who closed the app forty seconds ago still looks online. Someone in a tunnel goes dark before they have gone anywhere.
We call it a heartbeat rather than "online" because presence is the feature people most often read as proof — proof that a message was seen, proof that someone is ignoring them. A ninety-second polling window cannot carry that weight.
Finding the conversation you want
Two features do most of the work of keeping a long chat list usable. The first is the chat alias: rename any conversation to whatever you actually call that person, and the new name is visible only to you. It never leaks into the feed, into groups, into comments, or onto their profile. The person you have saved as "landlord" sees their own display name everywhere, exactly as they wrote it. Names elsewhere in Korat are resolved live from the profile, precisely so a rename in one place cannot desynchronise from another.
The second is labels — colour-coded tags you create yourself, with membership you control and full create, edit and delete. They double as filters on the chat list, next to the built-in filters for unread, official accounts and threads that came from Dating. Search runs over both the chat name and the last message, so a half-remembered sentence is enough to find a thread. Chats can be pinned to the top, marked read, or deleted.
What the server can see, and what you can do about someone
Messages are stored server-side in plain text, protected by row-level security policies that restrict a conversation's rows to its two participants. There is no end-to-end encryption of chats, calls or files anywhere in Korat, and there is no application-level encryption at rest beyond what the managed database provides. If that is a requirement for what you are discussing, use something built for it — an accurate description of our threat model is more useful to you than a reassuring word.
On the human side: you can block someone from the thread itself or from their profile, which hides their chats and posts from you and removes them from your Dating deck at the same time, and you can report a user. Blocking is one action with consequences in every part of the app rather than something you have to repeat per surface.