Dependencies point inward. Presentation calls application code. Application coordinates the domain. Infrastructure implements what application code defines. The domain project references nothing in the outer layers.

  src/
├── Host/
│   ├── AppHost/                 Aspire orchestration and shared config
│   ├── ServiceDefaults/         Health checks, telemetry, service defaults
│   └── Mursil.DevIssuer/        Local OpenID Connect stand-in
├── Mursil/
│   ├── Contracts/               DTOs and the tenancy switch
│   ├── Domain/                  Aggregates, ids, smart enums
│   ├── Application/             Handlers, validators, delivery ports
│   ├── Client/                  Transactional send client
│   ├── Integration/             Host package: send, template push, status
│   ├── Infrastructure/          EF Core, dispatch, SMTP transport
│   ├── Modules/
│   │   ├── Templates/           Template handlers and HTTP endpoints
│   │   └── Providers/           Provider and sender-domain handlers and endpoints
│   └── Presentation/
│       ├── Mursil.AspNetCore/   Request context and shared policies
│       ├── Mursil.Server/       Minimal API host
│       ├── Mursil.Admin/        Blazor admin portal
│       └── Mursil.Migrator/     Migrations and first-party seed
└── Tests/Mursil/                Domain, application, and integration tests
  

Packaged projects

These projects set IsPackable and publish a package id:

ProjectPackage id
Mursil.DomainMursil.Domain
Mursil.ApplicationMursil.Application
Mursil.InfrastructureMursil.Infrastructure
Mursil.ContractsMursil.Contracts
Mursil.AspNetCoreMursil.AspNetCore
Mursil.IntegrationMursil.Integration
Mursil.Modules.TemplatesMursil.Modules.Templates
Mursil.Modules.Templates.PresentationMursil.Modules.Templates.Presentation
Mursil.Modules.ProvidersMursil.Modules.Providers
Mursil.Modules.Providers.PresentationMursil.Modules.Providers.Presentation

Mursil.Admin is not one of them. The portal stays in that project. Do not extract it into a UI package. Mursil.Server and Mursil.Migrator are hosts. Mursil.Client is an in-repo send client and is not packed.

Mursil.Integration is the package a separate host uses to send, push a draft template, and read status. Core send and the portal work without a host referencing it.

Where a change goes

You are addingPut it in
A use caseApplication/Features/<Feature>/<Verb><Noun>/, or the Templates or Providers module when that module already owns the area
A business ruleThe domain aggregate that owns the invariant
A request or response shapeMursil.Contracts
An EF mappingInfrastructure/Persistence/Configurations/, then a migration from Mursil.Migrator
An HTTP routeThe endpoint registration for that area
An operator pageMursil.Admin, following the existing page layout

Server maps routes in MapMursilServerEndpoints. The group prefix is /api/v1/mursil. Template routes are registered from Mursil.Modules.Templates.Presentation. Provider and sender-domain routes are registered from Mursil.Modules.Providers.Presentation.