BlazorForge

This application — the BlazorForge template and marketing site. Live at blazorforge.nz

⚒️

You are looking at it — this is BlazorForge

About the Project

BlazorForge is both a marketing site and a production-ready starter template for Blazor Server applications. It embodies Vertical Slice Architecture, giving teams a clean, structured foundation that avoids the tangled layering of traditional N-tier projects.

Every feature in this site demonstrates the exact patterns used in client projects — making it a living reference for the work we deliver.

What's Included in the Template

  • Full ASP.NET Core Identity — login, register, 2FA (authenticator + SMS), passkeys
  • MediatR CQRS pipeline with AutoMapper and FluentValidation
  • Admin area — users, roles, logs, parameters, encryption
  • IP blacklist with AbuseIPDB enrichment and brute-force detection
  • Visit logging, auth logging, and KPI dashboard
  • Stripe payment integration (checkout sessions + webhooks)
  • Xero accounting integration (OAuth2, contacts, invoices)
  • Email providers: Mock, SMTP, MailKit, TNZ
  • SMS providers: Mock, SmsEveryone, TNZ
  • AES-256-GCM config encryption with admin UI
  • Configurable timezone display and culture
  • Reusable server-side pagination component
  • Bootstrap 5 with custom forge theme

Architecture

  • Vertical Slice Architecture — features under Features/
  • Each slice owns its command, handler, validator, DTO, and page
  • Zero cross-feature dependencies
  • MediatR pipeline behaviours for cross-cutting concerns
  • AppParameters table for database-backed runtime configuration
  • IHostedService seeders for default parameter values
  • Fire-and-forget patterns via IServiceScopeFactory
  • RequestSecurityMiddleware for IP blocking and scanner defence

Technology Stack

.NET 10 Blazor Server SQL Server ASP.NET Core Identity MediatR FluentValidation AutoMapper Stripe Xero MailKit FIDO2 Passkeys Bootstrap 5
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.