Projects
I maintain a collection of hands‑on projects exploring modern .NET, cloud, and DevOps practices. These range from production‑style REST APIs and security proofs‑of‑concept, through to infrastructure‑as‑code for Kubernetes and Azure, and small UI experiments. Each project is designed to deepen my understanding of real‑world architectures while staying close to the tools and patterns I use day‑to‑day.
GitHub: john-morsley
This ASP.NET Core C# API is for sending and receiving emails.
MailKit NuGet library for .NET
I'm trying to do all this within the Azure ecosystem, so...
Emails are saved to an Azure Cosmos DB.
Built, tested and deployed by an Azure DevOps CI/CD YAML pipelines.
System tests utilise Test Containers and Docker.
GitHub: john-morsley/email
Mobile
This ASP.NET Core C# API is for sending and receiving SMS messages.
Twilio NuGet library for .NET
I'm trying to do all this within the Azure ecosystem, so...
Messages are saved to an Azure Cosmos DB.
Built, tested and deployed by an Azure DevOps CI/CD YAML pipelines.
System tests utilise Test Containers and Docker.
GitHub: john-morsley/mobile
Security
Both the email and mobile projects will require an identity and access management system.
As I'm are trying to do all this within the Azure ecosystem, I've chosen Azure Entra ID.
This project is a PoC to better understand OAuth 2.0 and JWT bearer tokens for an ASP.NET API.
In system tests, Test Containers are used to run Key Cloak within a Docker container.
Cosmos
Both the email and mobile projects will require an online storage solution.
As I'm trying to do all this within the Azure ecosystem, I've chosen Azure Cosmos DB.
This project is a PoC to better understand basic CRUD operation with a Cosmos DB database and using Azure Cosmos DB SDK.
Tested locally with the Azure Cosmos DB Emulator software.
In system tests, Test Containers are used to run the Azure Cosmos DB Emulator within a Docker container.
GitHub: john-morsley/azure-cosmosdb-csharp-aspnet
GitHub: john-morsley/azure-cosmos-csharp-aspnet-api-health-with-test-containers
Secrets
Both the email and mobile projects will require a secrets management system.
As I'm are trying to do all this within the Azure ecosystem, I've chosen Azure Key Vault.
This project is a PoC to better understand secrets management within an ASP.NET API.
Pipelines
The process of constant integration and constant deployment happening automatically is essential.
Both the email and mobile projects will require a CI/CD that builds, tests and deploys code.
As I'm trying to do all of this within the Azure ecosystem, I've chosen Azure DevOps.
The code is stored within GitHub, pulled by the CI pipeline, built, tested and published.
The published results are then deployed to an Azure App Service.
It's important that this process can be stored in source control, therefore YAML pipelines are ideal.
Versioning
I'd like both the email and mobile APIs to be versioned.
Standard versioning strategy for a ReSTful API is within the URL path. i.e. GET: domain/v1/endpoint
Microsoft have a NuGet package for this: Microsoft.AspNetCore.Mvc.Versioning.
This project is a PoC to better understand ReSTful API versioning.
Resilience
As we all know, you can never trust the network.
Networks can be unreliable, unpredictable, limited and insecure.
Polly is a resilience and transient fault handling NuGet library for .NET.
Both the email and mobile projects will require resilience and transient fault handling.
This project is a PoC to better understand the features of Polly, most notably: retries, circuit breakers, timeouts, bulkhead isolation and fallbacks.
The end goal will be to have the Azure email and mobile services called from a service hosted within Fasthosts so that we can take advantage of the domain and the features of Polly.
i.e. Endpoints: morsley.uk/v1/email & morsley.uk/v1/mobile