Homearrow-rightCasesarrow-rightGOLD Messenger

GOLD Messenger Case Study: Secure Messenger for Video Calls

Brief description

An isolated corporate messenger with invite-only access — the admin adds profiles manually; inside is a full feature set from chat to group video calls.

Task

Build a closed, secure messenger for communication inside a restricted environment, where access is controlled by an administrator and the feature set covers text, voice, and video communication.

About the project

We built an isolated messenger with controlled access: new participants do not register themselves — the administrator creates and issues the profile. Inside we implemented a full messenger feature set, from direct and group chats to group video calls. The project runs on the client’s private server.

Business benefits

FULL CONTROL OVER COMMUNICATION ACCESS — ONLY PEOPLE ADDED BY THE ADMIN ARE IN THE SYSTEM: EXTERNAL REGISTRATION IS IMPOSSIBLE, OUTSIDERS ARE EXCLUDED
LOWER LEAK RISK THROUGH PUBLIC MESSENGERS — TEAM CHAT, FILES, AND CALLS STAY INSIDE THE CLIENT’S CLOSED PERIMETER
UP TO 70% DEVELOPMENT BUDGET SAVINGS — YOU PAY FOR CUSTOMIZATION AND ROLLOUT; THE MESSENGER’S BASE INFRASTRUCTURE IS ALREADY MARKET-PROVEN

Features

Isolated messenger with controlled entry
Self-registration for new users is disabled
User profiles are created by the administrator
The administrator grants system access to the user
Only pre-added participants get messenger access
Ability to limit the user circle inside the closed perimeter
The project is deployed on the client’s private server
Create new user profiles via the admin panel
Assign login and credentials
Manage user activity
Disable or block a user
Edit profile data
Control the system participant list
Manage access rights inside the messenger
Remove users from the closed perimeter
Personal user page
Name, avatar, and basic information
Edit profile data
Profile photo management
Privacy settings inside the system
Private messaging between users
Real-time text messages
Continue a previously started dialogue
Message delivery status
Message read status
Typing indicator
Clear dialogue history
Pin important messages in chat
Video calls
Audio calls
Message reactions
Reply to a message
Create a discussion thread for a specific message
Voice messages
Create a poll
Share location in three formats (my position on the map, live location, map marker)
Send stickers
Hide media file content (video and images)
Upload files from chat (images, voice, etc.)
Forwarded messages
Add chat extensions
Report messages
Add a chat to favorites
Create group chats
Add participants to a group
Remove participants from a group
Assign a group moderator
Manage group name and avatar, group topic, room addresses (public and local)
Messaging between group participants
Participant list display
Message history inside the group
Pin important messages
Notification settings per group chat
Leave a group
Limit participant actions inside a group
Flexible capability settings for users with different roles
Ping a specific user by username
Send text messages
Edit sent messages
Delete messages
Reply to a specific message
Forward messages between chats
Copy message text
Pin messages
Send time display
Message author display
Send, delivery, and read statuses
Links inside messages
Emoji reactions
Search messages inside a chat
Send files in direct and group chats
Send images
Send documents
Send archives
Image preview display
Download received files
Store attachments in chat history
File availability only for participants of a specific chat
Restrict attachment access outside the closed system
Separate view of sent images
List of files shared inside a chat
Quick jump to media from chat history
Attachment structure preserved per dialogue
Browse previously sent materials without manually searching the whole thread
Start a group video call inside the messenger
Connect multiple participants to one call
Enable and disable the camera
Enable and disable the microphone during a call
Display call participants
Leave a call
Video calls operate inside the system’s closed perimeter
Use calls for work meetings and internal discussions
Notifications for new direct messages
Notifications for new group chat messages
Unread message count
Notifications when added to a group
Notifications when a video call starts
Notification settings per chat
Disable notifications for a selected dialogue
New events shown inside the messenger UI
Search users inside the closed system
Search direct chats
Search group chats
Search group participants
Quick jump to the needed dialogue
Active chats list
Separate direct and group conversations
Closed architecture without public registration
Access only for users created by the administrator
Project hosted on the client’s private server
Data stored inside the client’s infrastructure
Chat access limited to participants of a specific chat
Protect direct and group messages from public access
User control via the admin panel
Ability to promptly revoke a participant’s access
Deploy the messenger on the client’s server
Configure the server side for closed-mode use
Store user data, messages, and files on the client’s infrastructure
Stable operation of direct and group chats
Video calls configured inside a dedicated server environment
Prepare the system for further user-count scaling
Voice messages were not part of the delivered feature set
Circle-style video messages were not part of the delivered feature set
The main focus was closed access, text communication, group chats, files, and video calls

Technology stack

React 19 + TypeScript — modern typed frontend for a complex real-time UI
Matrix SDK — real-time communication on the Matrix protocol
End-to-End Encryption — protected messages and secure communication
Webpack 5 + Nx Monorepo — scalable build and large frontend codebase management
Jest + Playwright — automated UI, logic, and user-flow testing
Swift — primary development language
SwiftUI — modern declarative UI (used on new screens alongside UIKit)
UIKit — base UI framework
MVVM Architecture — app architecture
Combine — reactive data handling
Swift Package Manager (SPM) — dependency management
End-to-End Encryption — message encryption (Olm/Megolm)
VoIP & Push Notifications — voice calls and push notifications
Kotlin — modern Android development language
Jetpack Compose — declarative UI framework
MVVM — separation of logic, data, and UI
Kotlin Coroutines — async work without blocking the UI
Kotlin Flow — reactive data and state streams
Appyx Navigation — modern screen navigation
Gradle Kotlin DSL — build and dependency tooling
End-to-End Encryption — encryption for messages and calls
Synapse (Python 3 + Twisted) — Matrix homeserver, messenger core: messages, rooms, users, federation, and E2E encryption
Matrix — open decentralized messaging protocol
coturn — TURN/STUN server for audio and video calls (NAT traversal for WebRTC), with TLS and shared-secret auth
Ketesa (React + TypeScript) — homeserver admin web panel: users, rooms, media
PostgreSQL 16 — primary Synapse database (messages, room state, accounts)
Docker / Docker Compose — containerization and orchestration of all services
Nginx — reverse proxy: TLS termination, proxying client and federation traffic to Synapse and the admin panel
Let's Encrypt — TLS certificates (used by nginx and coturn)

Working with the client

*Important: this is not project delivery work — it is work with the client specifically, and it is not in the estimate or commercial proposal; it is what we do to raise the product’s chance of successWe make the client stronger — and here is what that looks likeIn this project we deliberately went far beyond the statement of work because the client’s business security essentially depended on the solution we built. Our goal was for the client to stop depending on contractors for key questions. We immersed them in product logic, unpacked the business ideology, and helped formulate meanings that resonate with the audience. Then — an honest review of all pitfalls, from legal nuances to user behavioral traps. A separate track covered working marketing steps that are relevant right now, without fluff or generic advice. The result: not just a finished product, but an owner who knows exactly what they are doing, and a team that understands how to get the most from the platform.Our goal is not just development — it is our client’s success.