marcelmichau/fake-survey-generator
A slightly more-than-trivial full-stack application built with DDD & CQRS concepts
npx skills add marcelmichau/fake-survey-generatorREADME
Fake Survey Generator
This is an app. That generates surveys. Fake ones. For fun. That is all.
Screenshot

What is this?
This is a .NET | C# | React | TypeScript full-stack application of moderate complexity (not just a to-do app), used as a playground for experimentation. Simply put: This is where I mess around with code. It is heavily inspired by the .NET Microservices: Architecture for Containerized .NET Applications book, as well as its companion reference application eShopOnAzure. It also incorporates various elements from different repos & blog posts which served as inspiration.
It is built using Vertical Slice Architecture principles with CQRS (Command Query Responsibility Segregation) and DDD (Domain-Driven Design) thrown into the mix. It doesn't follow these principles to the letter, but provides a decent example of how to apply the basics of these principles.
It is heavily centered around the Microsoft .NET + Azure technology stacks as these are what I have the most experience in & just like building things with. 😀
Here are some of the features incorporated into this project:
Application Features
- Observable, production ready, distributed application support using Aspire
- Unit & Integration tests for a CQRS/DDD project with TUnit
- Target production database for integration tests using Testcontainers for .NET
- E2E acceptance tests using Aspire Test Projects & Playwright for .NET
- Implementing health checks for various components using AspNetCore.Diagnostics.HealthChecks
- Adding OpenAPI to an ASP.NET Core Web API with Scalar for API documentation
- Adding OpenID Connect for Authentication
- Adding OpenID Connect to Scalar
- Securing an ASP.NET Core Web API using JWT Bearer authentication
- Adding security headers to API responses using NetEscapades.AspNetCore.SecurityHeaders
- Using Hosted Services in ASP.NET Core Web API
- Using a distributed Redis cache
- Using Microsoft.Extensions.Http.Resilience for resilient HTTP requests
- Implementing Forwarded Headers for hosting ASP.NET Core Web API behind a load balancer
- Validation of commands using FluentValidation
- Configuring Azure Monitor OpenTelemetry for telemetry
- Using Dapr with Dapr SDK for .NET for platform agnostic integration with infrastructure components
Infrastructure Features
- Automatic semantic versioning using Nerdbank.GitVersioning
- Creating trusted SSL certificates for HTTPS in development
- Deploying Entity Framework Core Code-First Migrations to Azure SQL Database using Azure Pipelines
- Using Microsoft Entra ID authentication to Azure SQL Database with Entity Framework Core
- Running a distributed application locally using Aspire
- Using Azure Pipelines with [Azure Developer CLI](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/overvi
...