project-setup

Tech-stack selection advisor for .NET projects: recommended defaults for database, auth, caching, messaging, observability, and resilience, with the rationale behind each default. Load when choosing or reviewing a project's tech stack, or when the user says "tech stack", "which database", "pick a st

By codewithmukesh · 1,179 installs

npx skills add codewithmukesh/dotnet-claude-kit --skill project-setup

Source repository · Upstream listing

Project Setup — Tech Stack Advisor This skill owns one thing: the kit's recommended tech stack defaults and why. The workflows that consume it live elsewhere: Initializing a project / generating CLAUDE.md → dotnet init (interactive flow, architecture questionnaire, CLAUDE.md generation) Assessing an existing codebase → health check (the canonical 8 dimension graded assessment) EF Core schema, NuGet, or .NET version migrations → migrate Choosing an architecture → architecture advisor (always ask before recommending) Core Principles 1. Recommend a default, explain the why, let the user choose — Every dimension has a kit default, but defaults are starting points, not mandates. State the trade off in one line so the choice is informed. 2. Prefer built in .NET over third party — HybridCache over Redis client wrappers, built in rate limiting over packages, built in OpenAPI over Swashbuckle. Fewer dependencies means fewer licensing surprises and upgrade breaks. 3. License aware picks — MediatR (v13+), MassTransit (v9+), and FluentAssertions (v8+) went commercial. The kit defaults to MIT alternatives: Mediator, Wolverine, plain xUnit asserts. 4. Add messaging later, not never — Most projects don't need a message bus on day one. Default to "None (add later)" and reach for Wolverine when async workflows actually appear. Patterns Tech Stack Dimensions and Defaults Dimension Options Default Why Database PostgreSQL, SQL Server, SQLite PostgreSQL Open source, best EF Core provider outside SQL Server, first class Testcontainers support Auth JWT Bearer, OIDC (Keycloak/Auth0), None JWT Bearer Simplest secure default for APIs; move to OIDC when an external IdP exists Caching HybridCache, Redis, None HybridCache Built in, stampede protection, L1+L2 — add Redis only as its L2 backend Messaging Wolverine (RabbitMQ), MassTransit, None None (add later) Premature messaging adds ops burden; Wolverine (MIT) when needed Observability Serilog + OpenTelemetry, Basic logging Serilog + OTEL Structured logs + traces from day one are cheap; retrofitting is not Resilience Polly v8 pipelines, Basic retry Polly v8 AddStandardResilienceHandler() is one line for production grade defaults API docs Built in OpenAPI + Scalar OpenAPI + Scalar Framework maintained spec generation; Scalar replaces Swagger UI Testing xUnit v3 + Testcontainers xUnit v3 + Testcontainers Real databases in tests; in memory providers hide real bugs Once dimensions are chosen, dotnet init bakes them into the generated CLAUDE.md, and each choice maps to a skill to load when working in that area ( ef core , authentication , caching , messaging , serilog , opentelemetry , resilience , openapi , scalar , testing ). Anti patterns Prescribing a Stack Without Asking Re Running Workflows This Skill Doesn't Own Decision Guide Scenario Route to "Set up this project for Claude Code" dotnet init "Which database/auth/caching should I use?" This skill — table above "How healthy is this codebase?" health check "Upgrade to .NET 10" / "update packages" migrate "Which architecture fits?" architecture advisor Stack chosen, ready to build scaffold for the first feature