This commit is contained in:
2026-01-11 14:04:48 +01:00
parent 971aa7288b
commit 2f0b83f030
10 changed files with 436 additions and 173 deletions

View File

@@ -4,6 +4,8 @@ This document defines the only allowed presentation architecture for `apps/websi
It is **website-only** and does not change `apps/api` or `core` architecture.
Authoritative contract: [`WEBSITE_CONTRACT.md`](docs/architecture/website/WEBSITE_CONTRACT.md:1).
## 1) Core rule: API owns business truth
- `apps/api` is the only source of truth for business rules and canonical filtering/sorting.
@@ -42,6 +44,9 @@ It is **website-only** and does not change `apps/api` or `core` architecture.
- Contains only values ready to render (mostly strings/numbers).
- Built from Page DTO (initial render) and from ViewModel (post-hydration).
The mapping between Page DTO, ViewModel, and ViewData is performed by Presenters.
See [`PRESENTERS.md`](docs/architecture/website/PRESENTERS.md:1).
## 3) Required per-route structure
Every route MUST follow:
@@ -50,6 +55,9 @@ Every route MUST follow:
2) `*PageClient.tsx` (client): builds ViewData and renders Template
3) `*Template.tsx` (pure UI): renders ViewData only
All writes enter through Server Actions.
See [`FORM_SUBMISSION.md`](docs/architecture/website/FORM_SUBMISSION.md:1).
## 4) Authoritative specification
This document is an entry point only.
@@ -58,3 +66,6 @@ The authoritative, test-enforced spec lives at:
- [plans/nextjs-rsc-viewmodels-concept.md](plans/nextjs-rsc-viewmodels-concept.md:1)
Final contract:
- [`WEBSITE_CONTRACT.md`](docs/architecture/website/WEBSITE_CONTRACT.md:1)