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

Closed access system
toggle

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

Administrative user management
toggle

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

User profile
toggle

Personal user page

Name, avatar, and basic information

Edit profile data

Profile photo management

Privacy settings inside the system

Direct chats
toggle

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

Group chats
toggle

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

Message handling
toggle

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

Files and attachments
toggle

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

Chat media and gallery
toggle

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

Group video calls
toggle

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
toggle

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 and navigation
toggle

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

Security and privacy
toggle

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

Server infrastructure
toggle

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

Project feature limits
toggle

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

1. Frontend:
toggle

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

2. Frontend iOS:
toggle

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

3. Frontend Android:
toggle

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

4. Backend:
toggle

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

5. Databases:
toggle

PostgreSQL 16 — primary Synapse database (messages, room state, accounts)

6. Infrastructure and deployment:
toggle

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.