feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) #369

Merged
lekss361 merged 1 commit from feat/tradein-mvp into main 2026-05-20 21:26:27 +00:00
Owner

Что

Добавляет подпроект tradein-mvp/ — Trade-In Estimator для ЕКБ. Отдельный docker stack (gendesign-tradein) внутри той же репы.

Public URLs:

  • gendsgn.ru/trade-in/ — Next.js фронт (basePath=/trade-in)
  • gendsgn.ru/trade-in/api/v1/* — FastAPI бэк

Состав

  • Backend (tradein-mvp/backend/) — FastAPI + PostGIS estimator + 3 scrapers (Avito/Cian/Yandex) + WeasyPrint PDF
  • Frontend (tradein-mvp/frontend/) — Next.js 15 + React 19, дизайн по mockup tradein.html, 6 EKB presets
  • Infra:
    • tradein-mvp/docker-compose.prod.yml — изолированный stack (своя postgres, не лезет в gendesign)
    • Caddy routes inline в основном Caddyfile (3 handle блока перед общим reverse_proxy frontend)
    • .forgejo/workflows/deploy-tradein.yml — shell-based GHCR login через secrets.GHCR_PAT, triggers только на tradein-mvp/**

Не затрагивает

  • backend/, frontend/, docker-compose.prod.yml основного gendesign
  • .forgejo/workflows/deploy.yml — оба workflow ортогональны (разные paths)
  • Существующие routes Caddy /api/*, /health, /preview/*

Первый запуск на сервере (вручную, один раз)

Делаю сам после merge:

  1. ssh root@<DEPLOY_HOST>/opt/gendesign
  2. git fetch && git reset --hard origin/main
  3. Создать tradein-mvp/.env.runtime (postgres pwd через openssl rand -hex 32)
  4. docker network create gendesign_shared (если нет)
  5. cd tradein-mvp && docker compose -p gendesign-tradein -f docker-compose.prod.yml up -d
  6. docker compose -p gendesign exec caddy caddy reload --config /etc/caddy/Caddyfile
  7. Verify: curl https://gendsgn.ru/trade-in/api/health + playwright UI smoke

Откат

docker compose -p gendesign-tradein down + удалить tradein routes из Caddyfile + caddy reload.

Стек gendesign-tradein полностью изолирован — down его не затронет основной gendesign.

## Что Добавляет подпроект `tradein-mvp/` — Trade-In Estimator для ЕКБ. Отдельный docker stack (`gendesign-tradein`) внутри той же репы. Public URLs: - `gendsgn.ru/trade-in/` — Next.js фронт (basePath=/trade-in) - `gendsgn.ru/trade-in/api/v1/*` — FastAPI бэк ## Состав - **Backend** (`tradein-mvp/backend/`) — FastAPI + PostGIS estimator + 3 scrapers (Avito/Cian/Yandex) + WeasyPrint PDF - **Frontend** (`tradein-mvp/frontend/`) — Next.js 15 + React 19, дизайн по mockup `tradein.html`, 6 EKB presets - **Infra**: - `tradein-mvp/docker-compose.prod.yml` — изолированный stack (своя postgres, не лезет в gendesign) - Caddy routes inline в основном `Caddyfile` (3 handle блока перед общим reverse_proxy frontend) - `.forgejo/workflows/deploy-tradein.yml` — shell-based GHCR login через `secrets.GHCR_PAT`, triggers только на `tradein-mvp/**` ## Не затрагивает - `backend/`, `frontend/`, `docker-compose.prod.yml` основного gendesign - `.forgejo/workflows/deploy.yml` — оба workflow ортогональны (разные paths) - Существующие routes Caddy `/api/*`, `/health`, `/preview/*` ## Первый запуск на сервере (вручную, один раз) Делаю сам после merge: 1. `ssh root@<DEPLOY_HOST>` → `/opt/gendesign` 2. `git fetch && git reset --hard origin/main` 3. Создать `tradein-mvp/.env.runtime` (postgres pwd через `openssl rand -hex 32`) 4. `docker network create gendesign_shared` (если нет) 5. `cd tradein-mvp && docker compose -p gendesign-tradein -f docker-compose.prod.yml up -d` 6. `docker compose -p gendesign exec caddy caddy reload --config /etc/caddy/Caddyfile` 7. Verify: `curl https://gendsgn.ru/trade-in/api/health` + playwright UI smoke ## Откат `docker compose -p gendesign-tradein down` + удалить tradein routes из Caddyfile + caddy reload. Стек gendesign-tradein полностью изолирован — `down` его не затронет основной gendesign.
lekss361 added 1 commit 2026-05-20 21:26:18 +00:00
- FastAPI backend: PostGIS estimator + 3 scrapers (Avito/Cian/Yandex)
- Next.js 15 frontend: tradein.html mockup design, basePath=/trade-in
- WeasyPrint PDF (Брусника-style 4-page report)
- Address autocomplete с typo-tolerance + 6 EKB presets
- Изолированный docker stack gendesign-tradein (отдельная postgres БД)
- Caddy inline routes: gendsgn.ru/trade-in/* и /trade-in/api/v1/*
- Forgejo Actions: .forgejo/workflows/deploy-tradein.yml (shell-based GHCR login)
- Триггер только по paths: tradein-mvp/** (не пересекается с deploy.yml)
- Образы: ghcr.io/lekss361/gendesign-tradein-{backend,frontend}:latest

Первый запуск на сервере (вручную, один раз):
  - создать /opt/gendesign/tradein-mvp/.env.runtime (postgres pwd, contact email)
  - docker network create gendesign_shared (если нет)
  - docker compose -p gendesign-tradein up -d
  - docker compose -p gendesign exec caddy caddy reload
lekss361 merged commit 411a2d1001 into main 2026-05-20 21:26:27 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#369
No description provided.