> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Создайте первую функцию

Сквозной путь от схемы до выпущенного экрана.

## Прохождение для начинающих

Предварительные требования: прочтите два приведенных ниже руководства для начинающих, завершите локальную веб-настройку и откройте этот монорепозиторий в корневой папке вашего редактора. Веб-настройки принадлежат `apps/web-tanstack/.env.local`; TanStack Start не читает корень `.env`. `/dashboard` в поддельном режиме по умолчанию представляет собой демонстрацию без базы данных; `/auth` требуется перенесенная база данных.

Вкратце: рабочее пространство — это отдельные пользователи, данные и настройки одной команды. Сервер является доверенным сервером; не допускайте попадания ключей провайдера в код браузера и телефона. Миграция — это изменение версии базы данных, при котором создаются или обновляются таблицы. Модель ИИ — это механизм, который отвечает; Каталог моделей — это список доступных идентификаторов моделей и цен на сервере. Поставщик — это внешняя служба, такая как служба искусственного интеллекта, электронной почты или службы выставления счетов. Право — это грант, который позволяет рабочей области использовать функцию. Вебхук — это сообщение, которое одна служба отправляет на URL другой службы.

1. Откройте VS Code в корне репозитория и попросите своего агента кодирования создать `apps/web-tanstack/src/routes/reports.tsx` и `packages/web-core/src/reports.ts`. Дайте ему поля отчета и разрешенные роли; требуют проверки членства на стороне сервера и запроса, отфильтрованного по `workspaceId`.

2. Откройте `/reports` как вошедший в систему участник и убедитесь, что отображаются записи рабочей области.

3. Попробуйте выйти из системы и использовать учетную запись второго рабочего пространства; если кто-либо из них может читать записи, остановитесь и исправьте проверку сервера.

Для пользовательского кода начните с предоставленного `prompts/README.md` и скопируйте ближайшее приглашение: `prompts/new-app-screen.md` для экрана приложения или `prompts/new-landing-page.md` для общедоступной страницы. Для работы с сервером, базой данных или провайдером дайте своему агенту кодирования задание из этого руководства и попросите его прочитать `AGENTS.md`, `.ai/PROJECT_CONTEXT.md` и соответствующие зеркала `.ai/`; проверьте точные исходные файлы, указанные здесь; список файлов и проверки перед редактированием; сохранять права собственности на рабочую область и секреты, доступные только серверу; и покажу вам разницу. Сообщите ему желаемое поведение, поля ввода и вывода, разрешенные роли, ожидаемые успехи и ошибки, а также тестовую учетную запись, поставщика или устройство. Используйте выборочные значения; никогда не вставляйте настоящий секрет.

[Прежде чем начать](https://supastack.dev/ru/docs/tanstack/before-you-start.md)

[Основные сведения о терминале](https://supastack.dev/ru/docs/tanstack/terminal-basics.md)

[Локальная веб-настройка](https://supastack.dev/ru/docs/tanstack/ship-in-5-minutes.md)

[Подсказки агента и память проекта](https://supastack.dev/ru/docs/tanstack/agents.md)


## Создать маршрут

Добавьте файл маршрута в `apps/web-tanstack/src/routes/` — он вызывает `createFileRoute`, чтобы опубликовать страницу. Начните с информационной панели или маршрута содержимого, чтобы повторно использовать разрешение сессии и активной рабочей области; общие исходники страниц (`page.load.ts` и `page.view.tsx`) находятся в `packages/web-core/src/pages/` и монтируются через сгенерированные привязки. Используйте loader маршрута для защищенного чтения.

```
apps/web-tanstack/src/routes/reports.tsx
packages/web-core/src/reports.ts
.ai/apps/web-tanstack/src/routes/reports.md
.ai/packages/web-core/src/reports.md
```


## Разрешение владения на сервере

Прочтите вошедшее в систему удостоверение и активную рабочую область с помощью существующих помощников аутентификации/рабочей области. Подтвердите членство перед загрузкой записей. Фильтровать каждый запрос по разрешенному `workspaceId`; никогда не берите идентификатор владельца из выходных данных формы или модели.

Проверьте разрешения владельца/администратора для действий по управлению. Если функция оплачена, проверьте ее права на границе чтения или действия, прежде чем возвращать защищенные данные; скрытая кнопка не обеспечивает доступ.


## Проверка доступа и восстановления

Проверьте анонимный доступ, допустимого участника, участника другой рабочей области, отозванный сеанс и требуемую роль. Добавьте пустые состояния и состояния неудачной загрузки с помощью действия восстановления. Уберите этот маршрут из общедоступной карты сайта и добавьте его префикс в файл robots disallows.

[Изоляция рабочей области](https://supastack.dev/ru/docs/tanstack/security.md)

[Проверка прав](https://supastack.dev/ru/docs/tanstack/setup-payments.md)


## Смоделируйте запись

Каждая продуктовая запись начинается со схемы базы данных. Добавьте таблицу в packages/db с колонкой workspaceId, сгенерируйте миграцию и напишите репозиторные хелперы, которые разрешают workspace перед чтением или записью.

```
// packages/db/src/schema.ts
export const ideas = pgTable("idea", {
  id: uuid().primaryKey(),
  workspaceId: uuid().notNull().references(() => workspaces.id),
  title: text().notNull(),
  createdAt: timestamp().defaultNow(),
});

corepack pnpm --filter @supastack/db db:generate
```


## Авторизуйте действие

Создайте server function, которая разрешает сессию, workspace и entitlement именно в этом порядке, — обработчик находится в `packages/web-core` и достигает приложения через привязку `createServerFn` в `apps/web-tanstack/src/actions/` (перегенерируйте с `corepack pnpm gen:actions`). Валидируйте ввод zod-схемой, выполняйте мутацию через репозиторий и возвращайте типизированный результат, который интерфейс может отрисовать.

Порядок важен: мутация, пишущая до проверки владения workspace, уже пересекла границу. Выводите владение на сервере — никогда не доверяйте workspace id, присланному браузером.


## Соберите поверхность

Собирайте страницу из общих компонентов и токенов — blocks кита и примитивы ui-web покрывают типовые паттерны. Обрабатывайте состояния загрузки, ошибки и пустоты; функция, рендерящая только счастливый путь, не завершена.


## Вперёд

[Создавайте вместе с кодинг-агентом](https://supastack.dev/ru/docs/tanstack/agents.md)
