feat(sf-fe-a12): Landing redesign + PilotCTA с real B3/B4 data #366

Closed
lekss361 wants to merge 1 commit from feat/sf-fe-a12-landing-redesign into main
Owner

Summary

Финальный блок SF-Frontend plan (§A12) — полный rewrite главной / под mockup gendsgn.ru/site-finder.html-tier landing для девелоперов.

  • Hero: одно предложение JTBD + primary CTA «Запросить пилот» → PilotRequestModal
  • 5 KPI cards из GET /api/v1/landing/stats (B4, real DB): zk_total, deals_total, price_coverage_pct, mapping_coverage_pct, last_data_update
  • Парадокс портфеля (headline-bar --bg-headline): stats.paradox строкой с сервера
  • Pricing card 30 000 ₽/мес — single tier, фокус
  • FAQ accordion (5 вопросов)
  • PilotRequestModal: form → POST /api/v1/pilot/request (B3), success state с trackingId, bottom-sheet на mobile
  • TanStack hooks в src/lib/api/landing.ts: useLandingStats() staleTime 60s + useSubmitPilotRequest() mutation
  • Старый landing → src/app/_legacy/page-tabs.tsx (backup)
  • Admin links убраны из public nav
  • lucide-react добавлен в deps (lockfile синхронизирован)

Real-data constraint

  • KPI и paradox — строго из B4 (/landing/stats), мок-фолбэков нет
  • Pilot submit — строго в B3 (/pilot/request), trackingId в success state
  • Если B4 вернёт ошибку — UI показывает skeleton, не fake-числа

Test plan

  • tsc --noEmit 0 ошибок (worker pre-flight)
  • npm run lint clean (worker pre-flight)
  • Pre-commit hooks passed
  • Post-merge: qa-tester smoke https://gendsgn.ru/ — Hero + KPI + Modal open/close + POST success
  • Mobile bottom-sheet positioning
  • last_data_update отображается корректным форматом

Refs: plan §A12 — vault://code/patterns/SiteFinder_Frontend_Migration_Plan_May18.md
Closes #82

## Summary Финальный блок SF-Frontend plan (§A12) — полный rewrite главной `/` под mockup `gendsgn.ru/site-finder.html`-tier landing для девелоперов. - **Hero**: одно предложение JTBD + primary CTA «Запросить пилот» → `PilotRequestModal` - **5 KPI cards** из `GET /api/v1/landing/stats` (B4, real DB): `zk_total`, `deals_total`, `price_coverage_pct`, `mapping_coverage_pct`, `last_data_update` - **Парадокс портфеля** (headline-bar `--bg-headline`): `stats.paradox` строкой с сервера - **Pricing card** 30 000 ₽/мес — single tier, фокус - **FAQ accordion** (5 вопросов) - **PilotRequestModal**: form → `POST /api/v1/pilot/request` (B3), success state с trackingId, bottom-sheet на mobile - **TanStack hooks** в `src/lib/api/landing.ts`: `useLandingStats()` staleTime 60s + `useSubmitPilotRequest()` mutation - Старый landing → `src/app/_legacy/page-tabs.tsx` (backup) - Admin links убраны из public nav - `lucide-react` добавлен в deps (lockfile синхронизирован) ## Real-data constraint - KPI и paradox — **строго из B4** (`/landing/stats`), мок-фолбэков нет - Pilot submit — **строго в B3** (`/pilot/request`), trackingId в success state - Если B4 вернёт ошибку — UI показывает skeleton, не fake-числа ## Test plan - [ ] `tsc --noEmit` ✅ 0 ошибок (worker pre-flight) - [ ] `npm run lint` ✅ clean (worker pre-flight) - [ ] Pre-commit hooks ✅ passed - [ ] Post-merge: `qa-tester` smoke `https://gendsgn.ru/` — Hero + KPI + Modal open/close + POST success - [ ] Mobile bottom-sheet positioning - [ ] `last_data_update` отображается корректным форматом Refs: plan §A12 — `vault://code/patterns/SiteFinder_Frontend_Migration_Plan_May18.md` Closes #82
lekss361 added 1 commit 2026-05-18 04:47:00 +00:00
feat(sf-fe-a12): Landing redesign + PilotCTA с real data B3/B4
Some checks failed
CI / backend (pull_request) Failing after 41s
CI / frontend (pull_request) Successful in 1m42s
fab6887034
Hero + 5 KPI cards из GET /api/v1/landing/stats (zk_total, deals_total,
price_coverage_pct, mapping_coverage_pct, last_data_update).
Парадокс портфеля из stats.paradox. Pricing card 30 000 руб/мес. FAQ accordion.
PilotRequestModal -> POST /api/v1/pilot/request, success state с trackingId.
Admin links убраны из public nav. lucide-react добавлен в deps.
Author
Owner

⚠️ Merge blocked: conflict with main.

mergeable=false, update_pr_branch returned 409: merge failed because of conflict. Branch's merge_base is ae0fce3 while current main is 7f3734e0feat/sf-fe-a12-landing-redesign branched off stale main and accumulated since.

Likely conflict surfaces:

  • frontend/src/app/page.tsx (landing rewrite vs concurrent edits)
  • frontend/package.json / package-lock.json (lucide-react addition + any other dep churn)
  • frontend/src/lib/api/ directory (new landing.ts + B3/B4 hooks)

Author resolution needed — rebase branch onto current main, resolve conflicts, push fixup. Will re-review and merge on next polling iteration.

Code-review wise the PR scope is substantial (1143 LoC, B3+B4 wiring, modal with form submission) — deep review will run on the rebased SHA, particular focus on:

  • B3 POST body validation (no PII leak via console.log, error handling)
  • B4 staleTime + skeleton state hygiene
  • PilotRequestModal a11y (focus trap, ESC, mobile bottom-sheet)
  • CSV/XSS surface in submission flow
⚠️ **Merge blocked: conflict with main.** `mergeable=false`, `update_pr_branch` returned `409: merge failed because of conflict`. Branch's `merge_base` is `ae0fce3` while current main is `7f3734e0` — `feat/sf-fe-a12-landing-redesign` branched off stale main and accumulated since. Likely conflict surfaces: - `frontend/src/app/page.tsx` (landing rewrite vs concurrent edits) - `frontend/package.json` / `package-lock.json` (lucide-react addition + any other dep churn) - `frontend/src/lib/api/` directory (new `landing.ts` + B3/B4 hooks) Author resolution needed — rebase branch onto current main, resolve conflicts, push fixup. Will re-review and merge on next polling iteration. Code-review wise the PR scope is substantial (1143 LoC, B3+B4 wiring, modal with form submission) — deep review will run on the rebased SHA, particular focus on: - B3 POST body validation (no PII leak via console.log, error handling) - B4 staleTime + skeleton state hygiene - PilotRequestModal a11y (focus trap, ESC, mobile bottom-sheet) - CSV/XSS surface in submission flow
Author
Owner

Замещён PR #367 (feat/sf-fe-a12-landing-redesign-v2).

Branch отстаёт от main на 14 коммитов (merge_base ae0fce3, main 7f3734e0). Force-push на эту ветку требует user approval — вместо этого создана -v2 от current main, cherry-picked HEAD fab68870, разрешены конфликты:

  • frontend/package.json — оставлен main's lucide-react@^0.511.0 (worker ошибочно поставил ^1.16.0, версии 1.x не существует)
  • frontend/package-lock.json — полная regen через npm install
  • frontend/src/app/page.tsx — взята A12 версия (full rewrite by design)
  • 3 new files clean apply

Закрываю как superseded.

Замещён **PR #367** (`feat/sf-fe-a12-landing-redesign-v2`). Branch отстаёт от main на 14 коммитов (merge_base `ae0fce3`, main `7f3734e0`). Force-push на эту ветку требует user approval — вместо этого создана `-v2` от current main, cherry-picked HEAD `fab68870`, разрешены конфликты: - `frontend/package.json` — оставлен main's `lucide-react@^0.511.0` (worker ошибочно поставил `^1.16.0`, версии 1.x не существует) - `frontend/package-lock.json` — полная regen через `npm install` - `frontend/src/app/page.tsx` — взята A12 версия (full rewrite by design) - 3 new files clean apply Закрываю как superseded.
lekss361 closed this pull request 2026-05-18 04:55:12 +00:00
Some checks failed
CI / backend (pull_request) Failing after 41s
CI / frontend (pull_request) Successful in 1m42s

Pull request closed

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#366
No description provided.