Выпуск приложения
Целевая схема: Vercel для Next.js, Supabase для Auth/PostgreSQL/Storage,
Cloudflare для DNS домена foliovera.app.
В Vercel корень приложения — apps/web. Установка выполняется из monorepo с
pnpm и lockfile. Переменные production задаются в защищённых настройках проекта:
| Переменная | Назначение |
|---|---|
APP_ORIGIN |
https://foliovera.app |
SUPABASE_URL |
URL целевого Supabase проекта |
NEXT_PUBLIC_SUPABASE_URL |
Тот же публичный API URL |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY |
Publishable key |
ENABLE_EXPERIMENTAL_COREPACK |
1, выбор закреплённой версии pnpm |
Перед применением миграций следует проверить точный project ref и резервную копию существующей базы. Начальный seed не должен создавать тестовых пользователей в production. Вход ограничен приглашёнными членами семьи.
Работающее приложение использует publishable key и пользовательскую сессию; права ограничиваются RLS. Административный ключ не нужен в Vercel для обычных экранов и API. Он требуется только отдельной операции первичного создания участников; храните его в защищённом окружении этой операции.
Production SMTP настроен через Resend с отправителем login@foliovera.app,
сервером smtp.resend.com, портом 465 и отдельным ключом отправки только для
этого домена. DKIM, SPF и MX подтверждены. Это подтверждает конфигурацию,
но не заменяет проверку доставки magic link и входа на production-домене.
Миграции запускаются через официальный Supabase CLI с проверкой сертификата и имени узла. Прямое подключение предпочтительно для миграций. На текущем компьютере нет маршрута IPv6, а соединение Session Pooler завершилось ошибкой. Первичное развёртывание выполнено через официальный migration endpoint Supabase Management API. API сам присваивает версии с точностью до секунды: запросы выполняются последовательно, с уникальным Idempotency-Key и интервалом больше секунды. Имена локальных файлов приведены к версиям из ответа API; SQL не менялся. После синхронизации локальная тестовая база пересоздана и проверена. Не изменяйте вручную журнал применённых миграций. Для последующих выпусков проверяйте совпадение истории с репозиторием перед применением новых миграций.
Docker задаёт BUILD_TARGET=docker для standalone-сборки. Vercel использует
свой штатный адаптер Next.js без standalone-режима.
В Supabase настраиваются Site URL, точный callback /auth/callback, Google OAuth
и SMTP для magic link. Google Cloud OAuth использует callback проекта Supabase.
Секреты OAuth и SMTP не коммитятся. Публичная форма входа не показывает пароль.
После выпуска проверяются TLS, Google-вход, получение magic link, отказ
постороннему пользователю, права ученика, загрузка закрытого файла и выход из
системы. Production считается готовым только после успешной проверки всех
критериев .agent/tasks/foliovera-mvp/spec.md.
Текущий проверенный статус выпуска хранится в evidence и verdict внутри задачи; наличие этой инструкции само по себе не означает выполненный деплой.