Overview
StarterKit is a modular application platform built around a host application, a dedicated identity service, reusable business mods, and shared libraries.
From a deployment perspective, the system consists of two main applications:
- App - the primary business application. It contains the main API, hosts the React web application, and acts as the composition root for product-specific behavior.
- Identity - a dedicated authentication service responsible for OpenID Connect authentication, account management, and service-to-service authentication.
From a code architecture perspective, StarterKit also contains two reusable package families:
- Mods - installable business capabilities, such as billing, scheduling, tasks, assessments, and coverages.
- Libs - stable technical and functional libraries shared by applications and mods.
System Shape
StarterKit deliberately combines a small number of deployable applications with a larger number of reusable packages. The deployable applications define runtime boundaries, while mods and libs define code reuse, extension points, and architectural composition.
The App application is the main host. It owns product-specific composition: authorization rules, validation rules, GraphQL schema extensions, UI composition, routing, and integration decisions. Mods plug into this host to provide reusable business capabilities. Libs provide stable infrastructure and cross-cutting functionality used by both the host and mods.
Identity remains separate because authentication has a clearly isolated responsibility, well-known protocol boundaries, and independent deployment needs.
Architecture Map
App
[ASP.NET Core API; React]
The App is the primary business application and the main composition root of StarterKit. It is a modular monolith from a business-logic perspective: most product behavior runs inside one application boundary and can participate in the same transaction model.
The App API follows Clean Architecture principles. It separates API concerns, user interactions, domain models, infrastructure implementations, and migrations. It also acts as the host application for mod-* packages by registering their services, adapting their behavior through decorators, extending their GraphQL schemas, and composing their frontend widgets into product-specific pages.
The App Main frontend is a React and TypeScript application built with Vite and Redux Toolkit Query. Its code is organized as a composition shell, local feature packages, and external mod packages. Pages compose reusable widgets into navigable product workflows, while API modules mirror the backend REST and GraphQL split.
Links:
Identity
[ASP.NET Core API; OpenIddict; Preact]
Identity is responsible for authentication and account-management workflows: sign in, sign out, MFA, password reset, account activation/deactivation, locking/unlocking, token issuing, session management, and service-to-service authentication.
Identity is intentionally isolated from the main App because authentication has a clear technical boundary and can be deployed independently. The Identity client is implemented with Preact and TypeScript.
Links:
Mods
[NuGet packages; NPM packages]
Mods are reusable business capabilities designed as plugin-like packages. A mod should represent a single bounded context with its own language, model, and business rules. Examples include mod-schedule, mod-tasks, mod-assessments, mod-billing, and mod-coverages.
Unlike independently deployed microservices, mods execute inside the host application process and can participate in the same transaction as the host. This gives the App stronger extension mechanisms: interactor decorators for authorization and validation, same-transaction reactions to model changes, Hot Chocolate GraphQL schema extensions, client-side GraphQL model extensions, and UI composition through @webinex/flexy.
Mods are intentionally designed to be easy to adapt and evolve. They provide reusable defaults, while the host application decides how those capabilities are authorized, validated, extended, and presented in a specific product installation.
Links:
Libs
[NuGet packages; NPM packages]
The src/libs folder contains shared libraries that solve technical and functional needs across the platform. These libraries may be backend packages, frontend packages, or paired packages that support both sides of the stack.
Examples include API helpers, domain model abstractions, Entity Framework extensions, Hot Chocolate extensions, messaging, telemetry, caching, sequencing, bulk operations, email integrations, e-signature support, base TypeScript utilities, and reusable UI components.
Libs have a different change profile from mods. They are expected to be stable, broadly reusable, and rarely changed. A lib should provide a clear, durable abstraction or technical capability that multiple applications or mods can depend on safely.
Mods, by contrast, are intentionally designed for business-level adaptation. Their models, interactors, API surface, and UI widgets may evolve more often as product workflows change. In short: libs provide stable foundations; mods provide adaptable business capabilities.
Links:
No dedicated design-principles page exists for libs yet.