# ViewData (Website Templates) ViewData is the **only** allowed input type for Templates in `apps/website`. ## 1) Definition ViewData is a JSON-serializable, template-ready data structure: - primitives (strings/numbers/booleans) - arrays and plain objects - `null` for missing values ## 2) What ViewData is NOT ViewData is not: - a Page DTO (raw transport) - a ViewModel (client-only class) - a Display Object instance ## 3) Construction rules ViewData MUST be created in client code: 1) Initial SSR-safe render: `ViewData = fromDTO(PageDTO)` 2) Post-hydration render: `ViewData = fromViewModel(ViewModel)` Templates MUST NOT compute derived values. ## 4) Determinism rules Any formatting used to produce ViewData MUST be deterministic. Forbidden anywhere in formatting code paths: - `Intl.*` - `Date.toLocaleString()` / `Date.toLocaleDateString()` / `Date.toLocaleTimeString()` Reason: SSR and browser outputs can differ. ## 5) Relationship to Display Objects Display Objects are used to implement formatting/mapping, but their instances MUST NOT be stored inside ViewData. Only primitive outputs produced by Display Objects may appear in ViewData.