Real-time • Secure • Fast
A full-stack chat application built with .NET 10, SignalR, and .NET MAUI — deployed to a live VPS with HTTPS.
| Service | URL |
|---|---|
| 🌐 API (Production) | https://chat-api.logicdynamics.net |
| 📡 SignalR Hub | https://chat-api.logicdynamics.net/hubs/chat |
| 📄 API Schema | https://chat-api.logicdynamics.net/openapi/v1.json |
- ⚡ Real-time messaging via SignalR WebSockets
- 💬 Chat bubbles — sent (right, blue) vs received (left, dark)
- 🏠 Room-based chat — join any named room
- 💾 Message persistence — EF Core + SQLite
- 🔒 HTTPS — SSL via Let's Encrypt
- 🌍 Cross-platform — Windows, Android, iOS, macOS
- 🎨 Logic Dynamics branded UI — deep navy, cyber cyan, signal red
- 👥 Multi-user — unlimited users per room
- 🔄 Auto-reconnect — SignalR handles dropped connections
┌─────────────────────────────────────────────────────┐
│ .NET MAUI Client │
│ ChatPage ──► ChatViewModel ──► ChatService │
│ │ │
│ SignalR Client SDK │ │
└──────────────────────────────────────┼───────────────┘
│ WebSocket (WSS)
┌──────▼──────────────┐
│ ASP.NET Core │
│ Web API (.NET 10) │
│ │
│ /hubs/chat │
│ ▼ │
│ ChatHub │
│ ▼ │
│ /api/messages │
│ ▼ │
│ EF Core │
│ ▼ │
│ SQLite DB │
└──────────────────────┘
│
┌──────▼──────────────┐
│ Ubuntu 24 VPS │
│ Nginx (reverse │
│ proxy + SSL) │
│ systemd service │
└──────────────────────┘
ChatApp.sln
├── ChatApp.API/ → ASP.NET Core Web API (.NET 10)
│ ├── Data/
│ │ └── ChatDbContext.cs
│ ├── Hubs/
│ │ └── ChatHub.cs
│ ├── Repositories/
│ │ ├── IMessageRepository.cs
│ │ └── MessageRepository.cs
│ ├── Endpoints/
│ │ └── MessageEndpoints.cs
│ └── Program.cs
│
├── ChatApp.MAUI/ → .NET MAUI Cross-Platform Client
│ ├── Services/
│ │ └── ChatService.cs
│ ├── ViewModels/
│ │ └── ChatViewModel.cs
│ ├── Views/
│ │ └── ChatPage.xaml
│ └── Resources/
│ └── Images/
│ └── ld_logo.png
│
└── ChatApp.Shared/ → Shared Models & DTOs
├── Models/
│ └── ChatMessage.cs
└── DTOs/
└── MessageDtos.cs
| Layer | Technology |
|---|---|
| Runtime | .NET 10 |
| Backend | ASP.NET Core Web API |
| Real-time | SignalR (WebSockets) |
| Database | SQLite + Entity Framework Core |
| Client | .NET MAUI |
| Pattern | MVVM + Repository |
| Server | Ubuntu 24 VPS (Hostinger) |
| Proxy | Nginx |
| SSL | Let's Encrypt (Certbot) |
| Process | systemd |
- .NET 10 SDK
- Visual Studio 2022+ or VS Code
- .NET MAUI workload installed
dotnet workload install mauigit clone https://github.com/YOUR_USERNAME/chatapp-logicdynamics.git
cd chatapp-logicdynamicsdotnet add ChatApp.API reference ChatApp.Shared
dotnet add ChatApp.MAUI reference ChatApp.Sharedcd ChatApp.API
dotnet run
# API running at http://localhost:5246Open a new terminal:
cd ChatApp.MAUI
dotnet run -f net10.0-windows10.0.19041.0- Enter your name
- Enter a Room ID (e.g.
general) - Click ⚡ JOIN ROOM
- Open a second instance with a different name — real-time chat! 🔥
cd ChatApp.API
dotnet publish -c Release -o ./publishscp -r ./publish/* root@YOUR_VPS_IP:/var/www/chatapp-api/Create /etc/systemd/system/chatapp-api.service:
[Unit]
Description=Logic Dynamics Chat API
After=network.target
[Service]
WorkingDirectory=/var/www/chatapp-api
ExecStart=/root/.dotnet/dotnet ChatApp.API.dll --urls "http://0.0.0.0:5246"
Restart=always
RestartSec=10
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_ROOT=/root/.dotnet
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable chatapp-api
systemctl start chatapp-apiserver {
listen 80;
server_name chat-api.yourdomain.com;
location / {
proxy_pass http://localhost:5246;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}certbot --nginx -d chat-api.yourdomain.com| Method | Parameters | Description |
|---|---|---|
JoinRoom |
roomId, userName |
Join a chat room |
SendMessage |
roomId, senderName, content |
Send a message |
LeaveRoom |
roomId |
Leave a chat room |
Client listener:
connection.On<ChatMessage>("ReceiveMessage", msg => {
// Handle incoming message
});| Method | Endpoint | Description |
|---|---|---|
GET |
/api/messages/{roomId} |
Get room message history |
| Token | Color | Usage |
|---|---|---|
| Deep Navy | #0A0F1E |
Background |
| LD Blue | #0057FF |
Primary / Sent bubbles |
| Cyber Cyan | #00D4FF |
Accents / Headers |
| Signal Red | #FF003C |
Logo / Alerts |
| Dark Card | #0D1B3E |
Received bubbles |
Building this project covers:
- SignalR — WebSocket hub, groups, connection lifecycle
- Entity Framework Core — SQLite, migrations, repository pattern
- Minimal APIs — endpoint mapping, OpenAPI
- MAUI MVVM — data binding, ObservableCollection, ICommand
- Linux DevOps — systemd, Nginx, SSL, VPS deployment
- Clean Architecture — Shared contracts, separation of concerns
Check out more Logic Dynamics projects at logicdynamics.net
MIT License — see LICENSE for details.
Built with 🔥 by Logic Dynamics
Code. Build. Innovate.