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
.tsxfile, 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.
Links
- Source and writeup
- Equinox Project (MIT)
- JsxCore (MIT)