Две статьи на собственном замере вместо карточек «СКОРО» #3521

Merged
lekss361 merged 1 commit from feat/mera-articles-prices-waiting into main 2026-09-13 11:45:34 +00:00
Owner

Раздел /articles с 29.08 стоял с одной живой статьёй и двумя карточками «СКОРО» без ссылок. Обе дописаны. Закрывает содержательную часть #2901.

Что написано

«Сколько стоит метр в Екатеринбурге: цены сделок, а не объявлений»/articles/skolko-stoit-metr-v-ekaterinburge

24 535 договоров купли-продажи Росреестра, регион 66, июль 2025 — июнь 2026. Медиана 123 626 ₽/м².

Несущий факт статьи контринтуитивен и потому проверен отдельно: кривая цены метра по комнатности не падает, а прогибается.

Комнатность Медиана за метр Сделок
Студия 134 507 ₽ 2 967
Однокомнатная 124 256 ₽ 8 342
Двухкомнатная 116 910 ₽ 6 548
Трёхкомнатная 121 835 ₽ 3 861
Четыре и больше 132 122 ₽ 2 817

Плюс поквартальная динамика по всем десяти доступным кварталам (+20,6% с начала 2024, без единого падающего квартала) и восемь городов области с порогом публикации в сто сделок.

«Почему квартира не продаётся: что происходит с ценой, пока вы ждёте»/articles/pochemu-kvartira-ne-prodaetsya

49 620 объявлений Свердловской области, у которых площадка ведёт историю цены. Цена двигалась у 43,5%; из них вниз у 60,2%, вверх у 38,0%. Медиана снижения −3,85% и −291 000 ₽.

Почему темы не те, что в макете

Карточка «Сколько продаётся квартира в 2026 году» требовала срока экспозиции. Он не измеряется:

  • days_on_market пуст у всех 435 тысяч сделок Росреестра;
  • снятие объявления и продажа в наших данных неразличимы;
  • 41% «снятий» приходится на шесть дат, совпадающих с провалами собственного обхода.

Мерили бы мы свой сборщик, а не рынок. Вместо этого первый раздел второй статьи прямо объясняет читателю, почему средний срок продажи не назовёт никто честный, и советует спрашивать у любой статьи с таким числом, как там отличали снятие от продажи.

Вторая карточка называлась «Завысить и торговаться или поставить в рынок». Запрос «завысить цену на квартиру» уведён юридическим смыслом — завышением суммы в договоре ради ипотеки. По этой формулировке статья попала бы в чужую выдачу.

Дисциплина чисел

Первоначальный замер прошёл адверсариальную проверку: из десяти величин воспроизвелись две, остальные отброшены как непригодные к печати. Типичная причина отбраковки — метрика меряет частоту обхода скрапера, а не поведение рынка. Обе статьи пересчитаны с нуля по источникам, которые этим не страдают: договоры Росреестра и история цены, которую ведут сами площадки.

У каждого блока стоит своё поле source/footnote с датой, выборкой и границей — чем это число НЕ является. Границы вынесены в текст для читателя, а не спрятаны в комментарий.

Обвязка

Два ключа в PUBLIC_ROUTES, две страницы, sitemap.ts, три матчера в apps.caddy на каждый адрес, PUBLIC_SHORT_PATHS у RouteGuard, PUBLIC_INDEXED_FILES в гейте noindex. Блок «Читайте дальше» перестал быть статичным «СКОРО» и делает карточку ссылкой, как только у неё появился route. Витрина и лэндинг обновились сами — обе перебирают ARTICLE_CARDS.

Чисел в JSX нет ни одного: обе папки попадают в SUBPAGES гейта чисел, все величины приходят из articles-content.ts.

Проверка

type-check чист. vitest по mera-public и auth — 237 тестов зелёные, включая три гейта коротких адресов публичного домена, гейт чисел и RouteGuard.publicPaths.

Один красный файл в общем прогоне, login/__tests__/LoginPage.test.tsx, два теста про текст ошибки входа. Он падает и без этих правок, файлы логина в диффе не участвуют.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh

Раздел `/articles` с 29.08 стоял с одной живой статьёй и двумя карточками «СКОРО» без ссылок. Обе дописаны. Закрывает содержательную часть #2901. ## Что написано **«Сколько стоит метр в Екатеринбурге: цены сделок, а не объявлений»** — `/articles/skolko-stoit-metr-v-ekaterinburge` 24 535 договоров купли-продажи Росреестра, регион 66, июль 2025 — июнь 2026. Медиана 123 626 ₽/м². Несущий факт статьи контринтуитивен и потому проверен отдельно: кривая цены метра по комнатности не падает, а прогибается. | Комнатность | Медиана за метр | Сделок | |---|---|---| | Студия | 134 507 ₽ | 2 967 | | Однокомнатная | 124 256 ₽ | 8 342 | | Двухкомнатная | 116 910 ₽ | 6 548 | | Трёхкомнатная | 121 835 ₽ | 3 861 | | Четыре и больше | 132 122 ₽ | 2 817 | Плюс поквартальная динамика по всем десяти доступным кварталам (+20,6% с начала 2024, без единого падающего квартала) и восемь городов области с порогом публикации в сто сделок. **«Почему квартира не продаётся: что происходит с ценой, пока вы ждёте»** — `/articles/pochemu-kvartira-ne-prodaetsya` 49 620 объявлений Свердловской области, у которых площадка ведёт историю цены. Цена двигалась у 43,5%; из них вниз у 60,2%, вверх у 38,0%. Медиана снижения −3,85% и −291 000 ₽. ## Почему темы не те, что в макете Карточка «Сколько продаётся квартира в 2026 году» требовала срока экспозиции. Он не измеряется: - `days_on_market` пуст у всех 435 тысяч сделок Росреестра; - снятие объявления и продажа в наших данных неразличимы; - 41% «снятий» приходится на шесть дат, совпадающих с провалами собственного обхода. Мерили бы мы свой сборщик, а не рынок. Вместо этого первый раздел второй статьи прямо объясняет читателю, почему средний срок продажи не назовёт никто честный, и советует спрашивать у любой статьи с таким числом, как там отличали снятие от продажи. Вторая карточка называлась «Завысить и торговаться или поставить в рынок». Запрос «завысить цену на квартиру» уведён юридическим смыслом — завышением суммы в договоре ради ипотеки. По этой формулировке статья попала бы в чужую выдачу. ## Дисциплина чисел Первоначальный замер прошёл адверсариальную проверку: из десяти величин воспроизвелись две, остальные отброшены как непригодные к печати. Типичная причина отбраковки — метрика меряет частоту обхода скрапера, а не поведение рынка. Обе статьи пересчитаны с нуля по источникам, которые этим не страдают: договоры Росреестра и история цены, которую ведут сами площадки. У каждого блока стоит своё поле `source`/`footnote` с датой, выборкой и границей — чем это число НЕ является. Границы вынесены в текст для читателя, а не спрятаны в комментарий. ## Обвязка Два ключа в `PUBLIC_ROUTES`, две страницы, `sitemap.ts`, три матчера в `apps.caddy` на каждый адрес, `PUBLIC_SHORT_PATHS` у `RouteGuard`, `PUBLIC_INDEXED_FILES` в гейте noindex. Блок «Читайте дальше» перестал быть статичным «СКОРО» и делает карточку ссылкой, как только у неё появился `route`. Витрина и лэндинг обновились сами — обе перебирают `ARTICLE_CARDS`. Чисел в JSX нет ни одного: обе папки попадают в `SUBPAGES` гейта чисел, все величины приходят из `articles-content.ts`. ## Проверка `type-check` чист. `vitest` по `mera-public` и `auth` — 237 тестов зелёные, включая три гейта коротких адресов публичного домена, гейт чисел и `RouteGuard.publicPaths`. Один красный файл в общем прогоне, `login/__tests__/LoginPage.test.tsx`, два теста про текст ошибки входа. Он падает и без этих правок, файлы логина в диффе не участвуют. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh
lekss361 added 1 commit 2026-09-13 11:42:37 +00:00
feat(mera): две статьи на собственном замере вместо карточек «СКОРО»
All checks were successful
CI Trade-In / changes (pull_request) Successful in 14s
CI / changes (pull_request) Successful in 13s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Has been skipped
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
CI Trade-In / frontend-checks (pull_request) Successful in 1m27s
89d095f486
Раздел /articles с 29.08 стоял с одной живой статьёй и двумя карточками без
ссылок. Обе дописаны — но не по темам из макета: те темы данными не
обеспечены.

«Сколько стоит метр в Екатеринбурге: цены сделок, а не объявлений».
24 535 договоров Росреестра за июль 2025 — июнь 2026, регион 66. Медиана
123 626 ₽/м². Несущий факт статьи контринтуитивен и проверен: кривая цены
метра по комнатности не падает, а прогибается — дешевле всего метр в
двухкомнатной (116 910 ₽), дороже всего в студии (134 507 ₽). Плюс
поквартальная динамика за все десять доступных кварталов (+20,6%) и восемь
городов области с порогом публикации в сто сделок.

«Почему квартира не продаётся: что происходит с ценой, пока вы ждёте».
49 620 объявлений области с историей цены площадок. Цена двигалась у 43,5%,
из них вниз у 60,2%, вверх у 38,0%. Медиана снижения −3,85% и −291 000 ₽.

ПОЧЕМУ НЕ ТЕ ТЕМЫ, ЧТО В МАКЕТЕ. Карточка «Сколько продаётся квартира»
требовала срока экспозиции, а он не измеряется: `days_on_market` пуст у всех
435 тысяч сделок Росреестра, а снятие объявления и продажа в наших данных
неразличимы — 41% «снятий» приходится на шесть дат, совпадающих с провалами
собственного обхода. Мерили бы мы свой сборщик, а не рынок. Вторая карточка
называлась «Завысить и торговаться»; запрос «завысить цену на квартиру»
уведён юридическим смыслом (завышение суммы в ДКП ради ипотеки), и статья
попала бы в чужую выдачу.

ДИСЦИПЛИНА ЧИСЕЛ. Замер прошёл адверсариальную проверку: из десяти
первоначальных величин воспроизвелись две, остальные отброшены как
непригодные к печати. Обе статьи пересчитаны заново с нуля. У каждого блока
стоит своё поле source/footnote с датой, выборкой и границей — чем это число
НЕ является. Неизмеримое названо неизмеримым прямо в тексте, а не обойдено
молчанием: первый раздел второй статьи объясняет читателю, почему средний
срок продажи не назовёт никто честный.

Обвязка: два ключа в PUBLIC_ROUTES, две страницы, sitemap, три матчера в
apps.caddy на каждый адрес, PUBLIC_SHORT_PATHS у RouteGuard,
PUBLIC_INDEXED_FILES в гейте noindex. Блок «Читайте дальше» перестал быть
статичным «СКОРО» и делает карточку ссылкой, как только у неё появился
route. Витрина и лэндинг обновились сами — обе перебирают ARTICLE_CARDS.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh
lekss361 merged commit d33c97521d into main 2026-09-13 11:45:34 +00:00
lekss361 deleted branch feat/mera-articles-prices-waiting 2026-09-13 11:45:34 +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#3521
No description provided.