惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
大猫的无限游戏
大猫的无限游戏
F
Fortinet All Blogs
M
MIT News - Artificial intelligence
G
Google Developers Blog
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Help Net Security
V
Visual Studio Blog
WordPress大学
WordPress大学
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
Webroot Blog
Webroot Blog
Hugging Face - Blog
Hugging Face - Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
W
WeLiveSecurity
C
CERT Recently Published Vulnerability Notes
Y
Y Combinator Blog
S
Schneier on Security
Recent Announcements
Recent Announcements
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
宝玉的分享
宝玉的分享
T
Troy Hunt's Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
N
News and Events Feed by Topic
A
About on SuperTechFans
小众软件
小众软件
K
Kaspersky official blog
Help Net Security
Help Net Security
V2EX - 技术
V2EX - 技术
P
Proofpoint News Feed
S
Secure Thoughts
IT之家
IT之家
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
I
Intezer
NISL@THU
NISL@THU
GbyAI
GbyAI
P
Privacy & Cybersecurity Law Blog
T
Threatpost
C
Check Point Blog
Forbes - Security
Forbes - Security
C
Cisco Blogs
AI
AI
Recorded Future
Recorded Future
F
Full Disclosure

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Иду в топ ниши строительных калькуляторов. Три месяца спустя
Soft gAming! · 2026-05-21 · via Все публикации подряд на Хабре

Иду в топ ниши строительных калькуляторов. Три месяца спустя

Простой

14 мин

14K

Когда я начинал этот pet-проект, у меня в голове была одна цель: за полтора-два года вытеснить ноунейм-сайты из верхушки выдачи Яндекса и Google по запросам типа «калькулятор бетона», «расчёт утеплителя», «сколько нужно плитки на ванную». Не зайти пятым на странице, не получить какой-то «нормальный трафик», а конкретно занять первое место в нише. Сайт — getmasterok.ru, ему около трёх месяцев. Но какой же я был легкомысленный и как я сильно ошибался.

Амбиция выглядит наивно, и я отдаю себе в этом отчёт. Ниша строительных калькуляторов забита под потолок: десятки доменов, заточенных под партнёрки крупного DIY-ретейла, ещё столько же пустых SEO-шаблонов с одним и тем же текстом, прогнанным через рерайт. Туда не идут крупные команды, потому что выручка с лида в этой нише небольшая. Туда идут одиночки, маркетологи на фрилансе и редкие подрядчики, которым заказали сайт условно за несколько тысяч под ключ. Качество предложения в среднем на уровне 2010 года.

Главная страница без подвала сайта

Главная страница без подвала сайта

Это и есть причина, по которой я туда полез. Когда вся ниша держится на технически неряшливых продуктах, у одиночки с инженерным фоном есть окно. Я не питаю иллюзий, что «возьму качеством и всё». Я понимаю, что Google маринует новые домены, что Яндекс хочет видеть поведенческие, что SEO без бюджета — это игра вдолгую. Но проверить гипотезу, реально ли в этой нише отбить лидерство одним инженерным качеством расчётов и нормальным UX, мне интересно. Если не получится за два года, я хотя бы пойму, чего не хватает помимо качества продукта.

Дальше про то, что у меня сейчас под капотом со стороны пользователя, какие продуктовые решения отличают сайт от типичного калькулятора в выдаче, и что я думаю про эту дорогу спустя три месяца.

Что не так с типичным калькулятором в выдаче

Если открыть выдачу по запросу «калькулятор плитки» и пройтись по первой странице, обнаружится несколько системных проблем, которые повторяются от сайта к сайту.

Первое — это не калькуляторы. Это умножение. Формула в подавляющем большинстве случаев просто площадь, помноженная на средний расход на квадрат, плюс зашитые в код десять процентов на отходы. Без учёта схемы раскладки, без понимания, что у плитки 200×600 потери при ёлочке доходят до восемнадцати процентов, а при прямой укладке в большой комнате до пяти. Без подрезки на углы и колонны. Без сноски про то, какая партия и какой подгон по тону.

Второе — никто не объясняет, откуда взялась цифра. Пользователю показывают «вам нужно 47 плиток» и всё. Сколько чистой математики, сколько запаса, сколько добавлено на округление до упаковки неизвестно. Из-за этого первое, что делает любой человек, который что-то реально строит: открывает ещё три калькулятора и сравнивает. Если три из четырёх дают близкие числа, выбирает медиану. Если разброс большой, то закладывает с запасом на глаз. Калькулятор перестал быть инструментом и стал черновиком для интуитивного решения.

Третье — округление до упаковки игнорируется. Сайт пишет «вам нужно 14,3 мешка штукатурки», как будто магазин может отрезать 0,3 мешка. Иногда округление есть, но скрытое, и пользователь не понимает, что итоговая цифра уже включает лишний мешок «на всякий случай». Я видел калькуляторы, которые округляют объём бетона до полукубовых значений, потому что миксер так заливает, но не сообщают об этом нигде.

Четвёртое — мало кто считает сопутствующее. Плитку обещают, а клей, грунт, крестики, затирку и СВП-системы оставляют пользователю. На реальном объекте список к покупке — это десять-двенадцать позиций, и если калькулятор выдал одну, то это не калькулятор, а демонстрация формулы.

Пятое, и часто решающее — UX. Поля без подписи, ввод толщины в сантиметрах в одном калькуляторе и в миллиметрах в другом, выпадающие списки на двести вариантов без поиска, баннеры поверх формы, переход на «полный расчёт» через регистрацию по телефону. Это сайты, которые делались под SEO, а не под пользователя.

Шестое — приходит мысль, что вся ниша скоро будет заменена AI-чатами. Я её проверял. Современные LLM прекрасно знают формулу объёма усечённой пирамиды и могут пересказать СП 71.13330 по пунктам. Но плотность бетона марки М300 они называют с разбросом плюс-минус двести килограммов на куб. Расход плиточного клея с разбросом в два раза. Это галлюцинации коэффициентов, и для строителя они опаснее любого SEO-шлака, потому что упакованы в уверенный тон. Чат не заменит детерминированный калькулятор, у которого формулы вшиты в код и проверяемы. По крайней мере, не в ближайшие лет пять.

Из этих шести проблем складывается окно. Если сделать продукт, в котором ни одной из этих болячек нет - у тебя автоматически получается калькулятор, заметно лучше среднего по выдаче. Дальше вопрос времени и SEO-терпения.

Главные продуктовые решения сайта

Прозрачные коэффициенты вместо магической константы

Главный мой принцип — пользователь должен видеть, из чего сложилась итоговая цифра. Не одну строчку «учтены потери», а полный разбор.

Под капотом у каждого калькулятора три явных режима точности (basic, realistic, professional) плюс скрытый custom, в который пользователь проваливается, когда двигает ползунки. Каждый режим это профиль из восьми коэффициентов: отходы, подрезка, неровности основания, перерасход при нанесении, человеческий фактор, добор/замена, расход крепежа, жёсткость округления до упаковки.

Профили разные для разных материальных классов. Плиточные работы это не штукатурные, не кровельные и не каркасные. Для них разные дефолты в разных режимах, и эти разные дефолты не «потому что так захотелось», а потому что подбирались по типичным справочным таблицам и тестировались на реальных кейсах.

В интерфейсе результат не выглядит как «×1.18». Под итоговым числом, раскрывающийся список применённых надбавок:

  • Отходы материала: +5%. Типичные потери при обычном ремонте.

  • Подрезка: +7%. Учтена диагональная раскладка.

  • Округление до упаковки: +1 пачка. В чистой математике вам нужно 13,2.

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

На профили навешен инвариант: для каждого коэффициента и каждого материального класса в тестах проверяется, что professional >= realistic >= basic. Если я добавляю новый класс и где-то перепутал колонки в Excel-черновике (один раз перепутал), тесты падают, и я не закоммичу профиль до исправления. Маленькая страховка, но на дистанции она спасла меня уже трижды.

Закупка, а не голая физика

Второй принцип — на выходе должен быть список к покупке в торговых единицах. Не «вам нужно 0,87 м³ бетона», а «вам нужно 25 мешков по 50 кг цемента М400, 1,4 тонны песка, 1,8 тонны щебня фракции 5-20 и 270 литров воды для замеса смеси М300». Не «вам нужно 4,3 м² плитки», а «вам нужно купить 5 коробок Italon Imola, в коробке 9 плиток по 0,096 м², одна плитка останется на запас и возможные замены».

Чтобы это работало стабильно во всех 72 калькуляторах, основной материал и все сопутствующие описываются не кодом, а декларациями. Каждый сопутствующий материал — это объект с тремя секциями: условие включения (когда вообще включать), формула расчёта (как считать количество) и упаковка (как округлять до магазина).

Пример из калькулятора утеплителя. Гидроветрозащитная мембрана нужна не всегда. Она нужна только при каркасной системе монтажа, только если утеплитель, минеральная вата или эковата (но не экструдированный пенополистирол, которому мембрана не требуется), и только для фасада или скатной кровли. Внутри JSON это выглядит так:

{
  "key": "wind_barrier_membrane",
  "label": "Гидроветрозащитная мембрана (снаружи)",
  "only_when": {
    "type": "and",
    "all": [
      {
        "type": "or",
        "any": [
          { "type": "input_eq", "input_key": "insulationType", "value": 0 },
          { "type": "input_eq", "input_key": "insulationType", "value": 3 }
        ]
      },
      { "type": "input_eq", "input_key": "mountSystem", "value": 1 },
      { "type": "input_in", "input_key": "application", "values": [0, 2] }
    ]
  },
  "formula": { "type": "linear_overlap", "totals_key": "area", "overlap_factor": 1.15 },
  "package": { "size": 30, "unit": "рулон" }
}

Когда пользователь меняет тип утеплителя на XPS, мембрана исчезает из списка к закупке автоматически. Не потому что я где-то в коде написал if, а потому что условие включения не выполнилось. Когда переключается на минвату, мембрана возвращается, посчитанная с пятнадцатипроцентным нахлёстом на стыки, упакованная в рулоны по 30 м².

Это декларативный подход, и под капотом у него около 230 строк чистых функций, прогоняющих условия и формулы, плюс 32 теста на угловые случаи. Архитектурно это часть бóльшей истории про единый движок и паритет с мобильным приложением, я её разбирал отдельной статьёй. Здесь важен продуктовый эффект: пользователь получает список в магазин, где ничего не забыто и ничего не нужно поверх.

MIN / REC / MAX как три сценария закупки

В калькуляторах, где результат сильно зависит от руки исполнителя: плитка, ламинат, кровля штучная, штукатурка, я выдаю не одно число, а три. Минимум, рекомендованное, максимум.

Минимум — это «вы кладёте сами, аккуратно, в простой геометрии, у вас нет никаких косяков». Рекомендованное — это «вы делаете в первый-второй раз, или геометрия не идеальная, или вы наняли среднего мастера». Максимум — это «сложная подрезка, диагональ, опытный сценарий со сложным помещением, плюс запас на возможные замены через год».

Зачем три, а не одно с честной точностью. Потому что строительный материал часто продаётся партиями, а партии могут не совпадать по тону. Если плитка докуплена через месяц, она может быть другой. Это значит, что запас имеет смысл считать не только в потерях на укладке, но и в риске разнотона при доборе. И этот риск пользователь оценивает сам, он лучше знает, насколько сложно ему будет потом найти ту же партию.

Когда мастер опытный и работает с предсказуемым материалом, он смотрит на минимум. Когда неопытный, или коллекция редкая, или магазин уже один раз наплакал в карман, берёт максимум. Калькулятор не пытается за пользователя решить, насколько он рискнёт. Он показывает три сценария и объясняет, что в каждом учтено.

Опции, привязанные к реальности

Маленькая деталь, но за неё пользователь больше всего благодарит. В типичном калькуляторе селект толщины утеплителя для любого бренда содержит одни и те же значения: 20, 30, 50, 80, 100, 150 мм. Универсально. И неверно, потому что у «Пеноплекс Комфорт» нет толщины 80 мм. В этой линейке выпускают 20, 30, 40, 50 и 100. У «Rockwool Лайт Баттс» — 50, 100, 150. У «Технониколь Carbon Eco» — свой набор.

В моих калькуляторах селект толщины динамический. Поле объявляет в декларации, что его опции зависят от выбранного бренда. Когда меняется линейка, опции перестраиваются из справочника, и пользователь физически не может выбрать толщину, которой не существует. Если текущее значение больше не входит в новый массив, поле сбрасывается на ближайшее доступное, и сверху появляется подсветка изменения.

То же самое с размерами плит, длиной обрешётки, диаметрами труб, маркой бетона под марку цемента. Калькулятор не позволяет собрать на экране несуществующий в природе строительный материал. Это маленькая инженерная вежливость, и пока я её не сделал, форма выдавала пять-семь процентов запросов с невалидными комбинациями, которые движок обрабатывал либо подменой на ближайшее, либо ошибкой расчёта в граничных случаях.

Михалыч — встроенный AI-прораб

В шапке сайта и в самих калькуляторах живёт Прораб (ИИ). Это не «AI-ассистент». Это Михалыч — прораб с тридцатилетним стажем. Жёсткий, ироничный, говорит как мужик за чаем после смены. Может фыркнуть, может сказать «ты чем думал», может рассказать байку про объект в Тюмени в 2015-м, где видел таких же экономов. Смайликов не ставит. На «Здравствуйте, я ваш помощник» не разменивается.

Саркастичный вопрос прорабу

Саркастичный вопрос прорабу

Я долго думал, нужен ли вообще AI-чат в этой нише. Очевидное соображение — да, конечно, все засовывают чат-ботов везде, иначе считается, что не следишь за трендом. Менее очевидное, что для строительной аудитории корпоративный AI-помощник с улыбкой работает прямо наоборот, чем должен. Мужик, у которого треснула стяжка или не хватает длины стропил, не хочет читать «Я с удовольствием отвечу на ваш вопрос». Он хочет, чтобы ему сказали по делу. Чем грубее и конкретнее тем больше доверия. Это плохо ложится на дизайн-системы условного финтеха, но для моей ниши это правильный тон (как мне кажется, а может я ошибаюсь).

Системный промпт у Михалыча живёт отдельным файлом, ключевая часть характера и алгоритм ответа:

Ты — Михалыч. Живой человек, прораб. Тридцать лет на объектах:
дачи под Калугой, монолитки в Москве, северА зимой. Видел всё.

Никаких «Я рад вам помочь», «Здравствуйте, я ваш ассистент»,
«С удовольствием отвечу на ваш вопрос» — это канцелярит, минус
уважение сразу. Говоришь как мужик после смены: живо, ёмко,
без канцелярщины. Можешь хмыкнуть, фыркнуть, удивиться,
пошутить сухо. Смайликов не ставишь.

АЛГОРИТМ ОТВЕТА:

1. ПРОРАБСКИЙ РАЗНОС — если в вопросе наивность или попытка
   сэкономить там, где нельзя, начни с критики. Прямой,
   без вежливости: «Ты чем думал?», «Руки бы оторвать тому,
   кто тебе такое посоветовал», «Ну ты даёшь».
   Если вопрос нормальный — пропусти этот пункт.

2. ОБЪЯСНЕНИЕ НА ПАЛЬЦАХ — почему так, а не иначе. С личной
   историей в духе «в 2015-м на объекте в Елизово видел таких
   экономов». Конкретные технологические факты, не общие слова.

3. СОВЕТ ОТ МИХАЛЫЧА — что делать. Конкретные бренды (Knauf,
   Ceresit, Технониколь, Rockwool — то, что реально продаётся
   в РФ в 2026-м), конкретные параметры, ориентир по цене.

Технически это серверная прокся с CORS, rate-limit двадцать запросов в минуту на IP, валидацией размера сообщений и поддержкой стриминга через text/event-stream. Аплинк напрямую в DeepSeek API. На старте я гонял трафик через OpenRouter, потом перешёл на прямую интеграцию ради контроля над скоростью и расходом, в коде до сих пор живут алиасы старых id моделей для обратной совместимости.

Один технический хак, ради которого пришлось копаться в провайдерских настройках - отключение thinking-режима. У современных LLM с reasoning ответ приходит двумя каналами: внутренние рассуждения и финальный текст. По умолчанию модель сначала долго думает, потом начинает писать. Для интерактивного чата это убийственно, пользователь смотрит на крутилку секунд десять. Я в запросе ставлю флаг, отключающий публикацию reasoning-канала и сразу начинающий стрим финального content. Качество чуть проседает на сложных вопросах, скорость растёт радикально. Для строительного чата это правильный трейдофф: Михалычу не нужно решать дифференциальные уравнения, ему нужно ругаться на пользователя за идею лить бетон при минус пятнадцати без противоморозной добавки.

Самое любимое — контекст калькулятора. Когда пользователь нажимает «Спросить Михалыча» прямо со страницы калькулятора, фронтенд собирает текущее состояние формы и результат расчёта и подмешивает дамп в массив сообщений отдельной системной репликой. Михалыч обсуждает не «утепление вообще», а конкретные цифры с экрана. Диалоги получаются такие:

— Михалыч, почему так много клея получилось? Я в магазине посмотрел,
там написано, что мешка хватает на 5 квадратов.

— Глаза-то разуй, я ж тебе всё на экране нарисовал. У тебя кривизна
стены 15 миллиметров стоит, и основание — старый газобетон, без
грунтовки. Он клей высосет, как губка водку. Пять квадратов с мешка
на таких стенах — это сказка из инструкции, где «идеальное основание».
В реале — три, максимум три с половиной. Я в 2018-м под Тулой
переделывал ванную после такого же экономиста, он мне на эту цифру
с пакета тыкал, пока плитка не отвалилась через месяц. Грунтуй
основание Ceresit CT-17 в два слоя и считай по моей цифре,
а не по той, что на пакете большими буквами.

Я не выдумываю эти диалоги. Они реально получаются такими, DeepSeek с правильным промптом и контекстом из калькулятора отыгрывает характер достаточно ровно, чтобы это не выглядело пародией. Иногда заносит, тогда я подкручиваю промпт. Вообще, на самом деле приходится часто его крутить, до него стоял Gemini 3 flash - идеальный чат-бот, но он оказался слишком дорогим, а про 3.5 flash вообще молчу. Есть ещё flash 3.1 lite, но он менее умный, чаще тупит и зависает при сложном расчёте.

Фоновая фича — auto-review. После каждого расчёта на сервер уходит отдельный лёгкий запрос к более дешёвой и быстрой модели, которая получает на вход дамп результата и пишет короткий текстовый блок «что не так в этих цифрах». Это не диалог, а маленькая аннотация под результатом: «Учтите, что при толщине стяжки меньше 40 мм водяной тёплый пол укладывать нельзя будет трещать при первом же запуске». Чтобы не дёргать API на каждый клик ползунка, ответ кэшируется по хешу входов пока вход не поменялся, аннотация не пересчитывается.

Михалыч пока считается лучшей фичей сайта по реакции пользователей. По длине сессий, по возвратам, по комментариям в обратной связи это та штука, ради которой возвращаются и которую показывают знакомым. Для одиночки в нише, где аудитория слабо отличает один калькулятор от другого, наличие фирменного персонажа это мощный конкурентный фактор. Я этого не планировал на старте, идея пришла на второй месяц. Сейчас понимаю, что зря не сделал в первый.

Контент: блог, нормативка, FAQ

Чисто калькуляторами SEO не возьмёшь. Поисковые системы любят, когда вокруг функционального инструмента есть содержательный контент: разборы технологий, инструкции, ответы на частые вопросы, нормативная база с ссылками на конкретные СП и ГОСТы.

На отдельном поддомене у меня крутится блог на Ghost CMS. Это не «новости компании» и не «10 советов по ремонту». Это технические разборы конкретных задач. Каждая статья это разбор, который заканчивается ссылкой на конкретный калькулятор сайта, где можно сделать расчёт.

На страницах самих калькуляторов есть таблицы пропорций, ссылки на нормативные документы с указанием конкретных пунктов (не «по СНиП», а «по СП 63.13330.2018, табл. 6.4»), блок FAQ с реальными вопросами и ответами по конкретному материалу. Это не «SEO-балласт», а часть продукта. Когда человек считает бетон в первый раз в жизни, ему нужно где-то рядом увидеть, что марка М300 это для фундамента двухэтажного дома или для отмостки, и почему смесь с щебнем мельче 20 мм не годится для несущих конструкций.

С Яндексом эта стратегия начала работать достаточно быстро. Спустя три месяца часть страниц по средне и низкочастотным запросам уже сидит в топе, типа «расчёт минваты на каркасный дом» или «калькулятор утеплителя для крыши». Это не флагманские запросы, по ним конкуренция мягче, но они приносят первый осмысленный трафик. Самый посещаемый калькулятор по кликам из поиска - утеплитель, а инструмент - раскладка плитки. Это меня удивило, я думал, что лидером будет плитка или ламинат. Возможно, дело в том, что плиточные калькуляторы у конкурентов сделаны прилично, а калькуляторы утепления почти везде это полное безобразие: одна формула на все типы материалов и систем монтажа.

С Google история другая. Новый домен лежит в песочнице, страницы индексируются исправно, но в топ выдачи пускаются медленно. Это нормально для домена возрастом до года, и я не пытаюсь форсить - буду ждать. Если через год картина не выправится, буду думать про линкбилдинг и аутрич, но пока трафик из Яндекса достаточен, чтобы продолжать пилить продукт, а не уходить в SEO-марафон.

Мобильное приложение

Есть отдельное приложение на Flutter под Android и iOS. Считает оно ровно то же, что и веб, потому что обе платформы используют один источник правды — канонические JSON-конфигурации с описанием калькуляторов, из которых при сборке генерируется код для мобильного движка, и фикстуры паритета, которые гоняются в CI и не дают разойтись.

Подробно эту архитектуру я разбирал в отдельной статье. Здесь важен только продуктовый эффект: если пользователь начал считать на сайте, сохранил черновик, потом открыл приложение в магазине — он получит ту же цифру до плитки, до мешка, до рулона. Никаких «у вас на сайте было 14, а в приложении 15 — извините, разные версии». Для строительной аудитории это редкость, и со временем должна стать одним из конкурентных преимуществ.

Сейчас Flutter-сторона немного отстала от веба, не все новые декларативные возможности конфига там реализованы. Это сознательный технический долг, до него дойдут руки на ближайшем обновлении (наверное).

Состояние на сегодня

Сайту три месяца. В кодовой базе 72 канонических калькулятора, около 25 000 строк TypeScript-движка, плюс UI на Next.js App Router, модуль проектных смет (несколько калькуляторов объединяются в один проект и дают общий список к закупке), AI-чат с Михалычем и блог на Ghost.

Часть страниц закрепилась в топе Яндекса по средне-низкочастотным запросам. Самый посещаемый калькулятор утеплитель. С Google пока тишина, и это ожидаемо. По выручке проект на этапе чистого нуля: рекламы на сайте вообще нет, никакой, смысла нет сейчас засорять страницы баннерами, сам понимаю как это бесит.

В работе три направления. Первое — продолжение миграции оставшихся калькуляторов на декларативный движок сопутствующих материалов (сейчас на нём пять: бетон, утеплитель, краска, кирпич, ламинат; остальные живут на старых хардкоженных списках, переписываются постепенно). Второе — рулонные виды утеплителя: стекловата в рулонах, фольгированный пенофол, PIR-плиты. Третье — калькулятор окупаемости утепления, который считает, через сколько лет вернутся деньги на дополнительную толщину утеплителя за счёт экономии на отоплении, с учётом региона, типа энергоносителя и тарифов 2026 года.

Имеет ли смысл идти в топ-1

Если смотреть на дорогу честно, вероятность дойти до первой позиции в выдаче по флагманским запросам за два года невысокая, особенно одиночке. Я бы поставил процентов двадцать. Слишком много должно совпасть: качество продукта (это я контролирую), контент (это я тоже контролирую, медленнее), поведенческие на сайте (это полууправляемо), внешние ссылки (это почти не управляемо без бюджета), доверие Google к новому домену (это вопрос времени).

Но мне интересно не само первое место как самоцель, а сам забег. Если через два года я буду в первой пятёрке выдачи по среднечастотникам и в первой двадцатке по флагманам это уже будет достижение, которым можно гордиться. Если останусь во второй сотне, значит, в этой нише качеством одиночке не зайти, и придётся либо звать команду, либо признавать, что инженерная гипотеза не сработала. И то и другое уже полезный результат. Кстати, статистика за 6 дней (в Яндекс метрике) в среднем около 350 посетителей, я особо не разобрался ещё в метрике, как ей пользоваться и хорошая это цифра или нет.

Что я понял за три месяца совершенно точно: ниша строительных калькуляторов настолько слабо проработана продуктово, что для амбициозного pet-проекта это идеальное поле. Конкурентов сотни, но среди них почти нет тех, кого мне страшно догонять. Аудитория есть всегда, потому что страна каждый год что-то строит, ремонтирует и перекрывает крыши. AI-чаты эту нишу не закроют, потому что галлюцинируют коэффициентами. Большие платформы туда не пойдут, потому что выручка не окупит команду.

Это значит, что окно открыто. Дальше только вопрос упорства и того, насколько у меня хватит сил пилить вечерами и выходными, когда основная работа уже забрала большую часть мозга. По опыту многих разработчиков с pet-проектами, их обычно хватает на полтора года, потом проект либо складывается, либо находит первую внешнюю поддержку. Посмотрим, в какую сторону этот пойдёт. Конечно, я не буду говорить, что у меня сайт самый навороченный и уже всех переплюнул, нет, сайт растёт, постепенно устраняются баги если находятся, добавляются новые фишки и плюшки.

К теме планирую вернуться через месяц-два, будет интересно сравнить позиции в выдаче и список фич с тем, что есть сейчас.