Real-time messenger with video calls on Azure
- Calls
- WebRTC
- Delivery guarantee
- Outbox
- Cloud
- Azure
Task
Build a full messenger: private and group chats, attachments, presence, audio/video calls, and moderation — deployed in the cloud.
Solution
.NET 10 with Clean Architecture and CQRS, SignalR for messages and call signaling, WebRTC for calls, an outbox for reliable delivery; Angular 21 client; Azure infrastructure.
Architecture
The backend is split into Domain, Application, Infrastructure, and WebAPI layers; every operation is a MediatR command or query. Messages go through REST with an idempotency key and are delivered to recipients via SignalR — so a reconnect never loses or duplicates a message. Domain events are written to an outbox table and published by a background dispatcher.
Presence and group call rooms live in Redis. 1:1 and group calls use WebRTC: the hub only relays signaling, media goes peer-to-peer. In production the hub runs on Azure SignalR Service, so the App Service itself holds no long-lived connections.
Authentication is Microsoft Entra External ID (OIDC, JWT) with a role-based admin panel: a superadmin can ban accounts and moderate content. Avatars and attachments are stored in Azure Blob Storage, secrets in Key Vault, telemetry goes to Application Insights through OpenTelemetry.
