Skip to content

Solution structure

After dotnet new connectsoft-marketing-site --ProjectName {Name}, the solution uses {Name} as the prefix instead of MarketingSiteTemplate (source names in the template repo).

Top level

Path Purpose
{Name}.slnx Solution entry
src/{Name}/ Blazor Server marketing site
tests/ Unit, integration, and E2E test projects
docs/ In-repo technical docs (shipped in template package)
content/growth/ Growth-team planning artifacts (YAML/Markdown)
infra/ Optional Bicep/deployment assets (when --include-infra true)
Directory.Build.props, Directory.Packages.props Shared MSBuild + CPM

Application project (src/{Name}/)

Folder Role
Components/ Blazor UI: Pages/, Sections/, Layout/, Shared/, Routes.razor, App.razor
Controllers/ REST APIs: contact, newsletter, SEO (sitemap.xml, robots.txt, feed.xml)
Services/ Page content, navigation, search, experiments, consent, analytics stubs
Models/ Content DTOs, SEO structured data, forms, experiments
Options/ Strongly typed configuration + FluentValidation validators
Middleware/ Security headers, rate limiting, CORS, ProblemDetails
Telemetry/ OpenTelemetry, Application Insights, custom metrics
Logging/ Serilog bootstrap
ApplicationModel/ Health checks, hosted services
Resources/ SharedResources.resx + SharedResources.he.resx
wwwroot/ JSON page data, CSS/JS, images, experiments

Tests

Project Framework Role
{Name}.UnitTests MSTest + bUnit + FluentAssertions Components, services, options, SEO models
{Name}.IntegrationTests MSTest + WebApplicationFactory<Program> HTTP responses, APIs, security headers, static assets
{Name}.E2ETests MSTest + Playwright Browser flows (requires running app at http://localhost:5000)

Detail: testing.md in the template repo.

Optional exclusions

Page packs, analytics guidance, cookie legal page, and infra/ are omitted when corresponding symbols are false or when a lighter PagePack is selected (see Parameters).