You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Email Queue** - SMTP email sending via background jobs
100
101
-**Recurring Jobs** - Scheduled task execution
101
102
-**Job Dashboard** - Monitor jobs at `/admin-ui/jobs`
103
+
- Uses monthly rolling Sqlite databases by default - [Upgrade to PostgreSQL/SQL Server/MySQL](#upgrading-to-enterprise-database)
102
104
103
105
### 📝 MDX Blog
104
106
@@ -110,15 +112,6 @@ Integrated markdown blog with:
110
112
-**Frontmatter** - YAML metadata for posts
111
113
-**Typography Styling** - Beautiful prose with `@tailwindcss/typography`
112
114
113
-
### 🗄️ Database
114
-
115
-
SQLite with dual ORM support:
116
-
117
-
-**OrmLite** - ServiceStack's fast micro-ORM for services
118
-
-**Entity Framework Core** - For Identity and complex queries
119
-
-**Code-First Migrations** - EF Core migrations in `/Migrations`
120
-
-**Database Admin UI** - Browse data at `/admin-ui/database`
121
-
122
115
### 📡 Request Logging
123
116
124
117
Comprehensive API logging:
@@ -128,13 +121,6 @@ Comprehensive API logging:
128
121
-**Error Tracking** - Automatic error logging
129
122
-**Admin Dashboard** - View logs at `/admin-ui/logging`
130
123
131
-
### 🏥 Health Checks
132
-
133
-
Production-ready health monitoring:
134
-
135
-
-**Health Endpoint** - `/up` for load balancer checks
136
-
-**Custom Health Checks** - Extensible health check framework
137
-
138
124
### 🔄 TypeScript DTOs
139
125
140
126
Automatic TypeScript type generation:
@@ -151,6 +137,22 @@ API documentation with modern tooling:
151
137
-**Scalar API Reference** - Interactive API documentation at `/scalar/v1`
152
138
-**Development Mode** - API docs available in development
153
139
140
+
### 🤖 AI Chat Integration
141
+
142
+
Built-in AI chat capabilities:
143
+
144
+
-**ChatFeature** - Multi-provider AI chat API
145
+
-**Configurable Providers** - ServiceStack, OpenAI, Anthropic, Google, Groq, and more
146
+
-**Chat History** - Persistent storage with `DbChatStore`
147
+
-**Admin Analytics** - Chat usage insights at `/admin-ui/chat`
148
+
149
+
### 🏥 Health Checks
150
+
151
+
Production-ready health monitoring:
152
+
153
+
-**Health Endpoint** - `/up` for load balancer checks
154
+
-**Custom Health Checks** - Extensible health check framework
155
+
154
156
### 🐳 Docker Deployment
155
157
156
158
Production-ready containerization:
@@ -274,6 +276,7 @@ npm run test:ui # Run tests with UI
274
276
npm run test:run # Run tests once
275
277
```
276
278
279
+
277
280
## Configuration
278
281
279
282
### Key Configuration Files
@@ -354,56 +357,6 @@ npx add-in ef-postgres
354
357
npx add-in db-identity
355
358
```
356
359
357
-
## Deployment
358
-
359
-
### Docker + Kamal
360
-
361
-
This project includes GitHub Actions for CI/CD with automatic Docker image builds and production [deployment with Kamal](https://docs.servicestack.net/kamal-deploy). The `/config/deploy.yml` configuration is designed to be reusable across projects—it dynamically derives service names, image paths, and volume mounts from environment variables, so you only need to configure your server's IP and hostname using GitHub Action secrets.
362
-
363
-
### GitHub Action Secrets
364
-
365
-
**Required - App Specific*:
366
-
367
-
The only secret needed to be configured per Repository.
368
-
369
-
| Variable | Example | Description |
370
-
|----------|---------|-------------|
371
-
|`KAMAL_DEPLOY_HOST`|`example.org`| Hostname used for SSL certificate and Kamal proxy |
372
-
373
-
**Required** (Organization Secrets):
374
-
375
-
Other Required variables can be globally configured in your GitHub Organization or User secrets which will
376
-
enable deploying all your Repositories to the same server.
377
-
378
-
| Variable | Example | Description |
379
-
|----------|----------|-------------|
380
-
|`KAMAL_DEPLOY_IP`|`100.100.100.100`| IP address of the server to deploy to |
381
-
|`SSH_PRIVATE_KEY`|`ssh-rsa ...`| SSH private key to access the server |
382
-
|`LETSENCRYPT_EMAIL`|`[email protected]`| Email for Let's Encrypt SSL certificate |
These are inferred from the GitHub Action context and don't need to be configured.
393
-
394
-
| Variable | Source | Description |
395
-
|----------|--------|-------------|
396
-
|`GITHUB_REPOSITORY`|`${{ github.repository }}`| e.g. `acme/example.org` - used for service name and image |
397
-
|`KAMAL_REGISTRY_USERNAME`|`${{ github.actor }}`| GitHub username for container registry |
398
-
|`KAMAL_REGISTRY_PASSWORD`|`${{ secrets.GITHUB_TOKEN }}`| GitHub token for container registry auth |
399
-
400
-
#### Features
401
-
402
-
-**Docker containerization** with optimized .NET images
403
-
-**SSL auto-certification** via Let's Encrypt
404
-
-**GitHub Container Registry** integration
405
-
-**Volume persistence** for App_Data including any SQLite database
406
-
407
360
## AutoQuery CRUD Dev Workflow
408
361
409
362
For Rapid Development simple [TypeScript Data Models](https://docs.servicestack.net/autoquery/okai-models) can be used to generate C# AutoQuery APIs and DB Migrations.
@@ -471,6 +424,96 @@ Which will drop the table and then you can get rid of the AutoQuery APIs, DB Mig
471
424
npx okai rm Transaction.d.ts
472
425
```
473
426
427
+
## Deployment
428
+
429
+
### Docker + Kamal
430
+
431
+
This project includes GitHub Actions for CI/CD with automatic Docker image builds and production [deployment with Kamal](https://docs.servicestack.net/kamal-deploy). The `/config/deploy.yml` configuration is designed to be reusable across projects—it dynamically derives service names, image paths, and volume mounts from environment variables, so you only need to configure your server's IP and hostname using GitHub Action secrets.
432
+
433
+
### GitHub Action Secrets
434
+
435
+
**Required - App Specific*:
436
+
437
+
The only secret needed to be configured per Repository.
438
+
439
+
| Variable | Example | Description |
440
+
|----------|---------|-------------|
441
+
|`KAMAL_DEPLOY_HOST`|`example.org`| Hostname used for SSL certificate and Kamal proxy |
442
+
443
+
**Required** (Organization Secrets):
444
+
445
+
Other Required variables can be globally configured in your GitHub Organization or User secrets which will
446
+
enable deploying all your Repositories to the same server.
447
+
448
+
| Variable | Example | Description |
449
+
|----------|----------|-------------|
450
+
|`KAMAL_DEPLOY_IP`|`100.100.100.100`| IP address of the server to deploy to |
451
+
|`SSH_PRIVATE_KEY`|`ssh-rsa ...`| SSH private key to access the server |
452
+
|`LETSENCRYPT_EMAIL`|`[email protected]`| Email for Let's Encrypt SSL certificate |
These are inferred from the GitHub Action context and don't need to be configured.
463
+
464
+
| Variable | Source | Description |
465
+
|----------|--------|-------------|
466
+
|`GITHUB_REPOSITORY`|`${{ github.repository }}`| e.g. `acme/example.org` - used for service name and image |
467
+
|`KAMAL_REGISTRY_USERNAME`|`${{ github.actor }}`| GitHub username for container registry |
468
+
|`KAMAL_REGISTRY_PASSWORD`|`${{ secrets.GITHUB_TOKEN }}`| GitHub token for container registry auth |
469
+
470
+
#### Features
471
+
472
+
-**Docker containerization** with optimized .NET images
473
+
-**SSL auto-certification** via Let's Encrypt
474
+
-**GitHub Container Registry** integration
475
+
-**Volume persistence** for App_Data including any SQLite database
476
+
477
+
## AI-Assisted Development with CLAUDE.md
478
+
479
+
As part of our objectives of improving developer experience and embracing modern AI-assisted development workflows - all new .NET SPA templates include a comprehensive `AGENTS.md` file designed to optimize AI-assisted development workflows.
480
+
481
+
### What is CLAUDE.md?
482
+
483
+
`CLAUDE.md` and [AGENTS.md](https://agents.md) onboards Claude (and other AI assistants) to your codebase by using a structured documentation file that provides it with complete context about your project's architecture, conventions, and technology choices. This enables more accurate code generation, better suggestions, and faster problem-solving.
-**Project Structure** - Gives Claude a map of the codebase
491
+
-**ServiceStack Conventions** - DTO patterns, Service implementation, AutoQuery, Authentication, and Validation
492
+
-**API Integration** - TypeScript DTO generation, API client usage, component patterns, and form handling
493
+
-**Database Patterns** - OrmLite setup, migrations, and data access patterns
494
+
-**Common Development Tasks** - Step-by-step guides for adding APIs, implementing features, and extending functionality
495
+
-**Testing & Deployment** - Test patterns and deployment workflows
496
+
497
+
### Extending with Project-Specific Details
498
+
499
+
The existing `CLAUDE.md` serves as a solid foundation, but for best results, you should extend it with project-specific details like the purpose of the project, key parts and features of the project and any unique conventions you've adopted.
500
+
501
+
### Benefits
502
+
503
+
-**Faster Onboarding** - New developers (and AI assistants) understand project conventions immediately
504
+
-**Consistent Code Generation** - AI tools generate code following your project's patterns
505
+
-**Better Context** - AI assistants can reference specific ServiceStack patterns and conventions
506
+
-**Reduced Errors** - Clear documentation of framework-specific conventions
507
+
-**Living Documentation** - Keep it updated as your project evolves
508
+
509
+
### How to Use
510
+
511
+
Claude Code and most AI Assistants already support automatically referencing `CLAUDE.md` and `AGENTS.md` files, for others you can just include it in your prompt context when asking for help, e.g:
512
+
513
+
> Using my project's AGENTS.md, can you help me add a new AutoQuery API for managing Products?
514
+
515
+
The AI will understand your App's ServiceStack conventions, React setup, and project structure, providing more accurate and contextual assistance.
0 commit comments