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.