fix(tradein/v2): audit findings — de-fabricate location drawer, real map markers, validation, hero image, real user #2057

Merged
lekss361 merged 1 commit from feat/tradein-v2-audit-fixes into main 2026-06-28 14:27:06 +00:00
Owner

Браузерный аудит живого /trade-in/v2 (под pilot, реальная оценка) вскрыл проблемы честности и UX. Фиксы:

🔴 Честность данных

  • LocationDrawer (открывался по «?»/«КАК РАССЧИТАНО») показывал выдуманное: коэф 0.87, формулу 11,29 млн × 0.87 = 9,82 млн (база ≠ реальная оценка), фейковые POI-факторы, ложный «Источник: OpenStreetMap». → вырезано; теперь честный статичный «ПОЯСНЕНИЕ К РАСЧЁТУ» (реальная методология) + «коэф. локации в разработке». + Escape-закрытие.
  • Карта (ParamsPanel) рисовала статичные fixture-цены (12,7/7,6/22,4 млн). → новый mapMarkers(estimate) проецирует реальные аналоги (lat/lon вокруг target, cap 6); нет оценки → нет пинов.

🟠 UX/функционал

  • Пустая «ПЛОЩАДЬ» молча блокировала submit → теперь сообщение «Укажите площадь квартиры»; плейсхолдеры стали явными («напр. 54»).
  • «КАК РАССЧИТАНО» (мёртвая кнопка) → открывает info-drawer.
  • building.png 400 (next/image не применял basePath) → unoptimized + onError-фолбэк.

🟡 Chrome / отображение

  • TopNav юзер «Андрей Петров / Брусника» (fixture) → реальный из useMe() (имя/инициалы/роль); мёртвые Профиль/Настройки/Помощь — задизейблены; «Выйти» → logout(). («Мои отчёты» уже был реальный.)
  • Адреса аналогов «69/2Геологическая» → «69/2 Геологическая» (regex сохраняет литеры дома 14А).
  • «Продажи в доме» (это radius-данные) → «Продажи рядом»; знак торга (backend (start−last)/start, + = снижение) → рендерит «−3.3%».
  • «0 ЛОТА» → корректное склонение (pluralRu).

Verify

  • next build зелёный (/v2 39.5 kB); code-reviewer APPROVE (де-фабрикация полная, mapMarkers NaN-safe, deglue сохраняет литеры, один негейт торга, hooks/hydration OK).
  • Прод-визуал-QA — после деплоя в этом же окне (браузер поднят).

Остаётся на BE: профиль (name/org/email — #2046), POI location-coef (#2045). Это уже честно деградировано в UI.

Браузерный аудит живого `/trade-in/v2` (под pilot, реальная оценка) вскрыл проблемы честности и UX. Фиксы: ### 🔴 Честность данных - **LocationDrawer** (открывался по «?»/«КАК РАССЧИТАНО») показывал **выдуманное**: коэф `0.87`, формулу `11,29 млн × 0.87 = 9,82 млн` (база ≠ реальная оценка), фейковые POI-факторы, ложный «Источник: OpenStreetMap». → вырезано; теперь честный статичный **«ПОЯСНЕНИЕ К РАСЧЁТУ»** (реальная методология) + «коэф. локации в разработке». + Escape-закрытие. - **Карта** (ParamsPanel) рисовала статичные fixture-цены (12,7/7,6/22,4 млн). → новый `mapMarkers(estimate)` проецирует **реальные** аналоги (lat/lon вокруг target, cap 6); нет оценки → нет пинов. ### 🟠 UX/функционал - **Пустая «ПЛОЩАДЬ»** молча блокировала submit → теперь сообщение «Укажите площадь квартиры»; плейсхолдеры стали явными («напр. 54»). - **«КАК РАССЧИТАНО»** (мёртвая кнопка) → открывает info-drawer. - **building.png 400** (next/image не применял basePath) → `unoptimized` + onError-фолбэк. ### 🟡 Chrome / отображение - **TopNav юзер** «Андрей Петров / Брусника» (fixture) → реальный из `useMe()` (имя/инициалы/роль); мёртвые Профиль/Настройки/Помощь — задизейблены; «Выйти» → `logout()`. («Мои отчёты» уже был реальный.) - **Адреса аналогов** «69/2Геологическая» → «69/2 Геологическая» (regex сохраняет литеры дома 14А). - **«Продажи в доме»** (это radius-данные) → «Продажи рядом»; **знак торга** (backend `(start−last)/start`, + = снижение) → рендерит «−3.3%». - **«0 ЛОТА»** → корректное склонение (pluralRu). ## Verify - `next build` зелёный (/v2 39.5 kB); `code-reviewer` ✅ APPROVE (де-фабрикация полная, mapMarkers NaN-safe, deglue сохраняет литеры, один негейт торга, hooks/hydration OK). - Прод-визуал-QA — после деплоя в этом же окне (браузер поднят). Остаётся на BE: профиль (name/org/email — #2046), POI location-coef (#2045). Это уже честно деградировано в UI.
lekss361 added 1 commit 2026-06-28 14:26:57 +00:00
fix(tradein/v2): audit findings — de-fabricate location drawer, real map markers, validation, hero image, real user (#2036)
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
5a2b6d91cd
Browser audit of the live /trade-in/v2 found honesty + UX defects; fixes:
- 🔴 LocationDrawer: removed FABRICATED coef 0.87 / fake 'base×coef=result' / invented
  POI factors / false 'OpenStreetMap' source. Now honest static 'ПОЯСНЕНИЕ К РАСЧЁТУ'
  (real methodology) + 'коэф. локации в разработке' note. + Escape-to-close.
- 🔴 Map (ParamsPanel): removed static fixture price markers; renders REAL analog
  markers via new mapMarkers(estimate) (projects lat/lon around target, cap 6).
- ParamsPanel: empty площадь/address now shows a validation message instead of
  silently blocking submit; numeric placeholders made clearly placeholders ('напр. 54').
- HeroBar: dead 'КАК РАССЧИТАНО' button now opens the info drawer; building.png next/image
  400 fixed (unoptimized + onError fallback — basePath wasn't applied to the optimizer URL).
- TopNav: real user from useMe() (name/initials/org/email) instead of fixture
  'Андрей Петров'; dead Профиль/Настройки/Помощь dimmed/disabled; Выйти → logout().
- mappers: de-glue analog addresses ('69/2Геологическая'→'69/2 Геологическая', preserves
  house letters like 14А); 'Продажи в доме'→'Продажи рядом' (radius data); торг sign fixed
  (backend (start−last)/start positive=reduction → renders '−3.3%').
- HistoryView: '0 ЛОТА' → correct plural via pluralRu.

next build green; code-reviewer  APPROVE.
lekss361 merged commit fb25180929 into main 2026-06-28 14:27:06 +00:00
lekss361 deleted branch feat/tradein-v2-audit-fixes 2026-06-28 14:27:07 +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#2057
No description provided.