Skip to content

Commit 3263665

Browse files
iammukeshmclaude
andcommitted
feat(docs): GEO/SEO optimization — structured data, AI crawlers, llms.txt
Schema fixes: - Move SoftwareApplication + FAQPage schema from base layout to homepage only - Add TechArticle + BreadcrumbList JSON-LD to every doc page (Docs.astro) - Add WebSite + SearchAction schema to homepage - Add Person schema for author (Mukesh Murugan) with knowsAbout + sameAs - Expand Organization sameAs to 7 platforms (LinkedIn, YouTube, NuGet, etc.) - Add speakable property to TechArticle for AI assistant extraction - Add foundingDate, enhanced founder, ImageObject logo to Organization AI discoverability: - Add robots.txt with explicit AI crawler allowances (GPTBot, ClaudeBot, PerplexityBot, etc.) - Rewrite llms.txt with comprehensive doc structure and key facts - Add llms-full.txt with expanded technical reference for AI consumption Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c46de0a commit 3263665

6 files changed

Lines changed: 397 additions & 113 deletions

File tree

docs/public/llms-full.txt

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# fullstackhero .NET Starter Kit — Complete Reference
2+
3+
> Production-ready, open-source .NET 10 modular monolith starter kit for building multi-tenant SaaS and enterprise applications. MIT licensed. 6,400+ GitHub stars.
4+
5+
## What is fullstackhero?
6+
7+
fullstackhero is a production-ready .NET 10 framework that gives development teams a complete foundation for building enterprise SaaS applications. Instead of spending weeks wiring up authentication, multitenancy, CQRS, caching, background jobs, and observability, teams clone the starter kit and start building business features immediately.
8+
9+
The architecture is a Modular Monolith with Vertical Slice Architecture (VSA). Each module is an independent bounded context (Identity, Multitenancy, Auditing) that communicates through Contracts projects only. Features are organized as vertical slices — each feature folder contains its endpoint, handler, validator, and response DTO.
10+
11+
## Architecture
12+
13+
- **Modular Monolith**: Independent modules with enforced boundaries (NetArchTest)
14+
- **Vertical Slice Architecture**: Features organized by business capability, not technical layer
15+
- **CQRS**: Commands and queries separated using source-generated Mediator (not MediatR)
16+
- **Domain-Driven Design**: BaseEntity, AggregateRoot, DomainEvent, value objects
17+
- **Outbox/Inbox Pattern**: Reliable integration events with at-least-once delivery
18+
- **Specification Pattern**: Composable, reusable EF Core query objects
19+
20+
## Tech Stack
21+
22+
| Concern | Technology |
23+
|---------|-----------|
24+
| Framework | .NET 10 / C# latest |
25+
| CQRS/Mediator | Mediator 3.x (source generator) |
26+
| Validation | FluentValidation 12.x |
27+
| ORM | Entity Framework Core 10.x |
28+
| Database | PostgreSQL (Npgsql) |
29+
| Auth | JWT Bearer + ASP.NET Identity |
30+
| Multitenancy | Finbuckle.MultiTenant 10.x |
31+
| Caching | Redis (StackExchange) |
32+
| Jobs | Hangfire |
33+
| Logging | Serilog + OpenTelemetry |
34+
| API docs | OpenAPI + Scalar |
35+
| Hosting | .NET Aspire |
36+
| Testing | xUnit, Shouldly, NSubstitute, NetArchTest |
37+
| IaC | Terraform (AWS ECS, RDS, ElastiCache) |
38+
39+
## Modules
40+
41+
### Identity Module
42+
User management, JWT authentication, role-based access control, permission-based authorization, session tracking, group management, password policies with history and expiry. 30+ API endpoints including registration, login, token refresh, user CRUD, role management, and session revocation.
43+
44+
### Multitenancy Module
45+
SaaS multitenancy built on Finbuckle.MultiTenant. Four tenant resolution strategies (claim, header, query string, delegate). Per-tenant database isolation via EF Core global query filters. Tenant provisioning with automatic database migration and seeding. Theme management per tenant.
46+
47+
### Auditing Module
48+
Enterprise audit trails capturing four event types: entity changes (CRUD with before/after diffs), security events (login, token operations), activity events (HTTP requests), and exception events (with stack traces). All events are tenant-aware with correlation ID tracking. Queryable via REST API with filtering by correlation, OpenTelemetry trace, severity, and date range.
49+
50+
## Building Blocks (10 shared libraries)
51+
52+
1. **Core** — DDD primitives (BaseEntity, AggregateRoot, DomainEvent), exceptions (CustomException, NotFoundException, ForbiddenException), ICurrentUser
53+
2. **Persistence** — EF Core abstractions, Specification pattern, pagination, domain events interceptor, auditable entity interceptor
54+
3. **Web** — Module system (IModule, ModuleLoader), GlobalExceptionHandler (ProblemDetails RFC 9457), API versioning, rate limiting, security headers, OpenAPI/Scalar, health checks, Serilog + OpenTelemetry
55+
4. **Caching** — ICacheService with distributed (Redis) and hybrid (L1 memory + L2 Redis) implementations
56+
5. **Eventing** — IEventBus (InMemory + RabbitMQ), outbox/inbox pattern, integration events, JsonEventSerializer
57+
6. **Jobs** — IJobService wrapping Hangfire, tenant-aware job processing, OpenTelemetry telemetry filter
58+
7. **Mailing** — IMailService with SMTP (MailKit) and SendGrid providers
59+
8. **Storage** — IStorageService with local filesystem and AWS S3 providers
60+
9. **Shared** — Permission constants, claim helpers, multitenancy constants, pagination DTOs
61+
10. **Blazor.UI** — MudBlazor component library with tenant-aware theming
62+
63+
## Getting Started
64+
65+
```bash
66+
git clone https://github.com/fullstackhero/dotnet-starter-kit.git
67+
cd dotnet-starter-kit
68+
dotnet build src/FSH.Framework.slnx
69+
dotnet run --project src/Playground/FSH.Playground.AppHost # Aspire (recommended)
70+
```
71+
72+
Default credentials: admin@root.com / 123Pa$$word! (root tenant)
73+
API docs: https://localhost:5001/scalar/v1
74+
75+
## Deployment Options
76+
77+
- **Docker**: Multi-stage Dockerfile + docker-compose (PostgreSQL, Redis, OTEL collector)
78+
- **.NET Aspire**: Local development orchestration with dashboard
79+
- **AWS Terraform**: Full IaC — VPC, ECS Fargate, ALB, RDS PostgreSQL, ElastiCache Redis, S3
80+
- **CI/CD**: GitHub Actions (build, test, publish to GHCR + NuGet)
81+
82+
## Links
83+
84+
- Website: https://fullstackhero.net
85+
- GitHub: https://github.com/fullstackhero/dotnet-starter-kit
86+
- Author: Mukesh Murugan (https://codewithmukesh.com)
87+
- Twitter: https://twitter.com/iammukeshm
88+
- LinkedIn: https://www.linkedin.com/in/iammukeshm/
89+
- YouTube: https://youtube.com/@codewithmukesh

docs/public/llms.txt

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,51 @@
11
# fullstackhero
22

3-
> Open-source .NET 10 modular monolith starter kit with multitenancy, identity, CQRS, vertical slice architecture, and production-ready infrastructure. MIT licensed. 6,300+ GitHub stars.
3+
> Production-ready, open-source .NET 10 starter kit for building multi-tenant SaaS and enterprise applications. Modular monolith architecture with vertical slice design, CQRS, identity management, and operational infrastructure. MIT licensed. 6,400+ GitHub stars.
44

5-
## Docs
6-
- [Introduction](https://fullstackhero.net/docs/introduction/): What fullstackhero is, who it's for, and complete tech stack
7-
- [Quick Start](https://fullstackhero.net/docs/quick-start/): Clone, build, and run in 60 seconds
8-
- [Prerequisites](https://fullstackhero.net/docs/prerequisites/): .NET 10 SDK, PostgreSQL, Redis
9-
- [Project Structure](https://fullstackhero.net/docs/project-structure/): BuildingBlocks, Modules, Playground, Tests layout
10-
- [Architecture Overview](https://fullstackhero.net/docs/architecture/): Modular monolith + vertical slice architecture explained
11-
- [CQRS Pattern](https://fullstackhero.net/docs/cqrs/): Commands, queries, and source-generated mediator
5+
## Getting Started
6+
- [Introduction](https://fullstackhero.net/docs/introduction/): What fullstackhero is, key features, and tech stack
7+
- [Prerequisites](https://fullstackhero.net/docs/prerequisites/): .NET 10 SDK, PostgreSQL, Redis setup
8+
- [Quick Start](https://fullstackhero.net/docs/quick-start/): Clone, build, and run in under 5 minutes
9+
- [Project Structure](https://fullstackhero.net/docs/project-structure/): Solution layout with 27 projects
10+
11+
## Architecture
12+
- [Architecture Overview](https://fullstackhero.net/docs/architecture/): Modular monolith + vertical slice architecture
13+
- [CQRS Pattern](https://fullstackhero.net/docs/cqrs/): Commands, queries, source-generated Mediator pipeline
1214
- [Domain Events](https://fullstackhero.net/docs/domain-events/): Domain and integration event patterns
13-
- [Identity Module](https://fullstackhero.net/docs/modules/identity/): User management, JWT auth, roles, permissions
14-
- [Multitenancy Module](https://fullstackhero.net/docs/modules/multitenancy/): Finbuckle tenant resolution, data isolation
15-
- [Auditing Module](https://fullstackhero.net/docs/modules/auditing/): Automatic audit trails for entity changes
16-
- [Building Blocks](https://fullstackhero.net/docs/building-blocks/): Shared framework libraries (Core, Persistence, Web, Caching, Eventing, Auth)
17-
- [Adding a Feature](https://fullstackhero.net/docs/adding-a-feature/): Step-by-step vertical slice guide
18-
- [Adding a Module](https://fullstackhero.net/docs/adding-a-module/): Creating new bounded context modules
19-
- [Deployment](https://fullstackhero.net/docs/deployment/): Docker, Azure, AWS, self-hosted options
20-
- [Contributing](https://fullstackhero.net/docs/contributing/): How to contribute, coding standards, testing conventions
15+
- [Specifications](https://fullstackhero.net/docs/patterns/specifications/): Composable query specifications for EF Core
16+
- [Outbox & Inbox](https://fullstackhero.net/docs/patterns/outbox-inbox/): Reliable messaging with transactional outbox
17+
- [Module System](https://fullstackhero.net/docs/patterns/module-system/): Plug-and-play bounded context modules
18+
19+
## Modules
20+
- [Identity](https://fullstackhero.net/docs/modules/identity/overview/): Users, roles, JWT auth, sessions, groups, permissions
21+
- [Multitenancy](https://fullstackhero.net/docs/modules/multitenancy/overview/): Tenant resolution, data isolation, provisioning
22+
- [Auditing](https://fullstackhero.net/docs/modules/auditing/overview/): Security, activity, entity change, and exception auditing
23+
24+
## Building Blocks
25+
- [Overview](https://fullstackhero.net/docs/building-blocks/overview/): 10 shared framework libraries
26+
- [Core](https://fullstackhero.net/docs/building-blocks/core/): DDD primitives, exceptions, interfaces
27+
- [Persistence](https://fullstackhero.net/docs/building-blocks/persistence/): EF Core, specifications, pagination
28+
- [Web](https://fullstackhero.net/docs/building-blocks/web/): Module system, middleware, API versioning
29+
- [Caching](https://fullstackhero.net/docs/building-blocks/caching/): Redis distributed + hybrid cache
30+
- [Eventing](https://fullstackhero.net/docs/building-blocks/eventing/): Event bus, outbox/inbox, RabbitMQ
31+
32+
## Deployment
33+
- [Docker](https://fullstackhero.net/docs/deployment/docker/): Multi-stage Dockerfile, docker-compose
34+
- [.NET Aspire](https://fullstackhero.net/docs/deployment/aspire/): Local dev orchestration
35+
- [AWS Terraform](https://fullstackhero.net/docs/deployment/aws-terraform/): ECS Fargate, RDS, ElastiCache
36+
- [CI/CD](https://fullstackhero.net/docs/deployment/ci-cd/): GitHub Actions pipelines
2137

2238
## Key Facts
2339
- Framework: .NET 10 / C# latest
24-
- Architecture: Modular Monolith + Vertical Slice Architecture (VSA)
40+
- Architecture: Modular Monolith + Vertical Slice Architecture
41+
- Database: PostgreSQL (EF Core 10), also supports SQL Server
42+
- Auth: JWT Bearer + ASP.NET Identity with permission-based authorization
2543
- Multitenancy: Finbuckle.MultiTenant (claim, header, query string strategies)
26-
- CQRS: Mediator 3.x (source-generated, zero-reflection dispatch)
27-
- Validation: FluentValidation 12.x (auto-registered)
28-
- Database: PostgreSQL with EF Core 10 (Npgsql)
29-
- Auth: JWT Bearer + ASP.NET Identity
30-
- Caching: Redis (StackExchange)
31-
- Jobs: Hangfire
32-
- Logging: Serilog + OpenTelemetry (OTLP)
33-
- API Docs: OpenAPI + Scalar
34-
- Hosting: .NET Aspire (AppHost)
35-
- UI: MudBlazor (Blazor)
44+
- CQRS: Mediator 3.x (source-generated, zero-reflection)
45+
- Caching: Redis (StackExchange) with hybrid L1/L2
46+
- Jobs: Hangfire with tenant-aware job processing
47+
- Observability: Serilog + OpenTelemetry (OTLP)
3648
- Testing: xUnit, Shouldly, NSubstitute, AutoFixture, NetArchTest
3749
- License: MIT
38-
- GitHub: https://github.com/fullstackhero/dotnet-starter-kit
3950
- Created by: Mukesh Murugan (https://codewithmukesh.com)
51+
- GitHub: https://github.com/fullstackhero/dotnet-starter-kit

docs/public/robots.txt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# fullstackhero.net robots.txt
2+
3+
User-agent: *
4+
Allow: /
5+
6+
# AI Search Crawlers — explicitly allowed
7+
User-agent: GPTBot
8+
Allow: /
9+
10+
User-agent: OAI-SearchBot
11+
Allow: /
12+
13+
User-agent: ChatGPT-User
14+
Allow: /
15+
16+
User-agent: ClaudeBot
17+
Allow: /
18+
19+
User-agent: PerplexityBot
20+
Allow: /
21+
22+
User-agent: Google-Extended
23+
Allow: /
24+
25+
User-agent: Amazonbot
26+
Allow: /
27+
28+
User-agent: Applebot-Extended
29+
Allow: /
30+
31+
User-agent: Cohere-ai
32+
Allow: /
33+
34+
Sitemap: https://fullstackhero.net/sitemap.xml

docs/src/layouts/Docs.astro

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,90 @@ interface Props {
2626
const { title, description, slug, headings } = Astro.props;
2727
const editUrl = `https://github.com/fullstackhero/dotnet-starter-kit/edit/develop/docs/src/content/docs/${slug}.md`;
2828
const tocHeadings = headings.filter((h) => h.depth >= 2 && h.depth <= 3);
29+
30+
// Build breadcrumb trail from sidebar config
31+
const siteUrl = 'https://fullstackhero.net';
32+
const pageUrl = `${siteUrl}/docs/${slug}/`;
33+
34+
// Find the section this page belongs to
35+
const currentGroup = sidebar.find(g => g.items.some(i => i.slug === slug));
36+
const sectionName = currentGroup?.label || 'Docs';
37+
38+
// TechArticle structured data for this documentation page
39+
const techArticleSchema = {
40+
"@context": "https://schema.org",
41+
"@type": "TechArticle",
42+
"headline": title,
43+
"description": description || `${title} — fullstackhero documentation`,
44+
"url": pageUrl,
45+
"dateModified": new Date().toISOString().split('T')[0],
46+
"author": {
47+
"@type": "Person",
48+
"name": "Mukesh Murugan",
49+
"url": "https://codewithmukesh.com",
50+
"jobTitle": "Software Engineer",
51+
"sameAs": [
52+
"https://twitter.com/iammukeshm",
53+
"https://www.linkedin.com/in/iammukeshm/",
54+
"https://github.com/iammukeshm"
55+
]
56+
},
57+
"publisher": {
58+
"@type": "Organization",
59+
"name": "fullstackhero",
60+
"url": siteUrl,
61+
"logo": {
62+
"@type": "ImageObject",
63+
"url": `${siteUrl}/favicon.svg`
64+
}
65+
},
66+
"mainEntityOfPage": {
67+
"@type": "WebPage",
68+
"@id": pageUrl
69+
},
70+
"inLanguage": "en",
71+
"isPartOf": {
72+
"@type": "WebSite",
73+
"name": "fullstackhero",
74+
"url": siteUrl
75+
},
76+
"speakable": {
77+
"@type": "SpeakableSpecification",
78+
"cssSelector": [".prose > h1", ".prose > p:first-of-type"]
79+
}
80+
};
81+
82+
// BreadcrumbList structured data
83+
const breadcrumbSchema = {
84+
"@context": "https://schema.org",
85+
"@type": "BreadcrumbList",
86+
"itemListElement": [
87+
{
88+
"@type": "ListItem",
89+
"position": 1,
90+
"name": "Home",
91+
"item": siteUrl
92+
},
93+
{
94+
"@type": "ListItem",
95+
"position": 2,
96+
"name": "Docs",
97+
"item": `${siteUrl}/docs/introduction/`
98+
},
99+
{
100+
"@type": "ListItem",
101+
"position": 3,
102+
"name": sectionName,
103+
"item": pageUrl
104+
},
105+
{
106+
"@type": "ListItem",
107+
"position": 4,
108+
"name": title,
109+
"item": pageUrl
110+
}
111+
]
112+
};
29113
---
30114

31115
<Landing title={`${title} — fullstackhero`} description={description || 'fullstackhero documentation'}>
@@ -100,6 +184,8 @@ const tocHeadings = headings.filter((h) => h.depth >= 2 && h.depth <= 3);
100184

101185
<main class="docs-content">
102186
<Breadcrumbs currentSlug={slug} title={title} />
187+
<script type="application/ld+json" set:html={JSON.stringify(techArticleSchema)} />
188+
<script type="application/ld+json" set:html={JSON.stringify(breadcrumbSchema)} />
103189
<article class="prose">
104190
<h1>{title}</h1>
105191
<slot />

0 commit comments

Comments
 (0)