Last updated: August 20, 2026 (3 of 20 projects done — EventBus, EventBusRabbitMQ, eShop.ServiceDefaults, plus Shared — IntegrationEventLogEF 5/7 source files in progress; 66/66 tests passing)
This is an independently modernized version of Microsoft's dotnet/eShop reference app — a .NET Aspire microservices e-commerce platform (product catalog, basket, ordering, identity, payments, outbound webhooks) added one file at a time, each file evaluated and upgraded against actual current-latest package versions rather than copied over wholesale.
Not a fork left as-is. Every package version was individually re-researched, several real bugs were found and fixed in Microsoft's own reference source (verified against real assemblies and real builds, not assumed), and a handful of deliberate design departures — a Decorator split for EventBusRabbitMQ, React instead of Blazor for the web frontend — were made and recorded as this fork's own choices.
At a glance: 66/66 tests passing across eShop.ServiceDefaults.UnitTests + EventBus.UnitTests + EventBusRabbitMQ.UnitTests, added ahead of the tests/ migration slot so every completed project ships with full coverage rather than deferring it to the end — see the Testing Strategy diagram.
- System Architecture — the 20-project target layout, four layers, and exactly what's real today
- Event Flow — the
EventBus/EventBusRabbitMQDecorator chain, and the two real bugs found while building it - Projects Reference — every project, its real one-line role, and its status
- Testing Strategy — the patterns behind 66 passing tests, and the fix a Decorator split finally let get proven end-to-end
The wiki goes deeper per completed piece of work, each page linking back to the real source rather than repeating it.
todo.md— the evidence-backed log of everything done and everything still open, with commit hashes. This is the source of truth for progress.- GitHub Project board — a Scrum-style Backlog/Planned/In Progress/Verification & QA/Done view of the same work. Kept in sync with
todo.md. docs/architecturedesign.md— the reasoning behind this repo's architectural decisions, verified against the real source app rather than described generically.portfolio.html— this repo as a portfolio piece: real bugs found, real design decisions made, and why, for anyone scanning it rather than reading it as documentation.- CONTRIBUTING.md — development setup and contribution principles.
.NET Aspire microservices, event-driven integration through a message bus, and a transactional outbox pattern show up constantly on resumes and rarely get built end-to-end with the reasoning behind each decision written down. dotnet/eShop is Microsoft's own teaching reference for exactly this shape — a genuinely useful thing to rebuild file by file rather than fork wholesale, since it means every package version gets re-verified, every file gets read closely enough to catch what's actually wrong with it, and every design choice that diverges from upstream is a deliberate call, not an oversight.
Shared (linked-source utilities), EventBus (transport-agnostic event abstractions), EventBusRabbitMQ (the RabbitMQ implementation, split into a 3-layer Decorator chain after two real bugs turned up in the original single-class version), and eShop.ServiceDefaults (Aspire telemetry/health-check/resilience defaults) are complete, reviewed, and fully tested. IntegrationEventLogEF — the EF Core-backed transactional outbox every event-publishing service will write through — is in progress at 5 of 7 source files. The other 16 projects don't exist on disk yet. See todo.md for the full build-out plan and the honest current state.
Shared/ linked-source utilities ✅ done
EventBus/ transport-agnostic event abstractions ✅ done
EventBusRabbitMQ/ RabbitMQ implementation, 3-layer Decorator ✅ done
eShop.ServiceDefaults/ Aspire telemetry/health-check/resilience ✅ done
IntegrationEventLogEF/ EF Core transactional outbox 🚧 5 of 7 files
Identity.API/ Duende IdentityServer (OIDC) ⬜ not started
Catalog.API/ product catalog ⬜ not started
Basket.API/ Redis-backed cart (gRPC) ⬜ not started
Ordering.Domain/.Infrastructure/.API/ order placement (DDD split) ⬜ not started
OrderProcessor/ background worker ⬜ not started
PaymentProcessor/ background worker ⬜ not started
Webhooks.API/ outbound webhook notifications ⬜ not started
WebApp/ React storefront (not Blazor — see below) ⬜ not started
WebBFF/ Backend-for-Frontend, Duende.BFF (new) ⬜ not started
ClientApp/ native .NET MAUI ⬜ not started
eShop.AppHost/ Aspire orchestrator, added last ⬜ not started
Not runnable end-to-end yet — eShop.AppHost (the Aspire orchestrator every service registers with) is deliberately the last project added, since it can't meaningfully exist until the things it orchestrates do. See todo.md for the honest current state. What follows is prerequisite setup, useful today regardless of how much of the app exists.
- Clone this repository:
https://github.com/Terrence721/eshop-full - Install & start Docker Desktop
- Install the latest .NET 10 SDK
Install Visual Studio 2022 version 17.10 or newer with the ASP.NET and web development workload and the .NET Aspire SDK component (Individual components) — or run the WinGet configuration script:
install-Module -Name Microsoft.WinGet.Configuration -AllowPrerelease -AcceptLicense -Force
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
get-WinGetConfiguration -file .\.config\configuration.vs.winget | Invoke-WinGetConfiguration -AcceptConfigurationAgreementsVisual Studio Code with C# Dev Kit is recommended — see .vscode/extensions.json for the exact set this repo uses. Or run the equivalent WinGet configuration script on Windows:
install-Module -Name Microsoft.WinGet.Configuration -AllowPrerelease -AcceptLicense -Force
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
get-WinGetConfiguration -file .\.config\configuration.vsCode.winget | Invoke-WinGetConfiguration -AcceptConfigurationAgreementsOn Mac with Apple Silicon, Rosetta 2 is needed for
grpc-tools.
dotnet build eShop.Web.slnfeShop.slnx/eShop.Web.slnf only ever list projects that actually exist on disk, so this builds cleanly against the 4 done + 1 in-progress projects above without failing on anything not yet added.
For more information on contributing to this repo, read the contribution documentation and the Code of Conduct.
The sample catalog data is defined in catalog.json. Those product names, descriptions, and brand names are fictional and were generated using GPT-35-Turbo, and the corresponding product images were generated using DALL·E 3.
Built from Microsoft's dotnet/eShop reference application. For the original, upstream-maintained version — including Azure OpenAI integration and Azure Developer CLI deployment, both out of scope until this fork is runnable end-to-end — see the source repo directly.