Proven foundations.
Independent products.

A software factory for .NET SaaS: shared, versioned kits for tenancy, identity, billing and operations, and products that ship on their own schedule. What one product learns, every product can adopt. Below is the real floor plan behind the products I run.

Products
3 live · 2 in build
Shared packages
19 · one version
First commit to deployed dev environment
~2 days
Lockstep upgrades
0

Isometric floor plan of the MicroSaaS software factory: kits, shared utilities, people, the product lifecycle and the products at the docks

Tap a block, or pick one below.

How the factory works

Four rules, each one checkable.

A factory is only as good as the rules that keep it honest. These are the ones every product and every kit is held to.

01

Share what must not diverge

Security, legal requirements, operations and API contracts live in kits. Look, feel and domain are copied, then owned by each product.

02

Pin exactly

Every package and kit is pinned to an exact version. Every release says what a product must do to upgrade, and each product upgrades when its own pipeline is green.

03

Harvest, don’t design ahead

A kit starts as code already running in a product, ported faithfully and proved equal before anything is cleaned up.

04

People decide, machines verify

Scope, go-live and stopping are human calls. Builds, tests, drift and restores are checked automatically, with evidence.

The kits

Everything before your first feature.

Modular .NET packages, released together under one version, plus three kits versioned on their own: identity, design system and delivery. Each has a changelog that says exactly what an upgrade asks of you.

Multi-tenancy

Organization-as-tenant resolution, membership checks and a lifecycle gate for suspended or deleted tenants.

Onboarding & organizations

From first login to a working organization with members and invites, plus a hook where the product checks its seat quota before an invite is created.

Onboarding.*Organizations.*
How it works: Onboarding & organizations

Entitlements & usage

Feature flags, quotas and metered usage per organization, with access denied by default.

Billing

Stripe and Lemon Squeezy behind one abstraction, with idempotent webhook handling that skips stale events.

Billing.Providers.*
How it works: Billing

Admin API

System-scope operations across organizations behind one gate, with refusals as RFC 9457 problem details carrying machine-readable codes.

Identity kit

A Keycloak base image pinned by digest, realm provisioning, and no token before the terms of use are accepted.

setuprequire-terms
How it works: Identity kit

Design-system kit

The interface core as an npm package: tokens, React components and lint rules. A product sets only its twelve brand colour roles; the kit checks ten of their colour pairs for contrast and keeps the interactive colours apart from the state colours.

brand.cssassertBrand
How it works: Design-system kit

Delivery kit

Seven GitLab CI/CD components and an ops image: tests with dependency scans, a secret scan, image builds, a deploy that backs up the database first and ends in a health gate, and a restore test into a throwaway container.

deployrestore-test
How it works: Delivery kit

FAQ

Short answers.

What is MicroSaaS Toolkit?
A software factory for .NET SaaS. It is a set of shared, versioned kits (19 NuGet packages for multi-tenancy, organizations and invites, onboarding, entitlements, usage metering, billing and an admin API, plus a Keycloak identity kit, a design-system kit and a delivery kit of CI/CD components) and the rules for running several independent products on top of them.
Which products run on it?
Three products are live: Gostly, guest messaging for short-term rental hosts; MojRazpis, alerts for Slovenian public tenders; and SnapMind, an AI memory for ideas, links and screenshots. Two more, Reputo and Leadgener, are in build.
How do products upgrade when a kit changes?
Every product pins an exact version, and every release says what a product must do to upgrade. Each product takes the upgrade when its own pipeline is green, so nothing upgrades in lockstep. A product registry tracks each one until production runs the new version.
How long does it take to start a new product?
About two days from the first commit to a deployed development environment with login: Leadgener took 45 hours, 13.5 of them a manual deploy job waiting overnight. A new repository starts from the reference product’s skeleton, pipeline and deploy, and pins the shared kits.
Which billing providers are supported?
Stripe and Lemon Squeezy, behind one abstraction, with idempotent webhook handling that skips stale events.
Can I hire you to help?
Yes. I offer architecture audits and reviews (tenancy, data isolation, upgrade paths), custom module development to the same release discipline, and infrastructure and CI/CD work. Write to jure.hrastnik@gmail.com.

Consulting

Work with the architect behind the factory.

I help teams adopt the toolkit, shape the architecture around their domain, or build the first version of a product on the same foundations.

  • Architecture audit & review
    Tenancy, data isolation, upgrade paths.
  • Custom module development
    Built to the same release discipline.
  • Infrastructure & CI/CD
    Pipelines, deploys, monitoring, backups.
Get in touch
Black-and-white portrait, arms crossed
Architect & ownerJure Hrastnik