1.6 KiB
1.6 KiB
Website RSC Presentation Architecture (Strict)
This document defines the only allowed presentation architecture for apps/website (Next.js App Router).
It is website-only and does not change apps/api or core architecture.
1) Core rule: API owns business truth
apps/apiis the only source of truth for business rules and canonical filtering/sorting.apps/websiteis presentation infrastructure: composition, routing, caching, and rendering.
2) The three website presentation data types
2.1 Page DTO
Purpose: server-to-client payload.
Rules:
- JSON-serializable only.
- Contains raw values only (ISO date strings, numbers, codes).
- MUST NOT contain class instances.
2.2 ViewModel
Purpose: client-only presentation model.
Rules:
- Class-based.
- Instantiated only in
'use client'modules. - Composes Display Objects.
- NEVER passed into Templates.
2.3 ViewData
Purpose: Template input.
Rules:
- JSON-serializable only.
- Contains only values ready to render (mostly strings/numbers).
- Built from Page DTO (initial render) and from ViewModel (post-hydration).
3) Required per-route structure
Every route MUST follow:
page.tsx(server): calls a PageQuery and passes Page DTO*PageClient.tsx(client): builds ViewData and renders Template*Template.tsx(pure UI): renders ViewData only
4) Authoritative specification
This document is an entry point only.
The authoritative, test-enforced spec lives at: