Full ERP Request for Quotation module. Blazor WASM frontend, .NET 8 Clean Architecture API, Azure OpenAI mixture validation, QuestPDF output, role-based approval workflow.
Domain → Application → Infrastructure/WebApi → BlazorClient. Dependency rule enforced by project references. BlazorClient cannot reference Infrastructure — the compiler prevents it.
Azure OpenAI validates concrete mixture at submission. Returns structured JSON. Soft warnings + hard blocks based on OPC % ratio. temperature=0 for deterministic output.
Draft → PendingApproval → Approved/Rejected → Cancelled. Invalid transitions throw InvalidOperationException. One place to read, one place to change.
VS 2022 17.8+, .NET 8 SDK, SQL Server LocalDB, Azure OpenAI key.
Expect: 8.0.x — if older, download .NET 8 SDK from dot.net
Download the ZIP, extract, and restore NuGet packages.
All 5 projects restored. ~120 packages including MudBlazor, MediatR, QuestPDF, Azure.AI.OpenAI.
Add your Azure OpenAI credentials and DB connection string.
Create and seed the database with 3 users, 15 companies, 30 quotations.
Creates 9 tables and seeds realistic Saudi construction data.
Launch the WebApi project from its directory.
Swagger available at https://localhost:7001/swagger — test all endpoints with JWT auth.
Open a second terminal and launch the WASM frontend.
App at https://localhost:7002 — Login: ahmed / ahmed123 (Salesperson) · khalid / khalid123 (Manager) · admin / admin123