План по итогам интервью (docs/plan.md), GLOSSARY.md, ADR о двух сервисах и о боте как канале администрирования, docs/ai-log.md, .gitignore для секретов, базы и артефактов.
1.6 KiB
1.6 KiB
Лендинг и API — два отдельных приложения
Лендинг (apps/landing, Next.js) и приём заявок (apps/api, Hono + better-sqlite3) живут в pnpm workspace как два приложения с общим пакетом packages/shared (телефон, контракт заявки, валидация) и деплоятся двумя контейнерами за одним nginx: / → 13120, /api/ → 13121. Так бэкенд с базой, очередью Telegram и бэкапами перезапускается и развивается независимо от вёрстки, а граница между ними проверяется сборкой, а не договорённостью.
Considered Options
- Одно Next.js-приложение с
route.tsи границей модулей через ESLint — проще деплой (один образ), но API, планировщик бэкапов и long polling бота жили бы в процессе фронта. - Статический экспорт лендинга, отдаваемый nginx с хоста — отказались: теряем
next/imageи меняем привычную на сервере схему «контейнер за nginx».
Consequences
- Один домен, поэтому CORS не нужен; форма шлёт
fetch('/api/lead'). packages/sharedпоставляется исходниками: Next — черезtranspilePackages, api — вшивается tsup.