zeroday f8730d9d09 fix: тип запроса секций и догоняющая миграция английских колонок
Оба дефекта вскрылись сборкой образа после слияния веток.

1. public.ts: SQL выбирает content_json_en, а описание типа запроса пришло из
   ветки визиток и этой колонки не знало — tsc отказывался собирать. След
   слияния: запрос из одной ветки, тип из другой.

2. Английские колонки (sections.content_json_en, products.title_en/subtitle_en/
   description_en) существуют на боевой базе, но их не создаёт ни одна
   миграция — когда-то добавили руками. На бою работало, на любой ЧИСТОЙ базе
   приложение упало бы на первом запросе /api/content. Заведена 005 с
   IF NOT EXISTS: на бою пусто, на чистой базе создаст.

Проверено на живом сайте: образ собран, контейнер healthy, миграции 004 и 005
применились сами, /api/content отдаёт 4 раздела на двух языках, 2 продукта,
полные реквизиты; страница визитки отвечает 200.
2026-08-25 22:35:20 +03:00

Умный Байт — лендинг компании

Сайт компании ООО «Умный Байт» (umbyte.ru) с админ-панелью для управления контентом.

Стек

  • Frontend: Vite + React + TypeScript + Tailwind CSS
  • Backend: Node.js + Express + TypeScript
  • БД: PostgreSQL 16
  • Auth: JWT
  • Deploy: Docker + Coolify на fortress.zeroday.su

Структура

umbyte-landing/
├── frontend/   # Публичный лендинг + админка
├── backend/    # REST API
├── db/         # SQL миграции
├── Dockerfile  # production билд (multi-stage)
└── docker-compose.yml  # для локальной разработки

Production deploy

Push в main → Coolify автоматически собирает Dockerfile и деплоит.

Переменные окружения (в Coolify):

  • DB_HOST=postgres-<UUID> — полное имя контейнера БД
  • DB_USER, DB_PASSWORD, DB_NAME
  • JWT_SECRET — случайная строка
  • ADMIN_INITIAL_PASSWORD — пароль первого админа при инициализации
S
Description
Лендинг компании Умный Байт (umbyte.ru) — Vite+React+Express+PG
Readme 519 KiB
Languages
TypeScript 82.7%
CSS 5.9%
JavaScript 5%
HTML 4.7%
Dockerfile 1.7%