Screamer
A social network built the way a team would build it: a .NET 7 API in clean architecture, an Angular 16 client and real-time chat over SignalR.
- For
- A personal product, built end to end over about 530 commits.
- My role
- Sole developer, back end and front end.
- When
- May to Aug 2023
- Built with
- .NET 7, ASP.NET Core, SignalR, SQL Server, Angular 16, Tailwind CSS, Docker, Cloudinary

The brief
Most portfolio social apps stop at posts and likes. I wanted the whole thing, stories, follows, bookmarks, trending, search, chat and notifications, on a back end with clear layers and tests, so it could keep growing.
An API in clean layers
The back end is split into Domain, Application, Infrastructure, Persistence, Identity and Web API projects. Each feature lives in the Application layer as a CQRS command or query with its own validator.
Posts, comments, replies, reactions, bookmarks, follows, stories, chat rooms and messages, notifications, avatars and cover photos all follow the same shape. Unit tests and integration tests sit in their own projects, and the whole thing runs in Docker.
- .NET 7 and ASP.NET Core Web API
- ASP.NET Identity for accounts
- SQL Server
- Cloudinary for uploaded images
- Unit and integration test projects

Chat and presence in real time
The Angular 16 client talks to SignalR for chat, online presence and notifications, so a new message, a follow or a reaction shows up without a refresh.
The feed loads as you scroll, posts are written in a rich text editor, photos can be edited before upload, and stories sit at the top of the feed the way people expect.
- Angular 16 with Tailwind CSS
- SignalR for chat, presence and notifications
- Infinite scroll, rich text posts and an image editor
- Trending, search, bookmarks and stories
What I'd keep
Clean architecture pays off once the feature list gets long. With every feature as its own command or query and validator, adding the twelfth one was as easy as adding the first.