SkillAgentSearch skills...

Krafter

A modern .NET 10 full-stack platform built with Vertical Slice Architecture (VSA), multi-tenancy, and Blazor WebAssembly — designed for efficient AI-assisted feature development.

Install / Use

/learn @AditiKraft/Krafter
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Krafter

<p align="center"> <img src="docs/krafter-logo.svg" alt="Krafter logo" width="560" /> </p>

A modern .NET 10 full-stack platform built with Vertical Slice Architecture (VSA), multi-tenancy, and Blazor WebAssembly — designed for efficient AI-assisted feature development.

.NET 10 Blazor License

🚀 Demo

Try the live demo at https://krafter.getkrafter.dev/

Default Credentials:

  • Email: admin@getkrafter.dev
  • Password: 123Pa$$word!

Alternatively, log in with Google to create a new account.

⚡ TL;DR Quick Start

First local run:

  1. Run Aspire orchestration
  • dotnet run --project aspire/AditiKraft.Krafter.Aspire.AppHost/AditiKraft.Krafter.Aspire.AppHost.csproj
  1. Wait for startup to finish
  • krafter-migrator applies checked-in migrations before krafter-api starts
  1. Open URLs
  • Aspire Dashboard: https://localhost:17285
  • Backend API: https://localhost:5199
  • Scalar API Reference: https://localhost:5199/scalar/v1
  • Blazor UI: https://localhost:7291

📋 Table of Contents

🎯 Overview

Krafter is a production-ready, enterprise-grade full-stack platform built with .NET 10, combining modern architectural patterns with cutting-edge technologies. It provides a solid foundation for building scalable, multi-tenant SaaS applications with rich user interfaces.

What Makes Krafter Special?

  • 🏗️ Vertical Slice Architecture (VSA) - Backend organized by features, not layers
  • 🌐 Hybrid Blazor - WebAssembly + Server rendering for optimal performance
  • 🏢 Multi-Tenancy - Complete tenant isolation at the database level
  • 🔐 Permission-Based Security - Fine-grained authorization with JWT
  • ⚡ Real-Time Updates - SignalR integration for live notifications
  • 📊 Observability - OpenTelemetry with Aspire orchestration
  • 🎨 Modern UI - Radzen components with theming support
  • 🔌 Refit API Client - Type-safe HTTP client with automatic token handling

🏛️ Architecture

Solution Architecture Diagram

Krafter Solution Architecture

Project Dependencies Diagram

Project Dependencies

✨ Key Features

🏗️ Architecture

  • Vertical Slice Architecture (VSA) - Features organized by business capability
  • Clean Code - Single Responsibility, DRY, SOLID principles
  • Auto-Registration - Handlers, services, and routes discovered via markers
  • Response Pattern - Consistent Response<T> wrapper for all operations

🔐 Security

  • JWT Authentication - Secure token-based authentication
  • Google OAuth - External authentication integration
  • Permission-Based Authorization - Fine-grained access control
  • Multi-Tenancy - Complete tenant isolation at DB level
  • Token Refresh - Automatic token rotation

🎨 User Interface

  • Blazor Hybrid - WebAssembly + Server rendering
  • Radzen Components - 70+ professional UI components
  • Theme Support - Light/Dark/Auto modes with WCAG compliance
  • Responsive Design - Mobile and desktop optimized
  • Code-Behind Pattern - Clean separation of markup and logic
  • Refit - Type-safe REST API client

📊 Data & Storage

  • EF Core - PostgreSQL & MySQL support
  • Multi-Database - Separate contexts for tenants, jobs, and main data
  • Migrations - Code-first database schema management
  • Soft Delete - Recoverable data deletion

Performance & Scalability

  • Background Jobs - TickerQ for async processing
  • SignalR - Real-time bi-directional communication
  • Redis Cache - Distributed caching support
  • Pagination - Efficient data loading
  • Debouncing - Optimized search and filtering

🔍 Observability

  • .NET Aspire - Orchestration and service discovery
  • OpenTelemetry - Distributed tracing and metrics
  • Structured Logging - Comprehensive application logs
  • Health Checks - Service health monitoring

🚀 DevOps

  • NUKE Build - Automated build pipeline
  • Docker Support - Containerized deployment
  • GitHub Actions - CI/CD automation
  • Auto Deployment - Webhook-triggered updates

🛠️ Technology Stack

Backend

  • .NET 10 - Latest .NET framework
  • ASP.NET Core - Minimal APIs
  • Entity Framework Core 10 - ORM
  • ASP.NET Core Identity - User management
  • FluentValidation - Input validation
  • TickerQ - Background job processing
  • SignalR - Real-time communication

Frontend

  • Blazor WebAssembly - Client-side SPA
  • Blazor Server - Server-side rendering
  • Radzen Blazor - UI component library
  • Refit - Type-safe REST API client
  • Blazored LocalStorage - Browser storage
  • FluentValidation.Blazor - Client-side validation
  • Mapster - Object mapping

Infrastructure

  • .NET Aspire - Cloud-native orchestration
  • OpenTelemetry - Observability
  • Redis - Caching (optional)
  • PostgreSQL / MySQL - Database
  • Docker - Containerization
  • NUKE - Build automation

🚀 Getting Started

Prerequisites

Quick Start

  1. Clone the repository

    git clone https://github.com/AditiKraft/Krafter.git
    cd Krafter
    
  2. Restore packages

    dotnet restore
    
  3. Run AppHost

    dotnet run --project aspire/AditiKraft.Krafter.Aspire.AppHost/AditiKraft.Krafter.Aspire.AppHost.csproj
    
  4. Wait for krafter-migrator to finish

    • AppHost starts the short-lived migrator before krafter-api
    • No manual dotnet ef database update step is required for normal startup
  5. Access the application

    • Aspire Dashboard: https://localhost:17285
    • Backend API: https://localhost:5199
    • Scalar API Reference: https://localhost:5199/scalar/v1
    • Blazor UI: https://localhost:7291
  6. Default Credentials

    On first run, the application seeds a default admin account:

    • Email: admin@getkrafter.dev
    • Password: 123Pa$$word!

    Alternatively, log in with Google, which will create a new account.

    ⚠️ Important: Change the default password immediately in production!


Database Migrations Workflow

AppHost applies checked-in migrations automatically through krafter-migrator. For normal local startup, run AppHost and let the migrator finish.

Create a New Migration

The existing ConnectionStrings:KrafterDbMigration value in src/AditiKraft.Krafter.Backend/appsettings.Local.json already works for dotnet ef migrations add. Do not change it.

Install EF Core tools once if you have not already:

dotnet tool install --global dotnet-ef

Create the migration from the Backend project:

cd src/AditiKraft.Krafter.Backend

# Examples
dotnet ef migrations add <MigrationName> --context KrafterContext
dotnet ef migrations add <MigrationName> --context TenantDbContext
dotnet ef migrations add <MigrationName> --context BackgroundJobsContext

Restart AppHost to apply the new migration:

dotnet run --project aspire/AditiKraft.Krafter.Aspire.AppHost/AditiKraft.Krafter.Aspire.AppHost.csproj

Your database is now ready.


Troubleshooting

| Issue | Cause | Solution | |-------|-------|----------| | "Unable to create DbContext" | Missing ConnectionStrings:KrafterDbMigration or wrong working directory | Restore the KrafterDbMigration entry in appsettings.Local.json and run the command from src/AditiKraft.Krafter.Backend | | "krafter-api does not start" | krafter-migrator failed first | Check the krafter-migrator logs and fix the migration error | | "Migration already exists" | Duplicate migration name | Use dotnet ef migrations remove --context <ContextName> | | "Pending model changes" | The model changed but no migration exists yet | Add a new migration for the affected context before restarting AppHost | | dotnet-ef not found | EF tools not installed | Run dotnet tool install --global dotnet-ef |


Configuration Notes

Local development works with the checked-in dev settings.

Change configuration only if you need custom values for:

  • PostgreSQL container credentials in aspire/AditiKraft.Krafter.Aspire.AppHost/appsettings.json
  • JWT, TickerQ, or Google auth settings in src/AditiKraft.Krafter.Backend/appsettings.json
  • UI backend URL or Google client settings in src/UI/AditiKraft.Krafter.UI.Web/appsettings.Development.json and src/UI/AditiKraft.Krafter.UI.Web.Client/wwwroot/appsettings.json

For anything outside local development, prefer user-secrets or environment variables instead of committed values.


📁 Project Structure

AditiKraft.Krafter/
├── Agents.md                              # AI agent instructions (entry point)
├── aspire/                                # Aspire orchestration
│   ├── AditiKraft.Krafter.Aspire.AppHost/
│   └── AditiKraft.Kraft
View on GitHub
GitHub Stars88
CategoryDevelopment
Updated16h ago
Forks13

Languages

C#

Security Score

100/100

Audited on Mar 27, 2026

No findings