# 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.