80 lines
1.3 KiB
Markdown
80 lines
1.3 KiB
Markdown
# Website Data Flow (Strict)
|
|
|
|
This document defines the **apps/website** data flow.
|
|
|
|
Authoritative contract: [`docs/architecture/website/WEBSITE_CONTRACT.md`](docs/architecture/website/WEBSITE_CONTRACT.md:1).
|
|
|
|
Website scope:
|
|
|
|
- `apps/website/**`
|
|
|
|
## 1) Website role
|
|
|
|
The website is a **delivery layer**.
|
|
|
|
It renders truth from the API and forwards user intent to the API.
|
|
|
|
## 2) Read flow
|
|
|
|
### Server Components (RSC)
|
|
```text
|
|
RSC page.tsx
|
|
↓
|
|
PageQuery
|
|
↓
|
|
API client (infra)
|
|
↓
|
|
API Transport DTO
|
|
↓
|
|
ViewData Builder (lib/builders/view-data/)
|
|
↓
|
|
ViewData
|
|
↓
|
|
Template
|
|
```
|
|
|
|
### Client Components
|
|
```text
|
|
Client Component
|
|
↓
|
|
API client (useEffect)
|
|
↓
|
|
API Transport DTO
|
|
↓
|
|
ViewModel Builder (lib/builders/view-models/)
|
|
↓
|
|
ViewModel (lib/view-models/)
|
|
↓
|
|
Client State (useState)
|
|
↓
|
|
Template
|
|
```
|
|
|
|
## 3) Write flow
|
|
|
|
All writes enter through **Server Actions**.
|
|
|
|
```text
|
|
User intent
|
|
↓
|
|
Server Action
|
|
↓
|
|
Command Model / Request DTO
|
|
↓
|
|
API
|
|
↓
|
|
Revalidation
|
|
↓
|
|
RSC reload
|
|
```
|
|
|
|
## 4) Non-negotiable rules
|
|
|
|
1. Templates accept ViewData only.
|
|
2. Page Queries do not format.
|
|
3. ViewData Builders transform API DTO → ViewData (RSC).
|
|
4. ViewModel Builders transform API DTO → ViewModel (Client).
|
|
5. Builders do not call the API.
|
|
6. Client state is UI-only.
|
|
|