Guide
How to use Kivo
Kivo is a realtime chat app: private DMs, small groups, and Discord-style communities. Live at kivo.usersynax.dev.
What is Kivo
Kivo puts two familiar chat styles in one place: WhatsApp-like private messages and groups, plus Discord-like Spaces with channels. You pick a conversation on the left and chat in the middle. Everything updates live — new messages, typing, online status, and read receipts — without refreshing.
It is a student full-stack project, built to learn real product engineering. It is still meant for real everyday chat: friends, class groups, and small communities.
- 1:1 DMs with friends
- Private groups with admins
- Public Spaces you can discover and join
- Mentions, reactions, replies, and themes
- File & image attachments in chat
Create an account
Open Sign up on kivo.usersynax.dev.
- Enter a display name, username, email, and password (at least 8 characters).
- Submit. You are signed in instantly and land in chat at /app — no OTP or waiting.
Username must be unique: 3–30 characters, letters, numbers, and underscores. Email must be unique too. Nothing blocks chatting — email verification is a link-based flow on the backend (/verify-email plus a resend API), but signup does not email a verification link automatically right now.
To log in later, use Log in with either your email or username.
Forgot your password? Use Forgot password on the login page — Kivo emails a reset link (expires in 1 hour). Resetting signs you out on every device.
To log out, open your profile from the bottom of the sidebar, go to the full profile page, and choose Log out.
The chat layout
After you sign in you see:
- Left — an icon rail switches between Chats, Groups, Spaces, and Settings. Each panel has search, the notification bell, and per-tab actions (New chat, New group, Discover).
- Center — the open conversation.
- Right — on a wide screen, the other person’s profile in a DM, or group/Space settings when you open them.
On a phone the same panels live in a bottom tab bar — Chats, Groups, Spaces, and Menu — so it feels like a native app. The Menu opens your profile, a full-screen Appearance page, and Settings. Open a chat, then use Back in the header (or an edge swipe) to return. Click your avatar in the rail (or open the Menu → Profile) to edit your profile. Kivo remembers the last chat you had open, and your lists plus the latest messages paint instantly from a local browser cache while fresh data arrives.
Friends
Open the + menu in the sidebar and choose Friends. Three tabs: Requests, Friends, Add.
Add someone
- Go to Add and search by username, email, or display name.
- Click Add on a result.
You cannot friend yourself or send a duplicate request. If they already requested you, accepting makes you friends right away.
Incoming requests
Open Requests, then Accept or Decline. They get a notification when you accept.
Start a private chat
On the Friends tab, click Message. That opens an existing DM or creates one. To remove a friend, open their profile and choose Unfriend — this removes the friendship for both of you at once, live — or Block them entirely from any DM or profile. Everyone you've blocked is listed under Settings → Blocked users, where you can unblock them in one tap.
Direct messages
DMs are 1:1. Starting chat with the same person again reuses the same conversation.
- Find them under Direct in the sidebar, or use the search field.
- Click the row. Unread counts show as a badge. A green dot on the avatar means they are online; when offline, Kivo shows their last-active time.
Sending messages
The same composer works in DMs, groups, and Space channels.
Send
Type in “Type a message…”, then Enter to send. Shift+Enter adds a new line. Max 4000 characters. If a send fails, retry from that bubble. Unsent text is kept per chat automatically — switch conversations or reload and your draft is still there.
Reply
Right-click (or use the message menu) → Reply. A quote preview sits above the composer. Send, or cancel with the X.
Message menu
Right-click a bubble on desktop, or press and hold on mobile, to open the menu: quick reactions, Copy, Save message, View profile / Block (others’ messages), Reply, Thread, Forward, Pin, Select, and Mark as unread. Your own messages add Edit and Delete.
React, edit, delete
- React: message menu → React, or tap a reaction chip under the bubble. Same emoji again removes yours. Quick like: double-click (or long-press) a message to ❤️ it.
- Emoji in text: smile button next to the composer (270+ emojis, grouped by category).
- Edit or delete: only your own messages. Edit saves with Enter, Escape cancels — or press ↑ with an empty composer to edit your last message. Delete clears the text but keeps the row so replies stay in place. Edited messages show “edited”.
Links & previews
Links in messages are clickable and open in a new tab. The first link also shows a preview card with the page’s title, description, and image.
Timeline
Long chats are split by day (“Today”, “Yesterday”, a weekday, or a date). Messages that are just 1–3 emoji render big with no bubble. Reading old history never yanks you to the bottom — a floating “N new” pill appears instead, and one tap takes you back to the latest.
Copy & share
Copy puts the message text on your clipboard (attachments copy the file name and link). Where the browser supports it, Share… opens the native share sheet with the text.
Forward
Forward opens a conversation picker. The copy keeps the original content and shows a “Forwarded from @user” pill naming the original author.
Pin
Any member can Pin a message. Pinned messages appear in a banner under the chat header, newest first. Unpin the message, or delete it, to clear it from the banner.
Threads
A thread is a discussion attached to one message. Choose Thread from the message menu (anyone can start one, even under an announcement), or click the “N replies” chip under a message to reopen it. Replies appear in a side panel — right-hand drawer on desktop, full screen on mobile — and stay out of the main timeline: they don’t add to the chat’s unread badge and don’t ring the bell, unless someone @mentions you inside the thread.
Select mode
Select (or long-press a bubble on mobile) switches the chat to multi-select. Tick several bubbles, then use the floating bar to copy, forward, or delete your own messages.
Save messages
Save message bookmarks any bubble (yours, others’, thread replies). Open the Saved panel from the bookmark icon next to Search to see everything you saved across chats, newest first — clicking an entry jumps to that conversation and highlights the message. Saves are personal and follow your account.
Mention someone
- Type @ then the start of their name or username.
- Pick from the list (arrows, then Enter or Tab, or click).
Mentions only include people in that chat. They get a “mentioned you” notification.
History, receipts, typing
Scroll up for older messages. Your bubbles show sent → delivered → read. When someone else is typing, you see it in the open chat. Opening a chat marks it read. System lines like “Admin added X” do not add to unread. If your connection drops and returns, Kivo gap-fills the open chat so nothing you missed is lost.
Mark as unread
Right-click (or long-press) a conversation in the sidebar → Mark as unread. Reopen it and a labelled “New messages” line marks where your unread messages begin. It clears as you scroll to the latest.
Remove from list
Right-click (or long-press) a DM or group → Remove from list, then confirm. This permanently deletes the conversation and all its messages for both sides (every member, for groups) and cannot be undone.
File, image & voice attachments
You can share files, images, and voice messages in any DM, group, or Space channel.
Attach a file
- Click the paperclip button in the chat composer.
- Pick one or more files from your device (images, documents, or audio).
- Each file shows a preview chip with name, size, and upload progress.
- Type an optional caption, then Enter to send.
Allowed types: JPG, PNG, GIF, WebP, PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, TXT, and audio (WebM, OGG, MP3, M4A, AAC, WAV) — max 30 MB each. Multiple files of mixed types can be sent in one message. Tip: pasting a screenshot straight into the composer attaches it directly.
Record a voice message
- Press and hold the mic button in the composer — a red bar shows a live timer.
- Release to send immediately; slide your finger/pointer up (or tap X) to cancel.
- Voice bubbles play inline: tap play/pause, click the bar to seek, and the duration shows before the audio loads.
Voice messages need a connection to upload. They can be forwarded (audio + duration carry over), saved, and deleted like any message.
View images
- Click any image thumbnail in chat to open the fullscreen lightbox — centered on screen with a dark backdrop.
- Use the left/right arrows or keyboard arrows to navigate between images.
- Click the download button (top right) to save. Press Escape or click the backdrop to close.
View documents
PDF, DOC, XLS, PPT, and TXT files show as download cards with an icon, filename, and file size. Click to open or download.
Shared media gallery
Click the grid icon in any chat header to open Shared media: every image, file, and link from that chat in one place (Media / Files / Links tabs), with a viewer and a jump-to-message button on each item.
Group chats
Groups are private rooms for a small set of people — not a Space.
Create a group
- Sidebar + → New group (or + next to Groups).
- Name it (required). Optional group photo, max 4MB.
- Pick at least two friends (you plus two others).
- Create. You are the first admin.
Manage the group
Open the group, then Group settings in the header. Admins can rename it, change the photo, add or remove members, and promote or demote admins. Anyone can leave. The last admin cannot be removed or demoted.
Spaces & channels
A Space is a community (like a Discord server). Inside it, channels are separate chat rooms.
Create a Space
- Sidebar + → new Space.
- Set a name. Optional: description, category, banner, and avatar (max 4MB).
- Create. A #general channel is made for you. You are the owner.
Categories include Technology, Design, Education, Business, Gaming, Community, Art, Music, Lifestyle, and Other.
Join a public Space
- Sidebar + → Discover Spaces.
- Search or filter by category.
- Click Join. You enter as a member and get every channel.
Private Spaces & invites
A Space can be private — hidden from Discover and joinable only by invite. Owner/admins manage the invite link in Space settings → Privacy & invites: create a link, rotate it (old links stop working), or turn invites off. Each link expires after 7 days.
Opening an invite link signs you in and joins automatically. If you're already in the app, Discover has a "Have an invite code?" field for pasting a code. Leave from Space settings; you can rejoin from Discover (public Spaces) or a fresh invite (private Spaces).
Space look
Owners and admins can give a Space its own look (Space settings → Space look, with a live mini chat preview): an accent and canvas tone, a chat wallpaper (pattern behind messages), and a bubble style. Everyone sees those while viewing the Space's channels; the rest of the app keeps their own theme. Each control can also stay on "Member's own" so it follows each member's personal choice. Reset to default returns to personal themes.
Channel types
- Text (#) — every member can post.
- Announcement (megaphone) — only the owner and admins can post.
Roles
Owner → admin → moderator → member. Admin and above can edit the Space, manage members, and create or rename channels. Only the owner can promote someone to admin or delete the Space. You cannot delete the last remaining channel. If the owner leaves, the highest remaining member is promoted.
Profile & themes
Click your avatar in the icon rail (or open Menu → Profile on mobile) to edit your profile. Appearance lives on its own full-screen page — Settings → Appearance on desktop, Menu → Appearance on mobile.
- Display name, unique username, bio (280), status (60)
- Photo (PNG, JPEG, WebP, or GIF, max 4MB) and a color frame (Default, My accent — follows your theme color — Lime, Blue, Rose, Amber, Violet, Ocean, Sunset, Aurora)
- Optional animated banner, country flag, and GitHub username (renders a contribution graph)
- A public page at /u/username you can share with anyone; verified accounts can show a badge (toggle in Settings)
Email cannot be changed here. Full profile at /app/profile also has Log out.
Themes
Open Settings → Appearance and pick a palette. Switching is live — no reload. Your base-theme choice is saved in this browser. Ten themes: six dark and four light.
- Framer — default near-black, blue accent
- Midnight — deep navy · Graphite — cool slate
- Espresso — warm brown · Pine — forest green
- Plum — moody aubergine
- Porcelain — neutral off-white · Linen — warm cream
- Mist — cool blue-gray · Sage — soft green
Theme studio (custom colors)
Below the palette in Settings → Appearance is the theme studio: recolor the active theme's accent (links, buttons, badges) and wash its canvas with a tone. Changes apply live as you click, and Save to my account syncs them to your profile — you keep your colors on every device. Contrast is preserved automatically: only surface hues change, never ink lightness. Remove my colors returns you to the theme's own palette.
Chat look (wallpaper & bubble style)
On the Appearance page → Chat look you can style the chat surface for your DMs and groups: a wallpaper behind messages (Plain, Dots, Grid, Lines, Bubbles, or an accent Wash — the pattern re-tints for dark/light themes automatically) and a bubble style (Rounded, Pill, Squared, or Outlined (mine), which turns your own messages into accent-outlined bubbles). Saved to your account like colors. Spaces can set their own look for their channels in Space settings.
Notifications & install
In-app bell
The bell shows unread count. Open it to see DMs, group and Space messages, mentions, friend requests, and accepts. Click an item to jump to that chat. Scroll for older items. Mark all read clears the badge. Escape or click outside to close.
You are not notified of your own messages. If a DM is already open in front of you, Kivo skips a notification for that DM.
Fine-tune what you get in Settings → Notification preferences: Direct Messages, Group Messages, Mentions, Friend Requests, Space Messages (off by default), and Announcements. @mentions always come through, even for a muted category.
Sound cues
Settings → Sounds gives Direct Messages, Mentions, Group Messages, Space Messages, and Friend Requests their own toggle plus a preview button. Cues play when a DM or mention needs your attention, or when the tab is in the background for group and Space messages — the master switch silences everything.
Browser notifications
The first time you open the bell, the browser may ask for notification permission. Allow it if you want alerts when the tab is closed. Kivo does not prompt on first page load.
Install Kivo
- Chrome or Edge: install icon in the address bar, or the browser menu → Install Kivo.
- Android: Add to Home Screen / Install app.
- iPhone: Share → Add to Home Screen.
Installed Kivo opens the chat app. It caches your lists for a fast start, but you still need a network connection to send and receive messages.
Keyboard shortcuts
| Action | Keys |
|---|---|
| Open global search | Ctrl+K / Cmd+K |
| Send message | Enter |
| New line | Shift + Enter |
| Insert mention | Enter or Tab |
| Move mention highlight | Arrow up / down |
| Save edit | Enter |
| Edit last message (empty composer) | ↑ |
| Cancel edit / close panel | Escape |
Not built yet
These are not in Kivo today. Do not expect them on kivo.usersynax.dev yet:
- Sharing palettes as saved theme templates
- Video attachments (voice messages are built; video is not)
- More Kivo Games — only the 1v1 Typing Race ships today; Chess, Ludo, tournaments and spectating are not built yet
- Full offline message history — only the latest 50 messages per chat are cached (text you send while offline is queued and delivered automatically when you're back)
Voice & video calls
Tap the phone (voice) or video button in any DM or group header to call. The other side gets an incoming screen with Accept / Decline; in groups the first to accept joins and everyone else sees an Ongoing call · Join pill. Mid-call you can mute, toggle video, switch mic/camera from Devices, and leave from the floating panel — voice upgrades to video without rejoining. No answer in 30 seconds leaves a missed-call chip plus a bell entry. Every call also leaves a history card in the chat (started, declined, missed, cancelled, or ended with duration) with a Call back button. Calls need mic/camera permission and are unavailable in Space channels and blocked chats.
Kivo Games
Kivo Games lives on its own full-screen surface at /games, separate from chat — open it from Games in the desktop icon rail, or Menu → Kivo Games on mobile. There you see everyone who has the arena open right now, your friends and who's online, and any invites waiting on you.
- Find someone under In the arena or Friends and tap Invite. Kivo opens (or creates) your DM with them and drops a one-line chip there.
- They open /games and tap Accept on the card under Your games — the race begins with no separate start step. A 3-2-1-GO countdown runs first, with the passage blurred behind it, and typing unlocks the moment it clears.
- Type the passage exactly. Matched letters turn blue, a wrong letter shows red until you fix it, your own progress bar follows your keystrokes instantly, and a live WPM readout plus race clock run alongside. A bar past 80% pulses amber, so you can feel the endgame.
- The first person to finish ends the race. You get a green You Win or red You Lose flash, then a result screen showing both players' place, WPM, accuracy and time — plus how close it was (a real margin like "won by 0.4s" on a photo finish) — and the outcome is shared back to the chat as a new result chip.
- The server picks the passage and times the race — nobody can choose the text or claim a WPM. The countdown is part of that: both players count down to the same instant, and your clock only starts when you can actually type.
- Chat never hosts the game: the timeline only ever shows the invite chip and the result chip, and tapping either opens /games.
- One live game per person at a time. Free accounts can keep 2 games going, Plus accounts 10.
- Chess lives in the same arena: pick Chess on the tabs and invite the same way. Tap a piece for its legal moves, tap a dot to play it. 10 minutes each with clocks the server re-checks on every move — no timers running anywhere. Checkmate wins; stalemate, bare kings, repetition and fifty moves draw; resigning hands your opponent the win.
- No rival around? Practice solo against Rookie, Dash or Blaze Bot — instant start, no invite. Practice pays XP but never touches streaks or the board.
- A finished race offers one-tap Rematch: Game 2 (or the decider) starts in the same chat, first to 2 takes the best-of-3 series.
- Every finish earns XP — ranked win +100, loss +25 (practice +30/+10) — on a level track where your first win always reaches LVL 2. Win streaks break on any ranked loss; daily play-streaks tick on UTC days with any finished race; the weekly best-WPM board resets every Monday.
- Turn the win/lose sound off (or preview it) in Settings → Sounds → Game Results.
- A pending invite expires after 30 minutes, and a race nobody is typing in is cancelled after 10 minutes.
Try it live
Open Kivo at kivo.usersynax.dev, create an account, and start a DM or a Space.
Social login (Google & GitHub)
You can sign up or log in with Google orGitHub instead of a password. The same buttons appear on the signup and login pages.
Sign up with a provider
If you already have a Kivo account with that email, the provider is auto-linked to your existing account — you keep your conversations and friends, and the email becomes verified instantly.
Log in with a provider
On /login, click Continue with Google or Continue with GitHub. If your account has two-factor authentication enabled, you'll still complete the second step after the provider confirms your identity.
OAuth-only accounts — accounts created via a provider have no password. If you try to log in with email + password on one of these, Kivo tells you to use the provider button instead.
Provider badges & the Kivo verified badge
When you sign up or link a provider, your public profile (/u/username) shows a Google Verified orGitHub Verified chip. Linking bothproviders earns you the native Kivo Verified badge automatically — no admin action needed.
Link a provider from Settings
If you signed up with a password and later want provider badges, go to Settings → Account verification and click Verify with Google or Verify with GitHub. You are already signed in, so this links the provider to your account rather than creating a new one. You can only link a provider that isn't already attached to another Kivo account.
Not built yet
These providers are wired in the backend today: Google and GitHub. Other providers (for example, X or Apple) are not available yet.