> ## 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/.env.local`; Next.js не читает корень `.env`. `/dashboard` в поддельном режиме по умолчанию представляет собой демонстрацию без базы данных; `/auth` требуется перенесенная база данных.

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

1. Откройте VS Code в корне репозитория и попросите своего агента кодирования создать `apps/web/app/reports/page.tsx` и `apps/web/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/web/before-you-start.md)

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

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

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


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

Добавьте страницу под `apps/web/app/`. Начните с информационной панели или маршрута содержимого, чтобы повторно использовать разрешение сеанса и активной рабочей области. Маршрут существует, если его папка содержит `page.tsx`; используйте серверный компонент для защищенного чтения.

```
apps/web/app/reports/page.tsx
apps/web/src/reports.ts
.ai/apps/web/app/reports/page.md
.ai/apps/web/src/reports.md
```


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

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

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


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

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

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

[Проверка прав](https://supastack.dev/ru/docs/web/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 action, который разрешает сессию, workspace и entitlement именно в этом порядке. Валидируйте ввод zod-схемой, выполняйте мутацию через репозиторий и возвращайте типизированный результат, который интерфейс может отрисовать.

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


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

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


## Вперёд

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