Featured work · Open source
The MMCA platform
A production-grade .NET 10 platform that demonstrates modern enterprise architecture end to end: an open-source framework of fifteen NuGet packages plus real applications that prove the patterns under live traffic. The design goal is one sentence: build the monolith now, extract a service later, without a rewrite.
The framework
MMCA.Common
A NuGet package framework for building modular-monolith applications with DDD, Clean Architecture, and CQRS, and the extension points to extract a module into its own microservice later. Fifteen packages release in lockstep and span every layer.
- MMCA.Common.Shared
- MMCA.Common.Domain
- MMCA.Common.Application
- MMCA.Common.Infrastructure
- MMCA.Common.API
- MMCA.Common.Grpc
- MMCA.Common.UI
- MMCA.Common.Aspire
- MMCA.Common.Aspire.Hosting
- MMCA.Common.Testing
- MMCA.Common.Testing.Architecture
- MMCA.Common.Testing.E2E
- MMCA.Common.Testing.UI
Strict layered core
Shared → Domain → Application → Infrastructure → API/Grpc. The Result pattern carries expected failures, entities are rich aggregates with factory methods, and queries compose from specifications instead of LINQ spaghetti.
CQRS decorator pipeline
Thin command and query handlers wrapped by a Scrutor decorator chain: FeatureGate → Logging → Caching → Validating → Transactional → Handler. The order is load-bearing and registered once.
Extraction boundaries
Application code talks to abstractions; transport lives at the edge. A transport-agnostic message bus, gRPC contracts, JWKS cross-service auth, and Aspire hosting let a module become a service with no domain rewrite.
Proof, not slideware
Three reference applications
The framework is consumed by real apps. Each one exercises the patterns differently, and the conference app ran a live event on Azure.
MMCA.ADC
A production-deployed conference platform: four microservices (Identity, Conference, Engagement, Notification) behind a YARP gateway, cross-service JWKS auth, bidirectional gRPC, polyglot persistence, and load testing at conference-day scale. It powered the Atlanta Cloud + AI Conference.
MMCA.Store
An e-commerce app refactored from a monolith into three microservices (Catalog, Sales, Identity) with Stripe payments, output caching, role-based access control, and an accessible Blazor and .NET MAUI UI.
MMCA.Helpdesk
The deliberately minimal seed: a single Tickets module exercised through all five layers. It is the worked companion to the framework's getting-started guide and the easiest entry point for exploring the patterns.
A look inside
From one graph, laptop to cloud
Orchestrated locally with .NET Aspire, then deployed to Azure Container Apps from the same declarative model.


How it holds together
Architecture principles
The same invariants are enforced across every repo, twice: a compile-time MSBuild layer guard and a shared NetArchTest rule library run as fitness functions.
Database-per-service, with an outbox
Each module or service owns its own database and outbox. Domain events are persisted atomically with the data, then delivered at least once, in-process for the monolith or over a broker once extracted. The outbox is the cross-source consistency mechanism.
Cross-service auth without shared secrets
Extracted services validate the issuer's RS256 tokens via JWKS / OIDC discovery, routed through the gateway with a direct fallback. No symmetric secret crosses a service boundary.
Soft-delete plus a right to erasure
Entities are soft-deleted for lifecycle and never hard-deleted; an anonymization pathway plus outbox purge satisfies GDPR/CCPA erasure. Audit fields are stamped automatically on every save.
Polyglot persistence behind one model
SQL Server, Cosmos DB, and SQLite sit behind a single entity model; the engine is an attribute on the configuration, orthogonal to the database-name axis. Plumbing shipped and tested.
Graded honestly
A two-axis architecture scorecard
Every repo is scored against a 34-category rubric on two axes, Maturity (how complete the decision is) and Implementation (how well it is realized in code), with evidence and recorded gaps rather than a single vanity number.
MMCA.Common (framework)
Maturity 96.3% · Implementation 84.6%
Across all 34 categories; i18n is scored since multi-locale support shipped.
MMCA.ADC (conference app)
Maturity 97.8% · Implementation 86.3%
Scored the same way, then remediated and re-scored as the apps evolved.
Why, not just what
Architecture Decision Records
Forty-nine ADRs capture the context and trade-offs behind each cross-cutting pattern, so the design is teachable, not tribal knowledge. Every entry below links to the full record.
Read the source of truth
The reference library
The full architecture documentation, maintained in this site's repository as its canonical home and rendered as browsable pages: every Architecture Decision Record, the governance scorecards, the guides and specifications, and the complete onboarding guide that walks the codebase type by type.
Architecture Decision Records
The context, decision, rationale, and trade-offs behind every cross-cutting pattern, from manual DTO mapping and the outbox to JWKS auth, caching, and supply-chain provenance. Numbered, dated, and cross-linked.
Onboarding guide
A teaching guide for an engineer new to the codebase: a primer, a mechanically extracted type inventory, 27 group chapters walking every first-party type, five DevOps chapters, concept maps, and a coverage audit.
Architecture governance
The 34-category evaluation rubric, plus an evidence-based scorecard and remediation backlog for each repo. Every score cites the code that earns it.
Guides & specifications
The narrative layer: the getting-started guide for adopting the framework, business specifications and workflow analyses for both applications, and per-concern reference notes.