Skip to content

Technology Stack Summary

A comprehensive reference of every technology used in the Microtec platform, organized by layer. For deeper per-technology details, see the Technology Catalog.


Backend (.NET 8)

TechnologyVersionRoleNotes
.NET8.0 (LTS)Runtime and SDKAll microservices target net8.0
ASP.NET Core8.0Web frameworkMinimal API + controller-based APIs
MediatR12.xCQRS mediatorDispatches commands and queries through pipeline behaviours
FluentValidation11.xInput validationAll request DTOs have a corresponding validator
Entity Framework Core8.xORMSQL Server provider; migrations per service
AutoMapper13.xObject mappingDTO ↔ Domain entity projection
Hangfire1.8.xBackground jobsScheduled tasks, ZATCA retries; SQL Server job store
YARP2.xReverse proxyUsed in Gateway alongside Ocelot
Ocelot23.xAPI GatewayRoute configuration, auth delegation
MassTransit8.xMessage bus abstractionOver Azure Service Bus; publishers and consumers
QuestPDF2024.xPDF generationReport and invoice PDF rendering
ClosedXML0.102.xExcel generationExport functionality across modules
Polly8.xResilienceRetry, circuit breaker for HTTP clients
Serilog3.xStructured loggingSinks: Seq, Application Insights
OpenTelemetry SDK1.7.xDistributed tracingOTLP exporter → Application Insights / Seq
.NET AspirePreviewLocal orchestrationUsed in Gateway/ for local multi-service dev
xUnit2.7.xUnit testingAll backend test projects
Moq4.xMockingUsed in unit tests

Key Framework Conventions

Service Registration

Services do not call services.AddScoped<IFoo, Foo>() manually. Instead, any class implementing IScopedService, ITransientService, or ISingletonService is auto-registered by a platform startup convention.

MediatR Pipeline

Every command/query passes through three pipeline behaviours in order:

  1. ValidationBehaviour<TRequest, TResponse> — runs FluentValidation; throws if invalid
  2. WorkflowBehavior<TRequest, TResponse> — triggers business workflow hooks
  3. RequestLoggingPipelineBehavior<TRequest, TResponse> — logs request metadata to Serilog

Frontend (Angular)

TechnologyVersionRoleNotes
Angular17 (current), migrating to 20SPA frameworkNgModule-based (standalone: false)
Nx17.xMonorepo toolingBuild, lint, test orchestration for all 13 apps + 4 libs
Webpack5.xModule bundlerWith Module Federation plugin
@angular-architects/module-federation17.xMFE wiringConfigures host and remote apps
NgRx17.xState managementStore, Effects, Selectors per feature module
PrimeNG17.xComponent libraryData tables, dialogs, forms, charts
Bootstrap5.xCSS frameworkUtility classes and grid
SCSSStylingPer-component scoped styles
@ngx-translate15.xi18nArabic (ar) and English (en)
Angular CDK17.xUI primitivesOverlay, drag-drop, virtual scroll
Chart.js / ngx-chartsData visualizationDashboard charts
keycloak-angular14.xKeycloak OIDC clientWraps keycloak-js for Angular apps

Build Configurations

Config NamePurpose
developmentLocal dev, source maps enabled, mock data allowed
stageStage environment, microtecstage.com URLs
cloudGeneric cloud target (non-prod)
uatUAT environment, microtec-uat.com URLs
preprodPre-production environment
prodProduction, onlinemicrotec.com.sa URLs

Mobile (Flutter)

TechnologyVersionRoleNotes
Flutter3.xCross-platform UI frameworkiOS and Android targets
Dart3.xLanguageNull-safe Dart throughout
Melos3.xMonorepo toolingManages multi-package Flutter workspaces
Dio5.xHTTP clientREST API calls to backend services
Riverpod / BLoCState managementPer-app choice (BLoC preferred in BO app)
go_router7.xNavigationDeclarative routing in all apps
freezed2.xImmutable modelsCode generation for DTOs
json_serializable6.xJSON serializationGenerated from annotations
firebase_messagingPush notificationsFCM for mobile push
MobileDesignSysteminternalUI componentsShared design system package (submodule)
MobileAPIClientsinternalAPI clientsAuto-generated from OpenAPI specs (submodule)
MobileSharedCompinternalShared utilitiesCommon widgets and services (submodule)

Mobile Apps

AppRepositoryDescription
BusinessOwner (BO)BoMobileApp/Tenant admin mobile app
ERP MobileERPMobileApps/ERP end-user mobile app
Van SalesVanSalesMobileApp/Field sales representative app

Infrastructure & Cloud

TechnologyRoleNotes
Azure Container AppsMicroservice hostingServerless containers with KEDA autoscaling
Azure Container Apps EnvironmentCAE2 per env: public (internet) + private (VNet)
Azure BicepIaCAll infra defined in Devops/azure/infrastructure/
Azure Front DoorCDN + WAF + global LBEntry point for all environments
Azure Container Registry (ACR)Docker registryPer-environment private registry
Azure Service BusMessage brokerReplaced RabbitMQ; Standard tier for dev, Premium for prod
Azure Redis CacheDistributed cacheSession cache, query cache; SSL enabled
Azure SQL ServerRelational databaseShared SQL VM (mic-backend-shared-sql-rg) for non-prod; managed for prod
Azure Key VaultSecrets managementAll connection strings and keys; keyvaultref: in CAE
Azure Static Web Apps (SWA)Frontend hostingEach Angular app = one SWA per env
Azure Monitor / App InsightsTelemetryAPM, distributed tracing, log analytics
Azure Managed IdentityIAMACR pull, Key Vault access — no stored credentials
Azure Virtual NetworkNetwork isolationOne VNet per env; Private Endpoints for all PaaS
Azure Private EndpointPaaS isolationSQL, Redis, ASB, Key Vault, ACR all on private IPs
Azure NSGNetwork securityInbound/outbound rules per subnet

Security & DevSecOps

ToolStagePurpose
GitleaksPre-buildSecret scanning in git history and current diff
SonarCloudBuildSAST — code quality, security hotspots, coverage gates
TrivyPost-buildContainer image vulnerability scanning (OS + libs)
OWASP Dependency-Check (DC)BuildSCA — third-party library CVE scanning
HadolintBuildDockerfile linting (best practices)
SyftPost-buildSBOM generation (CycloneDX format)
OWASP ZAPPost-deployDAST — active scan against running stage/UAT
Azure OpenAI (GPT-4)Post-buildAI-assisted code review — diff analysis
KeycloakRuntimeSSO, OIDC, RBAC, session management
mTLSRuntimeTransparent mutual TLS inside private CAE
Azure WAFRuntimeWeb Application Firewall rules on AFD

Observability Stack

ToolLayerPurpose
SerilogAppStructured log emission (JSON format)
SeqInfrastructureCentralized log aggregation and search (port 1234 locally)
OpenTelemetryApp + InfrastructureDistributed traces and metrics (OTLP: 4317/4318)
Application InsightsCloudAPM, dependency tracking, live metrics
Health ChecksApp/health endpoints on every service; probed by CAE
Azure Monitor AlertsCloudThreshold-based and anomaly alerts to on-call

Developer Tooling

ToolPurpose
Docker / Docker ComposeLocal dev (dev/ directory) and CI builds
Azure CLIInfrastructure automation and pipeline scripts
PowerShellBuild and deployment scripts (cross-platform)
Bash / ZshCI/CD shell scripts on build agents
Azure DevOps CLIPipeline management from CI
JetBrains Rider / VS CodeIDE options for backend development
Visual Studio CodeFrontend and DevOps configuration
Postman / BrunoAPI testing and documentation

Shared NuGet Packages (16 Packages)

All packages are published to the Microtec private Azure DevOps NuGet feed.

PackagePurpose
Microtec.DomainBase domain entities, value objects, IMultiTenantEntity
Microtec.PersistenceEF Core base context, query filters, unit of work
Microtec.Web.CoreAuth middleware, JWT validation, IScopedService conventions
Microtec.Web.HostingApp startup, Serilog, OpenTelemetry wiring
Microtec.Application.CoreMediatR pipeline behaviours, base command/query types
Microtec.PublicApi.AppsPortalHTTP client for ERP AppsPortal inter-service calls
Microtec.PublicApi.BusinessOwnersHTTP client for BusinessOwners service
Microtec.PublicApi.NotificationHTTP client for Notification service
Microtec.PublicApi.AttachmentHTTP client for Attachment service
Microtec.PublicApi.WorkflowHTTP client for Workflow service
Microtec.ReportingQuestPDF/ClosedXML report base classes
Microtec.ZatcaZATCA e-invoicing SDK and helpers
Microtec.EtaETA e-invoicing SDK and helpers
Microtec.ImportData import framework (Excel/CSV parsing)
Microtec.TestingTest base classes, EF Core in-memory helpers
Microtec.CachingRedis cache abstraction and helpers

NuGet Setup

Before building the backend locally, you must authenticate with the private NuGet feed. See NuGet Setup for the one-time configuration steps.

Internal Documentation — Microtec Platform Team