Chat Room With Multiple Frontends
This project started as an exploration of SignalR for real-time communication, but grew into something more interesting when I decided to build multiple front-end clients against the same backend, including a Blazor Server app, a React TypeScript SPA, and a WinForms desktop client. Each takes a different approach to connecting to the chat hub and managing authentication state, which made for a useful comparison. Rather than using JWTs, I implemented server-side session management using ASP.NET Core's ITicketStore interface, storing sessions in the database alongside the user's IP and user agent. Sessions are managed with HTTP-only cookies, with no sensitive data in the browser, and can be revoked server-side if needed. The Blazor client follows a Backend-for-Frontend pattern, where the server acts as an intermediary for API calls so that session credentials are never exposed to the browser directly. Authentication supports both email/password and Google OAuth, with duplicate email detection to prevent conflicts between providers. I also used this project as an opportunity to explore infrastructure as code with Terraform, provisioning the cloud infrastructure needed to host the application. This was my first time approaching deployment from an IaC perspective and gave me a better understanding of how cloud architecture decisions interact with application design.
Objectives
- 00Implement real-time messaging using SignalR
- 01Build multiple front-end clients against a shared backend, including Blazor Server and React
- 02Implement server-side session management
- 03Apply the Backend-for-Frontend pattern in the Blazor client
- 04Add authentication via email/password and Google OAuth
- 05Containerise the application using Docker
- 06Provision cloud infrastructure using Terraform
- 07Set up a CI/CD pipeline using GitHub Actions
- 08Explore real development flows using Claude Code
Images








