ardalis/ddd-guestbook
63.9
Adequate · 20 September 2026
1.1k
lines of production code
C#
primary language
4
measurements over time
What this system is
This system is a multi-project ASP.NET Core application built on Clean Architecture principles, serving as a guestbook and to-do list management tool. It exposes functionality through both a web interface using MVC and Razor Pages, and a RESTful API for programmatic access. The backend manages domain entities for guestbook entries and to-do items, persisting data via Entity Framework Core with SQLite and handling state changes through domain events that trigger email notifications.
Features
Added email notification service for guestbook entries
A new implementation of the IMessageSender interface has been introduced in the infrastructure layer to handle guestbook notifications. When a new entry is added, the system now sends an email to the specified recipient address using a local SMTP server on port 25, with the sender address hardcoded as [e-mail redacted] and a fixed subject line.
src/CleanArchitecture.Infrastructure/Services · high confidence
Initial commit of Clean Architecture solution structure
This change introduces the foundational structure for a Clean Architecture-based ASP.NET Core application, derived from the CleanArchitecture 2.1 template. It establishes a multi-project solution containing a Core domain layer, an Infrastructure layer, a Web entry point, and separate Unit, Functional, and Integration test projects. The commit also includes essential build configuration files (Directory.Build.props/targets, Packages.props) defining .NET Core 3.0 dependencies like Entity Framework Core and xUnit, along with CI/CD setup via Azure Pipelines and standard repository metadata.
(repo-wide) · high confidence
Initial database schema for Guestbook and To-Do features
The application now includes the initial Entity Framework Core migration to establish the database schema. This adds support for the Guestbook and To-Do features by creating the \Guestbooks\, \GuestbookEntries\, and \ToDoItems\ tables, including the foreign key relationship linking entries to their respective guestbooks.
src/CleanArchitecture.Infrastructure/Data/Migrations · high confidence
Initial infrastructure setup for dependency injection and database configuration
The application now includes the core infrastructure components required to initialize the service container and database context. ContainerSetup introduces Autofac for dependency injection, automatically registering types from the Core and Infrastructure assemblies. StartupSetup configures the application to use SQLite as the database provider via Entity Framework Core. Additionally, ToDoConfiguration defines the entity mapping for ToDoItem, ensuring the Title property is marked as required.
src/CleanArchitecture.Infrastructure, src/CleanArchitecture.Infrastructure/Data/Config · high confidence
Initial web application scaffolding with MVC, Razor Pages, and API controllers
The CleanArchitecture.Web project has been initialized with a full web stack, introducing both traditional MVC controllers and modern Razor Pages for the user interface. Users can now interact with the application via a Guestbook home page, a To-Do list view, and a dedicated To-Do Razor Page. The application also exposes a RESTful API for programmatic access, featuring controllers for managing To-Do items and Guestbook entries, along with a meta endpoint for version information. This release includes the necessary infrastructure for data persistence, such as database seeding logic and configuration, as well as frontend assets like Bootstrap and jQuery.
src/CleanArchitecture.Web · high confidence
Introduction of Guestbook and ToDoItem domain entities with domain events
The core domain model now includes Guestbook and ToDoItem entities alongside their respective entry types. The Guestbook entity encapsulates a collection of GuestbookEntry objects and raises an EntryAddedEvent when a new entry is added. Similarly, the ToDoItem entity raises a ToDoItemCompletedEvent when its MarkComplete method is invoked, ensuring that state changes are communicated via domain events.
CleanArchitecture.Core · high confidence
Introduction of domain-driven design primitives and event-driven notification logic
The core library now supports a domain-driven architecture by introducing foundational shared kernel classes (BaseEntity, BaseDomainEvent, ValueObject) and a Specification pattern for query composition. This enables the implementation of domain events, such as EntryAddedEvent and ToDoItemCompletedEvent, which are dispatched via a new IDomainEventDispatcher. Specifically, the system now includes a GuestbookNotificationHandler that listens for new guestbook entries and automatically sends email notifications to users who have posted within the last day, utilizing the new IMessageSender interface and Specification-based filtering.
src/CleanArchitecture.Core · high confidence
Behavioural changes
Domain events are dispatched after successful database saves
The application now ensures that domain events are only dispatched after a database transaction has successfully committed. The \AppDbContext\ overrides \SaveChanges\ to collect pending events and pass them to the \IDomainEventDispatcher\ only if the save operation succeeds, preventing event handlers from reacting to partial or failed writes.
src/CleanArchitecture.Infrastructure/Data · high confidence
Test coverage
Added functional and integration tests for API endpoints and data repository; Added unit tests for domain entities, specifications, and test infrastructure.
Dependencies
Migrate project structure to .NET Core 3.0 and Central Package Versions
The solution's project files have been updated to target .NET Core 3.0 (netcoreapp3.0) and .NET Standard 2.1, replacing the previous ASP.NET Core shared framework reference. All projects now utilize the Microsoft.Build.CentralPackageVersions SDK (v2.0.46) to manage dependency versions centrally. This change introduces specific dependencies including Autofac for dependency injection, Entity Framework Core with SQL Server and SQLite providers, and Swashbuckle for API documentation, while establishing a clean architecture structure with Core, Infrastructure, Web, and test projects.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 66 → 64 (-2.6)
- Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 65 → 68 (+3.1)
- Architecture 80 → 80 (+0.0)
- Maturity 70 → 60 (-9.9)
- Readiness 70 → 70 (-0.4)
- Security 74 → 69 (-5.5)
- Accessibility 64 → 64 (+0.0)
Resolved (9)
- Build did not complete in the analyzer
- Coverage not measured — test suite did not build
- Medium CVE: Microsoft.Data.SqlClient 1.0.19249.1
- Medium: security finding (details withheld)
- No exposed public API
- Test reliability not measured — test suite did not build
- TodoComment (src/CleanArchitecture.Web/SeedData.cs)
- dormant codebase — no living knowledge left to concentrate
- redundant comment (src/CleanArchitecture.Core/Handlers/ItemCompletedEmailNotificationHandler.cs)
New (7)
- Documentation: no installation or build instructions (README.md)
- End-of-life runtime: .NET netcoreapp3.0
- No dependency advisory monitoring
- NoWarnInCsproj — 6 warning codes suppressed in one element (Directory.Build.props)
- Outdated: SQLite
- Prerelease dependency: Swashbuckle.AspNetCore
- redundant comment (src/CleanArchitecture.Core/SharedKernel/ValueObject.cs)
API surface
- Unchanged — 6 HTTP endpoints
Architecture
- Unchanged — 2 containers · 1 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ardalis/ddd-guestbook was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit c52c353fcef932707873841262563128adce9077 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.