ASP.NET

The Equinox Project, with every view converted to JSX

This is Eduardo Pires' Equinox Project — a DDD/CQRS/Event Sourcing reference application — with its Razor views replaced by TypeScript components rendered by JsxCore. Everything you can click is server-rendered from a .tsx file.

The interesting part was not the JSX. It was the ten things the migration plan got wrong about the codebase, a three-tier authorization model nobody had documented, and three deploy failures that each produced a completely clean startup log. The whole thing is written up here, including the mistakes.


Architecture

Unchanged from the original — this migration only touched the presentation layer.

  • Full architecture with responsibility separation concerns, SOLID and Clean Code
  • DDD Concepts - Layers and Domain Model Pattern
  • CQRS - Command Query Responsibility Segregation
  • Event Sourcing

Technologies

  • .NET 9.0
  • ASP.NET MVC 9.0
  • ASP.NET Identity 9.0
  • EF Core 9.0 — SQLite
  • JsxCore — TSX views, Preact
  • AutoMapper
  • FluentValidator
  • MediatR

What was verified

  • Built with no Node.js and no npm — asserted in CI, in a container where both are absent
  • Every view is a .tsx file, server-rendered
  • Full customer CRUD, antiforgery enforced
  • 0 build warnings — 8 high-severity advisories patched along the way, including CVE-2026-26171

Where the Razor still is

The ASP.NET Identity pages are still Razor, deliberately. Logging in is required to exercise Customer CRUD, and reimplementing authentication in a 1.0.0 view engine was not the point. Two view engines run side by side in this app — that is the honest outcome of the migration, not a workaround.