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).