«Для бизнеса» вела на форму входа — заведена страница /business #3294

Merged
bot-backend merged 2 commits from feat/mera-business-page into main 2026-08-31 09:14:35 +00:00
2 changed files with 58 additions and 8 deletions
Showing only changes of commit c4beee29ff - Show all commits

View file

@ -79,8 +79,57 @@ const V3_DIR = "_components/v3";
const GENERATED = ["ekb-districts.ts"];
const GENERATED_MARK = "СГЕНЕРИРОВАН";
/**
* ПОДСТРАНИЦЫ ПЕРИМЕТРА тоже под гейтом, а не только корень и v3-секции.
*
* 31.08.2026 завели `/business`, и ревьюер заметил, что новая ПУБЛИЧНАЯ
* страница чисел ничем не сторожится: сканер знал ровно два места корневой
* `page.tsx` и каталог `_components/v3`. Чисел там тогда не было, но правило
* держалось на том, что автор о нём помнил.
*
* Каталоги перечисляются ОБХОДОМ, а не списком: список снимок, и следующую
* страницу в него снова забудут вписать. Обход находит её сам.
*/
/**
* ЮРИДИЧЕСКИЕ СТРАНИЦЫ ПОД ЭТОТ ГЕЙТ НЕ ПОПАДАЮТ и это не послабление.
*
* Гейт ищет ФОРМУ величины: «14,5 %», «42 700», «150 ». Тексты оферты,
* политики и возврата состоят из ссылок на законы, и по форме они те же самые:
*
* Закон РФ от 07.02.1992 2300-1 «О защите прав потребителей»
* Федеральный закон от 27.07.2006 152-ФЗ
* ст. 18.1 152-ФЗ
*
* Отличить номер закона от замера рынка регулярным выражением нельзя, а
* подгонять под них исключения по одному значило бы дырявить сам сканер.
* Правило, которое гейт защищает, к этим страницам и не относится: там числа
* ЦИТИРУЮТСЯ из нормативных актов, а не утверждаются о рынке.
*
* Список ЯВНЫЙ и короткий: молчаливое расширение (например «все страницы с
* длинным текстом») однажды укроет и маркетинговую.
*/
const LEGAL_PAGES = new Set(["oferta", "privacy", "refund", "docs"]);
const PAGE_DIRS = readdirSync(ROOT, { withFileTypes: true })
.filter(
(e) =>
e.isDirectory() &&
e.name !== "__tests__" &&
e.name !== "_components" &&
!LEGAL_PAGES.has(e.name),
)
.map((e) => e.name)
.sort();
const SUBPAGES = PAGE_DIRS.flatMap((dir) =>
readdirSync(join(ROOT, dir))
.filter((name) => /^page\.tsx?$/u.test(name))
.map((name) => `${dir}/${name}`),
);
const V3_SOURCES = [
LANDING_ROOT,
...SUBPAGES,
...readdirSync(join(ROOT, V3_DIR))
.filter((name) => /\.tsx?$/u.test(name) && !GENERATED.includes(name))
.sort()

View file

@ -61,9 +61,9 @@ export default function BusinessPage() {
<div className={styles.repEyebrow}>ДЛЯ БИЗНЕСА</div>
<h1 className={styles.artPageTitle}>МЕРА для бизнеса</h1>
<p className={styles.artPageLead}>
Оценка квартиры по живым объявлениям не для одной сделки, а
потоком: для агентства, застройщика или компании, которая принимает
квартиры в зачёт.
Оценка квартир по живым объявлениям под своей учётной записью
для агентства, застройщика или компании, которая принимает квартиры
в зачёт.
</p>
</header>
@ -75,8 +75,8 @@ export default function BusinessPage() {
Тем, кто считает не одну квартиру, а много и регулярно: агентствам
недвижимости, отделам продаж застройщиков, компаниям с программами
трейд-ин. Расчёт идёт по тем же источникам, что и бесплатная
проверка на сайте, но по вашему потоку адресов и под вашими
учётными записями.
проверка на сайте, но под учётными записями вашей команды, с
сохранением истории и месячным лимитом на аккаунт.
</p>
<p className={styles.artP}>
Если задача разовая квартира одна, и нужно понять цену, идти
@ -101,9 +101,10 @@ export default function BusinessPage() {
<span className={styles.docsLinkCard}>
<span className={styles.docsLinkTitle}>Бизнес-контур</span>
<span className={styles.docsLinkNote}>
Закрытый контур с доступом по учётной записи: расчёты по потоку
адресов и история по ним. Доступ выдаётся вручную, после
разговора, самостоятельной регистрации в нём нет
Закрытый контур с доступом по учётной записи: история своих
расчётов, учётные записи команды, месячный лимит на аккаунт.
Доступ выдаётся вручную, после разговора, самостоятельной
регистрации в нём нет
</span>
</span>
</div>