Launch price for the first 100 buyers: €149, then €279.
Stop rebuilding the same .NET plumbing. Ship your SaaS instead.
The full source of a .NET 10 API and a React 19 app with passkeys, an audited admin, invitations, Stripe billing, GDPR export and erasure, an MCP server for AI apps, and Grafana dashboards already built and tested.
Running in production on 5+ projects · one-time license · lifetime updates · 14-day refund
Not every product needs every module. Add --no-billing, --no-mcp or --no-notifications and it is removed cleanly.


The admin user page as it ships, captured from the running template.Sign in to the live demo and open it yourself.
- Backend
- .NET 10 · EF Core · PostgreSQL · Wolverine · RabbitMQ · Redis
- Frontend
- React 19 · Vite · TanStack Router + Query · Tailwind v4 · shadcn/ui
- In production
- 5+ projects run on it today
- Counted in the source
- 119 handlers · 947 .NET tests · 108 frontend tests
Already running 5+ projects in production. Check the rest yourself.
There are no public testimonials yet. Instead, you can look at all of it before paying: the running app, every doc, the live API and the libraries it's built on.
- The live demoSeeded admin and user logins. Click through every settings and admin screen.
- The full docsEvery how-to that ships with the template, public, searchable and served as Markdown.
- The API referenceThe live Scalar reference, with request and response schemas for every endpoint.
- The stack, namedMainstream open-source libraries only, each linked to its own project.
Each feature lives in one folder, from the button to the database.
Slicekit uses vertical slices on both sides of the wire. To add a feature you copy a slice and rename it; to remove one you delete a folder. This is the real "Create API key" slice.
- form
- api.ts
- CreateApiKeyEndpoint
- Validator → Handler
- EF Core · Postgres
- ApiKeyCreatedEvent
Slicekit.Core/Features/ApiKeys/CreateApiKey/
- Command.csrequest
- Validator.csrules
- Handler.cslogic
- Result.csanswer
- ApiKeyCreatedHandler.csevent
Slicekit.Api/Endpoints/v1/ApiKeys/
- CreateApiKeyEndpoint.csHTTP
frontend/src/features/api-keys/
- api.tstyped client
- hooks.tsquery
- schemas.tszod
The endpoint is a thin adapter. A CLI, a worker or a scheduled job can send the same command without a web server.
Errors have one shape. The validator's error codes come back as problem details, and the form puts each on its field.
Boundaries are tested. Architecture tests fail the build when a slice reaches where it shouldn't.
Everything you'd otherwise build before your first feature.
63 parts in 11 areas, each one shipped working and covered by tests. Pick an area to see what's in it. The docs explain how every part works.
Sign-in & sessions
Built on ASP.NET Core Identity, hardened, and finished down to the emails it sends.


Cookie sessions, hardened
Tokens live in HttpOnly cookies with CSRF protection on every state-changing request. Refresh tokens rotate in families, and reuse of an old one revokes the whole chain.
Passkeys and TOTP
WebAuthn passkeys for passwordless sign-in, plus TOTP with QR enrollment and downloadable recovery codes. Both managed by the user.
Google and GitHub sign-in
OAuth providers that link to an existing account and can be unlinked again from settings.
Sessions per device
Every active session is listed by device and can be revoked on its own or all at once. Revoking is real because it sits on the token families.
Single-use tokens
Email verification, password reset and email change run on single-use, time-boxed tokens. Recovery codes are one-time and regenerable.
The unglamorous rest
Breach-checked passwords via Have I Been Pwned, lockout with admin unlock, Redis-backed rate limits, security headers and reverse-proxy trust.
Account emails, ready to send
Welcome, verification, password reset and changed, email change, a sign-up attempt on a known address and a session-theft alert. One responsive Razor layout over any SMTP.
Permissions & admin
Who may do what, how they got in, and a record of everything they did.


Granular permissions
Endpoints and UI check the same permission catalog, in three tiers: self-service, assignable staff grants and superadmin operations.
Role presets
Named presets copy grants onto users or invitations. An explicit apply action pushes role edits to existing users.
Invite-only onboarding
Invite by email with a permission snapshot or preset. Resend, revoke or update pending invitations, and switch public sign-up off entirely.
Accountable impersonation
Support acts as a user only with a logged reason. The original admin stays in the token, and both identities land in the audit trail.
Hash-chained audit trail
Actor, resource, outcome and sequence number for every security action. Each entry carries the hash of the previous one, so tampering shows.
Scoped API keys
Users mint keys with a subset of their own permissions, an expiry and rotation. The plain key is shown once and never stored.
Privacy & GDPR
The parts an EU product needs before launch, enforced by the build instead of by memory.


Self-service data export
Users download everything held about them from the privacy settings, without a support ticket.
Erasure with anonymization
Deletion soft-deletes the user and anonymizes personal fields, so foreign keys and audit history stay intact.
Export and erasure cannot drift
An architecture test fails the build if a personal field is exported but not erased, or erased but not exported.
Versioned consent
Registration records which version of the terms and privacy policy was accepted, and when.
PII encrypted and redacted
Personal fields are encrypted at rest with ASP.NET Data Protection, and a Sensitive attribute keeps them out of logs and audit payloads.
Your infrastructure
Postgres, Redis, RabbitMQ, MinIO and the Grafana stack are open source and self-hosted. You pick the external providers.
Stripe billing
Optional module · remove with --no-billing
Subscriptions that work against Stripe on day one, with Stripe as the source of truth.


Subscriptions end to end
Checkout, configurable trials and the Customer Portal, with confirmation and paid-invoice emails that attach the PDF.
No parallel price table
Products and prices live in your Stripe dashboard. A metadata marker keeps test and unrelated products out of the catalog.
Feature-key entitlements
Gate features with boolean flags and numeric limits, enforced in the API slice that acts and mirrored in the UI.
Plan limits from the admin panel
Map feature keys to products and tune limits, like 10 API keys on Starter and 100 on Pro, without a deploy.
Webhooks that never double-process
An idempotency ledger keyed on the Stripe event id, durable retries for transient faults, and PII payloads redacted on a schedule.
Inside the GDPR flows
Export includes subscription state. Deletion cancels live subscriptions while Stripe keeps the invoices tax law requires.
MCP server
Optional module · remove with --no-mcp
Your users work with your product from Claude, ChatGPT, Claude Code, Codex, Cursor or VS Code.
Server and setup guides
Streamable HTTP at /mcp on the official C# SDK. Settings show the server URL and a setup guide per client.
OAuth consent, wired
PKCE, client discovery and registration. Users approve read-only, read-and-write or custom permissions.
Sign up while connecting
New users register with email, Google or GitHub mid-flow, and the pending request brings them back to consent.
Access the user controls
Connected apps are listed in settings with editable permissions, and disconnecting cuts off tokens already issued.
Accountable tool calls
Every call records the tool, client and outcome in the audit trail, under the same permission rules as the API.
Your tools, same handlers
Add product tools beside the account tools; they call the same handlers as the API. Scoped API keys for agents are opt-in.
Notifications
Optional module · remove with --no-notifications
Know what happens in your product as it happens, and tell the right people.


Know when someone signs up
Twenty catalogued events, from a registration to a failed payment, fan out to Slack, Discord, Apprise or email.
A message builder per event
Choose which events reach which target and rewrite each message, with a preview of the real payload before saving.
An admin inbox that misses nothing
Every event is recorded in-app even with no target subscribed. Repeats collapse into one row and link to the user behind them.
A personal inbox for users
Live unread counts and localized messages. This part is the optional module; admin alerts always stay.
Email, digests, quiet hours
Users choose immediate email or a daily digest, set quiet hours and manage delivery preferences.
Your own events
A test event ships with the pattern for adding notifications for your product.
Frontend
The account and admin UI, already built, in English and Dutch, light and dark.


Full settings area
Profile and avatars, security, sessions, API keys and privacy.
Finished admin panel
Users, role presets, invitations, impersonation, the audit log and cache controls.
English and Dutch
i18next, with validation and API errors localized too. The pattern takes more languages.
Light, dark and system
OKLch design tokens and no flash of the wrong theme on load.
One typed API client
CSRF header and silent refresh-retry built in, with TanStack Query for server state.
Forms that speak API
React Hook Form and Zod. Server errors map to the field that caused them.
Permission-gated UI
The API permission catalog decides what renders, so the UI never shows what the API would refuse.
Typed file-based routing
TanStack Router with automatic code splitting.
Backend architecture
A mainstream .NET 10 stack, organised by feature, with no framework of its own.
Browse every endpoint in the live API reference ↗
Vertical slices and DDD
Code grouped by feature. Aggregates guard their own rules and raise domain events.
Wolverine CQRS
Commands and queries are plain handler classes, discovered by convention and checked by tests.
Transactional outbox
Integration events leave through an outbox to RabbitMQ, so a crash between save and publish loses nothing.
EF Core on PostgreSQL
Migrations with bundles in the image, a readable .slnx and central package management.
OpenAPI with Scalar
Versioned endpoints, health checks and a live reference with request and response schemas.
Caching, storage, jobs
FusionCache with a Redis backplane, S3-compatible storage on MinIO and TickerQ background jobs.
Observability & ops
You can see what it is doing in production from the first deploy.
Three signals, one pipeline
OpenTelemetry traces, metrics and logs through the collector to Tempo, Prometheus and Loki. One click is one span tree.
Dashboards and alerts
Four Grafana dashboards and six Prometheus alert rules ship provisioned, with Alertmanager routing.
Local stack in one command
docker compose up -d starts Postgres, Redis, RabbitMQ, MinIO, Mailpit and the observability stack.
Migrations before rollout
The API image includes EF migration bundles. Startup migrations are a configuration switch.
CI from the first push
Pull requests build both apps, run the tests and scan packages. Main pushes an image with SBOM and provenance to GHCR.
Production compose file
A production Docker Compose stack that builds and runs the API image beside its services.
Tests & AI tooling
Guardrails that keep the codebase honest, whether a person or an agent makes the change.
Four test projects
Unit, architecture, feature tests against real Postgres via Testcontainers, and API tests.
Architecture tests
Layer boundaries, encapsulation, endpoint access, handler discovery and personal-data completeness all fail the build when broken.
AGENTS.md routers
Per-side instructions point Claude Code, Codex, Copilot and Cursor at the right conventions first.
One shape per feature
Every slice has the same files in the same place, so an agent copies one and renames it.
Docs as Markdown
Every docs page is also served as raw Markdown, ready to paste into a model.
Types end to end
C# and TypeScript catch a wrong guess at compile time instead of in production.
Open-source stack
Every library is mainstream, documented upstream and replaceable. Each name links to its own project.
API and domain
- Wolverine ↗CQRS, messaging and outbox
- ASP.NET Core Identity ↗identity and password store
- EF Core ↗ORM and migrations
- Npgsql ↗PostgreSQL driver for EF Core
- FluentValidation ↗request validation
- fido2-net-lib ↗passkeys (WebAuthn)
- FusionCache ↗HybridCache with Redis backplane
- TickerQ ↗background jobs
- FluentEmail ↗Razor email templates
- Stripe.net ↗billing and subscriptions
- AWS SDK for .NET ↗S3-compatible storage client
- Serilog ↗structured logging
- MCP C# SDK ↗MCP server and Streamable HTTP
- Scalar ↗OpenAPI reference UI
Frontend
- React 19 ↗UI runtime
- Vite ↗build and dev server
- TanStack Router ↗typed file-based routing
- TanStack Query ↗server state
- shadcn/ui ↗components on Radix UI
- Tailwind CSS v4 ↗styling
- React Hook Form ↗forms
- Zod ↗schema validation
- i18next ↗internationalization
- SimpleWebAuthn ↗passkey ceremonies
- Lucide ↗icon set
- Sonner ↗toast notifications
Infrastructure and ops
- PostgreSQL ↗database and outbox
- RabbitMQ ↗integration events
- Redis ↗caching, rate limits and token guards
- MinIO ↗S3-compatible storage
- OpenTelemetry ↗traces, metrics, logs
- Grafana ↗dashboards, Loki and Tempo
- Prometheus ↗metrics and alert rules
- Alertmanager ↗alert grouping and routing
- Apprise ↗notification delivery relay
- Mailpit ↗local email testing
Testing and quality
"On project after project I rebuilt the same foundation. Every time, the first month went to plumbing instead of the product. Slicekit is the foundation I wish I'd had."
I designed the architecture and review every line that ships. Architecture tests enforce the boundaries, feature tests run against a real database, and AI tools only do mechanical work.
Gerwin Kuijntjes · Certified Software Engineer · gerwinkuijntjes.nl
Pay once and the source is yours.
No subscription and no per-seat fees on what you ship. Early-bird pricing for the first 100 customers. The price rises after that. Prices are excl. VAT; VAT is added at checkout.
- 14-day money-back guarantee.
- Email within 14 days for a full refund, no questions asked.
- Lifetime updates.
- Add Slicekit as an upstream remote and merge when you choose.
- Nothing to keep online.
- No runtime, hosted service or license server.
Solo
One developer€149€279one-time
One developer, unlimited products of your own (including paid client work).
- Full source: .NET 10 API, React 19 SPA, landing page
- Auth: passkeys, TOTP, OAuth, sessions, granular permissions
- Finished admin: users, roles, invitations, impersonation, audit log
- MCP server: OAuth consent, scoped access, connected apps
- User inbox: live updates, email, digests, quiet hours
- Admin alerts: Slack, Discord, Apprise, email + inbox
- Stripe billing: subscriptions, trials, plan entitlements
- Event-driven core: CQRS, outbox, RabbitMQ
- Observability: OpenTelemetry, Grafana, alerts
- Infra & CI: Docker Compose, GitHub Actions, tests
- Lifetime updates and full documentation
Team
Up to 5 developers€399€749one-time
Your whole team. Built to resell client work on.
- Everything in Solo, for up to 5 developers
- Use across unlimited client and internal projects
- Priority email support from the author
Neither license lets you resell Slicekit itself as a template. More than five seats? Email me.
Questions before you buy
Something not covered? Mail [email protected].
Can I evaluate it before I buy?
Yes, and you should. The live demo lets you sign in and explore the real admin and account surface: user management, impersonation, audit logs, sessions, passkeys and all the settings screens. The full documentation is public and searchable. The OpenAPI reference lists every endpoint with request and response schemas, and you can run calls against the live demo API. The landing site and the docs you are reading now ship in the box as a static Astro project, so you can judge the code approach from what is already in front of you. Buy when you are confident.
What exactly do I get when I buy?
Access to the private Git repository with the full source: the .NET 10 API, the React 19 SPA, this marketing site and the documentation. You clone it, run scripts/new.sh to rename everything to your product, and it is yours to build on.
Is this production-ready or a proof of concept?
It is a starting point for a production system, not a toy, and it already runs 5+ projects in production. The stack is standard and deliberately boring: .NET 10, EF Core on PostgreSQL, RabbitMQ for messaging. The auth surface ships with breach-checked passwords, rotating refresh tokens, CSRF protection and a hash-chained audit trail. Four test projects cover unit logic, architecture boundaries, feature tests against a real database via Testcontainers and API contracts. GitHub Actions builds a Docker image with an SBOM and a vulnerability scan on every push to main. Nothing in here is a shortcut you will regret at scale.
Is the code AI-generated?
No. Every architectural decision was made by an engineer, every pattern has a reason, and every line was reviewed before it shipped. AI tools are used the way any working developer uses them today: for speed on mechanical tasks. The design, the trade-offs and the accountability are human. The AGENTS.md files and the docs explain the reasoning behind each pattern. The architecture tests enforce the boundaries so the codebase stays honest as it grows.
How is this different from ABP Framework or other .NET boilerplates?
ABP is a framework you build on: it has a proprietary runtime, its own abstractions and an upgrade path you must follow. Slicekit is source code you own. No framework to depend on, no SDK to call, no license server that needs to stay online. You get standard .NET 10, standard EF Core, standard ASP.NET Core Identity. Read it, rename it, delete what you do not need. From that point it is just your code. The patterns are documented and enforced by tests, not locked behind a library.
Do I need to be a .NET expert to use it?
No. Every feature follows the same vertical-slice shape in the same place, the docs walk through adding one, and the per-side AGENTS.md files orient new engineers and AI agents alike. If you know C# and TypeScript, you will be productive quickly.
Can my AI coding assistant work in this codebase?
Yes, by design. Per-side AGENTS.md routers, predictable slices, end-to-end types and architecture tests give tools like Claude Code, Codex, Copilot and Cursor the structure they need to land working changes instead of guessing.
Can users connect AI apps to my product through MCP?
Yes. The template ships a Streamable HTTP MCP server, OAuth consent with PKCE, client setup guides and connected-app management. Users choose read-only, read-and-write or custom access, then can edit permissions or disconnect in settings. New users can sign up during the connection flow. Account tools are included; add your product tools using the same handlers as your API. Production MCP is opt-in, and --no-mcp removes the feature when scaffolding.
Can I run an invite-only product with staff roles?
Yes. Disable public registration and invite users by email with a permission snapshot or a named role preset. Admins can resend or revoke invitations, edit role presets and explicitly apply role changes to existing users. Authorization continues to check individual permissions.
Are personal notifications included as well as admin alerts?
Yes. Users get a personal inbox with live unread counts, localized messages, immediate email or daily digests, quiet hours and delivery preferences. It ships a test event and the pattern for adding your own product events. Operator alerts remain a separate system. Scaffold with --no-notifications to omit personal notifications.
What does the Solo license allow, and when do I need Team?
The Solo license lets one developer build on unlimited products of your own, including paid client work. You cannot resell or redistribute Slicekit itself as a template or starter kit. The Team license covers up to five developers. Need more than five seats or something custom? Email me.
Is it really one-time? Any subscription or per-seat fees?
One-time. No subscription, no recurring fee, and no per-seat metering on the users or revenue of what you ship. You buy the source once and own your copy.
What do 'lifetime updates' include, and how do I pull them in?
You keep access to the repository and every update pushed to it: dependency bumps, new slices, security fixes. Because it is plain Git, you add Slicekit as an upstream remote and merge updates on your own schedule, resolving against your changes like any other branch.
What if Slicekit shuts down or stops being maintained?
Nothing changes for your product. You have the full source: there is no runtime to depend on, no hosted service your app calls, nothing that needs to stay online for your product to work. If updates stop arriving tomorrow, your codebase is unchanged. Even in the worst case you already have everything you bought on your own machine from the first clone.
Does it handle payments and subscriptions?
Yes. Slicekit ships Stripe billing end to end: recurring subscriptions through Stripe Checkout and the Customer Portal, a free trial per plan, and subscription state kept in sync through signed, idempotent webhooks. Plans live in your Stripe dashboard (Stripe is the source of truth), and you map feature keys onto them, boolean flags and numeric limits like "10 API keys on Starter, 100 on Pro", from the admin panel without a deploy. The app resolves and enforces the right entitlement per user. It is also removable as a unit: scaffold with --no-billing (or run scripts/remove-billing.sh) if your product does not charge.
How does billing fit GDPR and tax-retention obligations?
Cleanly, because Stripe is the system of record for invoices and payments, not the app. The export includes a user's subscription state, and account deletion cancels any live Stripe subscription and removes the local billing rows. The Stripe customer and its invoices are deliberately kept: tax and accounting law commonly requires keeping financial records for several years, and GDPR Article 17(3)(b) permits retention where it is a legal obligation. So erasure and your bookkeeping obligations do not conflict, by design.
What if it is not for me?
There is a 14-day money-back guarantee, no questions asked. If Slicekit does not fit your project, email within 14 days of purchase and I refund you in full. The demo, the docs and this page are all public so you can judge most of it before you ever pay.
Notes on the build
Engineering decisions, architecture deep-dives and product updates.
We do not ship MediatR. Here is what we ship instead, and the catch
Why Slicekit builds on Wolverine instead of MediatR-plus-a-bus, the 2024-25 licensing shift that makes it a buying concern, and an honest look at what you give up.
Assume the token is stolen: passkeys, cookies and refresh-token rotation
Start from the worst case, a credential already in the wrong hands, and work backward: passkeys with no stealable secret, HttpOnly cookies XSS cannot read, and family-based refresh-token rotation as a tripwire.
CQRS is not your mediator, and the outbox is not magic
Two misconceptions trip up most CQRS posts: that routing commands through a mediator is CQRS, and that an outbox gives exactly-once delivery. Here is what each pattern actually is, and what Slicekit relies on.