---
key: spa.spa-rebuild-decision
title: 2026-06 — UI rebuild is a React SPA (ChicoryTV) on the REST API, not a Blazor reskin
status: active
since: 2026-06
supersedes: none
superseded-by: none
rule: The UI is a full React SPA (ChicoryTV) rebuild over the REST API, not a Blazor Server reskin.
signals: 'Blazor removal phases (a)/(b), root-flip, legacy-route redirects · paths: `ErsatzTV/LegacyUiRedirects.cs`, `docs/blazor-route-parity.md` · issues: #59, #91, #148'
mechanics: '`docs/blazor-route-parity.md`'
---

#59 committed to a full SPA rebuild rather than reskinning Blazor Server pages. Blazor removal is
split into two phases under #91: **(a)** root-flip (SPA becomes `/`) + legacy-route redirects —
DONE, merged via PR #148 (`ErsatzTV/LegacyUiRedirects.cs`, `feat/91-cutover` → main). **(b)** full
Blazor removal — gated on every route having an SPA equivalent; tracked route-by-route in
`docs/blazor-route-parity.md`.
