Build in the shadows. Ship in the light.
Enterprise .NET 10 + React 19 SaaS Platform
Multi-Tenancy · E-commerce · ERP Modules · Clean Architecture
Features · Quick Start · Architecture · Documentation · Contributing
NOIR is a production-ready foundation for building multi-tenant SaaS applications. It provides a complete vertical stack — from database to UI — with built-in e-commerce, ERP modules, and enterprise patterns out of the box.
100% AI-coded. Every line of code, every test, every document in this repository was written using Claude Code. NOIR is proof that AI-assisted development can produce enterprise-grade software — with clean architecture, 13,546 passing tests, and full-stack functionality — when used effectively.
Building a multi-tenant SaaS platform from scratch typically takes months of boilerplate: authentication, tenant isolation, RBAC, audit trails, feature flags, real-time updates, and more — before you even start on business logic. NOIR provides all of this out of the box, plus production-ready e-commerce and ERP modules, so you can focus on what makes your product unique.
Use cases:
- Multi-tenant B2B/B2C SaaS platforms
- E-commerce with order management and payments
- Enterprise portals with HR, CRM, and project management
- Internal tools requiring RBAC and audit trails
flowchart TB
FE["🖥️ React 19 Frontend<br/>56 pages · 98 UIKit components · 41 hooks"]
WEB["⚡ Web Layer — ASP.NET Core 10<br/>53 endpoint groups · JWT · Multi-tenancy · SignalR + SSE · MCP Server"]
APP["📋 Application Layer — CQRS via Wolverine<br/>Commands · Queries · Validators · Domain Events · Audit"]
DOM["🏛️ Domain Layer<br/>Entities · Value Objects · Repository Interfaces · Specifications"]
INF["🔧 Infrastructure<br/>EF Core 10 · SQL Server 2022 · FusionCache · Hangfire · ClosedXML"]
FE -->|REST / SignalR / SSE| WEB
WEB --> APP
APP --> DOM
APP --> INF
INF -->|implements| DOM
NOIR/
├── src/
│ ├── NOIR.Domain/ # Entities, value objects, repository interfaces
│ ├── NOIR.Application/ # CQRS commands/queries, DTOs, validators
│ ├── NOIR.Infrastructure/ # EF Core, external services, persistence
│ └── NOIR.Web/ # API endpoints, middleware, SPA host
│ └── frontend/ # React 19 SPA
│ ├── src/portal-app/ # Feature modules (56 pages)
│ ├── src/uikit/ # 98 UI components + Storybook stories
│ └── src/hooks/ # 41 custom hooks
├── tests/ # 13,546 tests
└── docs/ # Architecture, patterns, module designs
- Clean Architecture with strict layer dependency enforcement (architecture tests)
- CQRS via Wolverine — command/query handlers co-located with validators
- Repository + Specification — reusable, composable query objects
- Soft Delete — data safety by default, hard delete only for GDPR
- Domain Events — decoupled cross-cutting reactions to state changes
- MCP Server — 55 AI-callable tools via Model Context Protocol (Streamable HTTP)
| Feature | Description | |
|---|---|---|
| 🏢 | Multi-Tenancy | Finbuckle-based tenant isolation with per-tenant configs, automatic query filtering |
| 🔐 | Authentication | JWT + refresh token rotation, RBAC, granular resource:action permissions |
| 📜 | Audit Trail | 3-level logging (HTTP → Command → Entity), activity timeline with diff |
| 🎛️ | Feature Management | 35 modules with platform/tenant override, endpoint and command gating |
| ⚡ | Real-Time | SignalR hubs, SSE for job progress, multi-tab session sync |
| 📧 | Database-driven templates with Mustache interpolation, multi-tenant inheritance | |
| 📱 | PWA | Installable on all platforms, offline support, smart caching strategies |
| 🤖 | MCP Server | 55 AI-callable tools + 6 prompts + 7 resources via Model Context Protocol (Streamable HTTP) |
| 📊 | Enterprise DataTable | Drag-reorder columns, density toggle, pinning, resizing, settings persistence |
| 🔍 | UI/UX Audit | Automated WCAG 2.1 AA compliance + 11 custom consistency rules, Playwright-powered |
| Module | Capabilities | |
|---|---|---|
| 📦 | Products | Variants with SKU/price/inventory, hierarchical categories, 13 attribute types, faceted search |
| 🛍️ | Cart & Checkout | Guest + authenticated carts with merge, accordion checkout with session expiry |
| 📋 | Orders | Full lifecycle (Pending → Delivered), cancel/return with inventory rollback |
| 💳 | Payments | Multi-gateway architecture, transaction tracking, refund workflow, webhook verification |
| 🚚 | Shipping | Provider integrations, tracking timeline, carrier management |
| 🏪 | Inventory | Receipt system (stock-in/stock-out), draft/confirmed workflow |
| 👥 | Customers | Profiles, addresses, order history, segmentation groups |
| 🎟️ | Promotions | Discount codes, percentage/fixed, usage limits, date-range scheduling |
| ⭐ | Reviews | Product reviews with moderation workflow (approve/reject) |
| 📊 | Reports | Revenue, orders, inventory, product performance analytics |
| Module | Capabilities | |
|---|---|---|
| 👤 | HR | Employees (auto-code), department tree, 7 tag categories, org chart, bulk ops, import/export |
| 🤝 | CRM | Contacts, companies, lead pipeline Kanban, activities, dashboard widgets |
| 📌 | Project Management | Projects (auto-code), Kanban board, tasks with subtasks/labels/comments |
| Feature | Description | |
|---|---|---|
| ✍️ | Blog CMS | Posts, categories, tags with rich content editor |
| 🎨 | Rich Rendering | Syntax highlighting (Shiki), math (KaTeX), diagrams (Mermaid) |
| 🖼️ | Media Library | Upload, processing, storage (local / Azure Blob / AWS S3) |
| 🔔 | Webhooks | Outbound subscriptions with event filtering and delivery tracking |
|
Backend
|
Frontend
|
See TECH_STACK.md for the complete technology reference.
| Suite | Count | Scope |
|---|---|---|
| Domain Unit Tests | 2,971 | Business rules, entity logic |
| Application Unit Tests | 8,557 | Handlers, validators, DTOs |
| Integration Tests | 1,141 | API endpoints with real database |
| Architecture Tests | 46 | Layer dependency enforcement |
| Frontend Unit Tests | 154 | Hooks, lib utilities (96% coverage) |
| Storybook Browser Tests | 677 | 98 UIKit components in Chromium |
| Total | 13,546 |
dotnet test src/NOIR.sln # Backend (12,715)
cd src/NOIR.Web/frontend && pnpm test:coverage # Frontend unit + coverage
cd src/NOIR.Web/frontend && pnpm test:storybook # Storybook browser tests| Requirement | Version | Download |
|---|---|---|
| .NET SDK | 10.0+ | dotnet.microsoft.com |
| Node.js | 20+ | nodejs.org |
| pnpm | 10+ | pnpm.io |
| SQL Server | 2022 | LocalDB (Windows) or Docker |
git clone https://github.com/NOIR-Solution/NOIR.git && cd NOIR
dotnet build src/NOIR.slnNOIR uses SQL Server 2022. On first run, EF Core applies migrations automatically via DbInitializer. No manual migration step needed.
- Windows: SQL Server LocalDB works out of the box (included with Visual Studio)
- macOS/Linux: Use the SQL Server Docker image
- Connection string:
src/NOIR.Web/appsettings.Development.json— update if using a non-default instance
Use the convenience script (recommended):
./start-dev.sh # Auto-detects OS, frees ports, starts backend + frontendOr run backend and frontend in separate terminals:
# Terminal 1 — Backend (port 4000)
dotnet watch --project src/NOIR.Web
# Terminal 2 — Frontend (port 3000)
cd src/NOIR.Web/frontend && pnpm install && pnpm run dev| Service | URL |
|---|---|
| Frontend | http://localhost:3000 |
| API | http://localhost:4000 |
| API Docs (Scalar) | http://localhost:4000/api/docs |
| MCP Server | http://localhost:4000/api/mcp |
| Storybook | http://localhost:6006 |
| Hangfire Dashboard | http://localhost:4000/hangfire |
Default credentials: admin@noir.local / 123qwe
| Guide | Description |
|---|---|
| Documentation Index | Navigation hub for all docs |
| Knowledge Base | Deep-dive codebase reference |
| Feature Catalog | All features, commands, endpoints |
| MCP Server | AI agent integration — tools, prompts, resources |
| Tech Stack | Technologies with rationale |
| Product Roadmap | Now / Next / Later framework |
|
Backend |
Frontend |
Module Designs: HR · CRM · PM · Calendar · Enterprise DataTable
# Development
dotnet watch --project src/NOIR.Web # Backend with hot reload
cd src/NOIR.Web/frontend && pnpm run dev # Frontend dev server
cd src/NOIR.Web/frontend && pnpm storybook # Component catalog
# Build
dotnet build src/NOIR.sln
cd src/NOIR.Web/frontend && pnpm run build
# Type generation
cd src/NOIR.Web/frontend && pnpm run generate:api
# Database migrations
dotnet ef migrations add <NAME> \
--project src/NOIR.Infrastructure \
--startup-project src/NOIR.Web \
--context ApplicationDbContext \
--output-dir Migrations/AppNOIR welcomes contributions. The project is 100% AI-assisted, but we value high-quality contributions regardless of how they're written.
Before you start:
- Read CONTRIBUTING.md for guidelines and coding standards
- Review CLAUDE.md for architecture rules and patterns
- Explore docs/ for detailed architecture documentation
Workflow:
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Write tests for new functionality
- Ensure all tests pass:
dotnet test src/NOIR.sln && cd src/NOIR.Web/frontend && pnpm run build - Submit a pull request with a clear description
| Issue | Solution |
|---|---|
| Port 3000/4000 already in use | Kill existing processes or use ./start-dev.sh (auto-frees ports) |
| SQL Server connection failed | Check connection string in appsettings.Development.json, ensure LocalDB or Docker is running |
pnpm install fails |
Ensure Node.js 20+ and pnpm 10+ are installed |
| Frontend build type errors | Run pnpm run generate:api to sync types from backend |
| First build is slow | Normal — NuGet restore + frontend dependency install on first run |
Licensed under Apache License 2.0 — see LICENSE for details.
NOIR builds on these excellent open-source projects:
- Clean Architecture by Jason Taylor
- Wolverine — CQRS messaging framework
- shadcn/ui — React component library
- Finbuckle.MultiTenant — Multi-tenancy framework
- Claude Code by Anthropic — AI-powered development
Build in the shadows. Ship in the light.