Опубликовано: 23 октября 2026 г.6 мин

Инженеры заменили часть Looker самодельным хостингом HTML-дашбордов на Claude

Компания за 8 месяцев силами трёх инженеров создала на Claude собственный BI-инструмент, который заменил Looker и обошёлся примерно в $20k в год против $150k.

Инженеры заменили часть Looker самодельным хостингом HTML-дашбордов на Claude

Компания платит за Looker около $150k в год — это средняя лицензия Looker примерно на 300 мест. В компании 3 инженера платформы данных при штате около 500 человек, и большая часть недели уходит на Snowflake, dbt-проект, переваливший за 2 000 моделей, и инфраструктуру Airflow, Airbyte, DataHub и Kubernetes.

В феврале один из сотрудников за день сделал на стороне сервис для хостинга HTML-файлов. Через 8 месяцев у сервиса столько же недельных пользователей, как у Looker, возможно даже больше, а использование Looker упало на треть. При этом Looker не заменён полностью: некоторые команды всё ещё работают в нём, у части его дашбордов пока нет замены.

Как появился сервис

Год назад автор считал большинство вывода ИИ «slop»: демо «chat with your data» работали на схеме из 4 таблиц, но не в масштабе компании — SQL выполнялся без ошибок, а числа были неверными. Затем Claude Code с Opus 4.5 стал заметно лучше, и в начале января его принятие в компании резко выросло: он мог работать в репозиториях, использовать инструменты компании и выполнять запрос для проверки чисел перед ответом. Через несколько недель люди из финансов, операций и маркетинга, никогда не открывавшие терминал, целыми днями писали промпты.

Claude начал выдавать много HTML: на запрос анализа получался один файл с графиками, иногда выглядевший лучше дашбордов Looker. Проблема была в том, что файл оставался в папке загрузок, и для передачи его прикрепляли в Slack. Shareable artifacts для Team и Enterprise Anthropic выпустила только в июне 2026.

Мэдди из команды предложила выложить файлы на веб-сервер с внутренним доменным именем и за день собрала сервис: хранение файлов в S3, SSO перед ним и (частично) тесты. Всё работает на Kubernetes, поэтому развёртывание сводилось к добавлению модуля Terraform и Helm-чарта. Она написала небольшой Python-скрипт и упаковала его в плагин Claude: Claude пишет HTML, скрипт отправляет его за SSO, любой в компании может открыть ссылку.

Сначала файлы были простым статическим HTML. В марте добавили live query API с использованием OAuth-токена Snowflake зрителя. Модель прав не писали: в Snowflake уже были роли, которые поддерживались годами; если Snowflake не разрешает читать таблицу продаж, дашборд тоже не может. К апрелю Snowflake OAuth стал единственным способом входа. Экспорт в email и Slack появился в апреле, параметры — в мае, а число недельных зрителей выросло с 23 в марте до 136 в июне.

Безопасность на этом этапе была плохой: JavaScript дашборда выполнялся на том же origin, что и сессия, прав не было, любой сотрудник мог читать любой дашборд — по сути большая дыра XSS. Инструмент всё равно выпустили, потому что он внутренний, за VPN и SSO, и ничего другого не делало эту работу.

Что решили при переделке

Команда решила строить BI-инструмент всерьёз, сохранив тот же S3-бакет, без миграции, ничего не ломая для текущих пользователей и с таким же простым публикованием. Все согласились, что любой по-прежнему может загрузить любой HTML одним промптом, без проверки, шаблона и списка одобренных виджетов. Решали 4 проблемы.

  • Один коннектор вместо скрипта. Скрипт загрузки был скопирован в 2 репозитория и плагин, каждая копия немного отличалась. Все заменили одним remote MCP-коннектором для всей компании, чтобы claude.ai, Claude Code, Claude in Slack и собственный аналитический агент вызывали одни и те же инструменты. Коннектор передаёт токен Snowflake, а API проверяет пользователя через SELECT CURRENT_USER(). Всё, что загружает ИИ, попадает как черновик, и человек должен нажать Publish.
  • Каждый дашборд считается враждебным. Весь продукт по сути XSS по дизайну: любой может загрузить JavaScript, который выполнится в браузере коллеги, и никто его не проверяет. Каждый дашборд работает в песочнице iframe на собственном origin без cookie и со строгим CSP. Дашборд может общаться только с родительской страницей через postMessage; родитель проверяет отправителя, прикрепляет сессию и вызывает API. Токены контента действуют час и работают для одного дашборда, одного зрителя и одного хоста. Код дашборда никогда не касается учётных данных, каждый запрос выполняется от имени смотрящего.
  • Проверки после публикации. Отдельный сервис метаданных асинхронно читает каждую новую версию дашборда: извлекает весь HTML и запросы Snowflake, проверяет загружаемые скрипты и куда отправляются данные, затем набор правил оценивает эти факты. Большинство правил только сообщают: дашборд читает сырые данные вместо модели dbt, скрипт не закреплён на версии, дашборд не открывали 90 дней. Некоторые правила могут заблокировать дашборд: скрипт из пакета, который здесь раньше не использовали, или соединение WebRTC — единственный выход, который CSP не блокирует. Заблокированный дашборд не загружается: зритель видит предупреждение и должен принять его до запуска страницы. Проверки выполняются после публикации, поэтому никто их не ждёт.
  • Права остаются в Snowflake. Каждый запрос выполняется с токеном зрителя; передача дашборда никогда не передаёт доступ к данным. Модель прав не строили и не поддерживали, потому что у каждого вошедшего уже есть пользователь Snowflake с нужными ролями.

Управление контентом собрали примерно за неделю: пространства, папки и общий доступ скопированы с Google Drive — viewer, editor и owner, права наследуются по дереву папок, сильнейшее право побеждает. Версии хранятся по хешу контента, восстановление версии даёт черновик. Добавлены поиск, лайки, запланированные экспорты и команды, синхронизируемые из HR-системы каждый час. Разработка заняла несколько недель.

Затем инструмент распространился: люди начали отмечать Claude в ветках Slack и получать дашборд в ответ, аналитический агент публикует свои дашборды, некоторые репозитории публикуют прямо из CI, большинство публикует из своего Claude. Итог: 325 коммитов, около 74 000 строк кода (20 000 из них тесты) и примерно $6,4k токенов Claude. Срок — 8 месяцев, 3 инженера на стороне плюс несколько друзей, приславших PR; Claude написал большую часть кода.

Сколько это стоит

Аналитический агент используется как измеримый пример: каждый запуск логируется с токенами и стоимостью, каждая публикация связана с запуском. Один дашборд требует от агента около 1 млн токенов от первого вопроса до готовой страницы. После перехода на Opus 5.5 стоимость дашборда упала примерно с $2,50 до примерно $0,50.

Затраты на всё: $8,3k против $100k за 8 месяцев лицензии Looker по средней цене $150k в год — в 12 раз меньше. Из этих $8,3k: $6,4k токены Claude и $1,9k AWS. Эксплуатация стоит около $6k в год в AWS, теперь у сервиса своя база данных, плюс расходы на Claude для новых функций — около $1,3k в месяц с июля. Итого около $20k в год против $150k за Looker, и большая часть этих $20k — разработка нового, а не поддержка.

При покупке Looker компания покупала 4 вещи: интерфейс для графиков, модель прав, семантический слой и хостинг. По словам автора, Snowflake уже даёт права, dbt — семантику, а хостинг HTML-файлов стоит около $500 в месяц. Amjad Masad рассказал Platformer историю Replit: когда он смог подключить хранилище к production Postgres и построить отчёт сам, они «отменили или сократили большинство [своих] аналитических продуктов».

В подсчёте не учтён главный расход — сами инженеры: 3 человека 8 месяцев поверх остальной работы команды платформы данных; честную оценку часов дать нельзя.

Anthropic анонсировала Claude Dashboards в бете 8 октября, за неделю до публикации материала. Автор говорит, что если бы начинал с нуля сегодня, вероятно, сначала посмотрел бы на Claude Dashboards; если у команды сегодня ничего нет, это, вероятно, правильный выбор. Для компании дашборды — лишь часть: инструмент связан с их agent control plane, аналитической платформой и Slack и множеством собственных рабочих процессов. Вывод автора: если нужен инструмент под свои процессы и уже есть платформа и выделенная команда — строить, если только преимущество не в масштабе.

Источник: https://david.lequin.dev/blog/bi-software-is-dead

Поделиться

Обсудить с ИИ

Комментарии(0)

Оставьте комментарий

Войдите, чтобы присоединиться к обсуждению

Читайте также