# Website Page Queries (Server)

This document defines the only allowed server-side data fetching shape for `apps/website` routes.

## 1) Purpose

Page Queries are server-side composition classes that:

- call services that call `apps/api`
- assemble a Page DTO
- return an explicit result describing route outcome

They do not implement business rules.

## 2) Result type (no null)

Page Queries MUST return a discriminated union (`PageQueryResult`):

- `ok` with `{ dto }`
- `notFound`
- `redirect` with `{ to }`
- `error` with `{ errorId }`

Pages MUST switch on this result and call:

- `notFound()` for `notFound`
- `redirect()` for `redirect`

## 3) Forbidden responsibilities

Page Queries MUST NOT:

- format values for display
- sort/filter (canonical or view-only)
- instantiate ViewModels
- instantiate Display Objects

If sorting/filtering is needed, it MUST be added to `apps/api`.

