- Next 16.4 и Payload 3.91 в одном приложении, PostgreSQL с UUID, TypeScript 6, ESLint 9, Prettier, Vitest - Payload: администраторы с ролями, multi-tenant по сайтам, локализация en/ru/de/fr/es, интерфейс админки ru/en, языки сайта (sites.locales) - Коллекции sites, domains, currencies, countries, locations, tags, tariffs, payment-systems (manual), media и начальные данные (pnpm seed) - Proxy: хост → домен, язык и валюта, внутренние маршруты по хосту; /admin и /api закрыты на доменах брендов - Токены и темы брендов, оболочки сайта и кабинета, переключатели языка, валюты и темы, заглушки страниц - /svc/health, юнит systemd veilix-dev.service - Документация: решения D-022…D-024, команды в CLAUDE.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.4 KiB
6.4 KiB
Veilix — правила для сессий Claude
Сервис продажи VPN двух брендов на одном бэкенде: Вейликс (dedicated, veilix.app) и ВейликсВПН (mass, veilixvpn.com). Карта документации — docs/00-index.md.
1. Порядок работы в сессии
- Прочитай этот файл, затем docs/00-index.md и файл текущего этапа в docs/stages/. Остальные документы — по ссылкам из файла этапа.
- Перед началом работ сверь с пользователем план этапа: что делаем, что не делаем, какие вопросы открыты. Код не пишем, пока план этапа не подтверждён.
- Нашлось противоречие между документами, макетом и задачей — сначала обсуждаем, потом делаем.
- Есть отраслевой стандарт лучше предложенного решения или решение получается кастомным — обсуди с пользователем.
- В конце этапа обнови документацию: статус этапа в docs/00-index.md, решения в docs/decisions/, изменения модели данных в docs/03-data-model.md.
2. Общение
- Язык — русский.
- Нумерация пунктов в чате и в документации — только цифры и латинские буквы (1, 2, 3 и a, b, c). Кириллические буквы как маркеры не используем: не путаются латинская A и русская А, латинская B и русская В.
3. Сервер и права
- Всё, что требует root (пакеты, nginx, сертификаты, роли PostgreSQL, Postfix, DNS,
loginctl), делает пользователь. Сформулируй, что и зачем нужно сделать, и жди. Обходные пути внутри своего пользователя не ищем. - Окружения на одном сервере, под разными пользователями ОС:
a. dev — пользователь vx_dev (под ним работают сессии Claude):
/home/vx_dev/veilix_dev(рабочая копия git), базаveilix_dev, доменыdev.*, порт 3100; b. prod — пользователь vx_prod:/home/vx_prod/veilix(релизы и симлинкcurrent), базаveilix_prod, основные домены, порт 3000. У vx_dev доступа к prod нет. - Выкладка в prod — только по явной команде пользователя в текущей сессии и только командой выкладки (docs/02-architecture.md, раздел 5).
4. Технические правила
- Стек и версии — docs/02-architecture.md. Payload 3.x; код пишем совместимо с Payload 4: в Local API всегда явно указываем
overrideAccess. - ID — только UUID (
idType: 'uuid'). Наружу не отдаём последовательных номеров: номера заказов, ключей и реферальные коды — случайные. - Деньги — целые числа в минимальных единицах (копейки, центы) плюс код валюты. Никаких float.
- Секреты — только в
.envвне git. - Тексты интерфейса — через next-intl, контент — локализованные поля Payload. Строк на одном языке в коде компонентов нет.
- Макеты — в design/handoff/project/. Воспроизводим их по коду макетов (разметка, CSS-переменные), а не по скриншотам.
- Коммиты и push в Gitea — по просьбе пользователя.
5. Команды
Из /home/vx_dev/veilix_dev под vx_dev. Dev-сервер работает под systemd, вручную pnpm dev не запускаем: порт 3100 занят.
| Команда | Что делает |
|---|---|
systemctl --user restart veilix-dev |
перезапустить dev-сервер (pnpm dev, 127.0.0.1:3100); юнит — ops/systemd/veilix-dev.service |
journalctl --user -u veilix-dev -f |
логи dev-сервера |
pnpm lint |
ESLint |
pnpm typecheck |
типы маршрутов Next и tsc --noEmit |
pnpm test |
модульные тесты (Vitest, файлы *.test.ts) |
pnpm build |
production-сборка; dev-серверу не мешает, он пишет в .next/dev |
pnpm format |
Prettier (pnpm format:check — только проверка) |
pnpm seed |
начальные данные dev; повторный запуск обновляет записи и возвращает значения seed. SEED_ENV=prod — данные prod |
pnpm generate:types |
типы Payload в src/payload-types.ts после изменения коллекций |
pnpm generate:importmap |
карта импортов админки после добавления своих компонентов |
pnpm db:reset |
очистить veilix_dev (только её), если push схемы задаёт вопросы (переименование, удаление): без терминала их некому подтвердить. Затем перезапуск dev-сервера и pnpm seed |
pnpm payload migrate:create <имя> |
миграция для prod; до первой выкладки (1h) миграции не создаём |
Проверка без nginx: curl -A 'Mozilla/5.0' -H 'Host: dev.veilix.app' http://127.0.0.1:3100/…. Без браузерного User-Agent curl считается ботом и не перенаправляется; заголовок X-Geo-Country так можно подставить, через nginx — нет.