№00 · MADE WITH AI · ЯНДЕКС ПРАКТИКУМ · 2026

Реформа КП.

Производственный AI-инструмент для мебельной компании.
209 коммерческих предложений · 1 658 визуализаций · 256 млн ₽ — за 60 дней.

прокрутить

№01 · ДО

Каждое КП —
кустарь.

01

2–3 часа на одно КП

Дизайнер вручную копирует позиции из XLSB-прайса в шаблон, пишет описания «по памяти», подставляет фото, клеит таблицы. Каждое предложение — ручная сборка.

02

Никаких визуализаций

Клиент видит только сухие фото мебели в каталоге. Нет «как это будет выглядеть в моей комнате» — нет эмоции на этапе предложения, нет wow-эффекта.

03

Уфа ≠ Москва

Разные шаблоны, разные пороги подарков, разные брендинг-блоки. Каждый дизайнер пересобирает КП под город руками — ошибки и разночтения неизбежны.

№02 · ПОСЛЕ

Три режима.
Один инструмент.

Минута от прайса до готового DOCX. Дизайнер не пересобирает КП руками и не рисует визуализации в Photoshop — система делает это сама.

ПРОДУКТ 01 · МЕБЕЛЬ КП

Мебель КП

XLSB-прайс + фото мебели → DOCX с AI-описаниями и интерьерной визуализацией.

  1. 01XLSB-прайс + фото мебели
  2. 02Парсер: позиции, материалы, цены
  3. 03AI-описание каждой позиции
  4. 04DOCX по шаблону города
  5. 05AI-визуализация интерьера
Как работает парсер XLSB
  • Бинарный .xlsb читается напрямую — без конверсии в .xlsx, без потерь форматирования.
  • Извлекаются: позиция, материал фасада, размеры, цвет, цена полная и со скидкой.
  • Коды фасадных материалов (PALADIO, RAFAEL, VOLPI и другие) маппятся в человекочитаемые описания для AI-промта.
  • Авто-разделение по городам: Уфа и Москва используют разные прайс-структуры и разные DOCX-шаблоны.
  • Логика подарков: при сумме ≥ 490 тыс. ₽ (Уфа) или ≥ 950 тыс. ₽ (Москва) автоматически добавляется бонус-блок.
  • На выходе — типизированные позиции, готовые к вставке в DOCX и к промтированию модели.

209 КП в продакшне 256 млн ₽ объём 97,8% с AI-описаниями

ПРОДУКТ 03 · AI-RENDER

AI-render

Дизайнер загружает фото комнаты и промт — модель возвращает рендер сцены с мебелью Реформы. Клиент видит свою комнату, пока ничего не купил.

  1. 01Загрузка фото комнаты клиента
  2. 02Промт дизайнера: стиль, мебельный set, акценты
  3. 03Composite-prompt собирается на бэкенде
  4. 04Async-вызов модели через httpx
  5. 05Рендер с историей и галерей команды
Что под капотом
  • Async pipeline: вызов AI не блокирует другие запросы. Один воркер uvicorn держит десятки одновременных рендеров.
  • Per-user квота: 15 рендеров в день для дизайнеров, без лимита для админов — реализовано в middleware/rate_limit.py через GenerationRateLimiter.
  • Полная история: каждый запуск пишется в visualization_logs — статус (PENDING / PROCESSING / COMPLETED / FAILED), время обработки, IP, user-agent, размеры.
  • Retry с backoff: сетевые ошибки и 429 от провайдера не роняют запрос, дизайнер этого не замечает.
  • Auto-purge: результат хранится 48 часов, потом фоновый retention_service удаляет файл и помечает запись.
  • Галерея команды: публичные рендеры видят коллеги, можно поставить эмодзи-реакцию (whitelist из 9 эмодзи).
  • Endpoint квоты: GET /api/visualization/quota отдаёт {limit, used, remaining, reset_at} — UI показывает «3 из 15 осталось» прямо в кабинете.
  • Логирование: каждый промт сохраняется (user_prompt + полный composite-prompt) — на будущее для дообучения и аналитики.

1 658 рендеров 20,5 сек среднее 15/день на дизайнера

№03 · АРХИТЕКТУРА

Под капотом —
четыре слоя, всё асинхронное.

Production-grade Python-стек: FastAPI 100% async, PostgreSQL 15, systemd на хосте. Никаких блокирующих вызовов на hot path-е — один воркер uvicorn держит сотни одновременных запросов.

Слой 01 · Клиент

Vue 3TypeScriptVitePiniaui-neumorphismAxios

SPA на Composition API. JWT в localStorage с auto-refresh при 401. Pinia stores для auth, темы, чата. Polling-чат: 3 сек когда открыт, 10 сек свернут — минус сложность WebSocket-инфраструктуры. ui-neumorphism как кастомная design-система: тактильность без Material UI.

↓ HTTPS · HTTP/2

Слой 02 · Шлюз

NginxLet's EncryptgzipHTTP/2

Reverse-proxy: статика frontend сразу с диска, /api → uvicorn на 127.0.0.1:9080. Кэш woff2/png/css на 30 дней. Auto-renew SSL через certbot cron.

↓ uvicorn · 4 workers

Слой 03 · Backend

FastAPIPython 3.11SQLAlchemy 2.0 asyncasyncpgPydanticslowapiJWT HS256OAuth Mail.ru

Тонкие роутеры → бизнес-логика в services/. Pydantic-валидация на границе HTTP. SQLAlchemy 2.0 async + asyncpg — нет sync-блокировок. Eager-loading через selectinload и joinedload: N+1 невозможен. Rate-limit: 60/мин глобально + 15/день на AI-визуализации per user. JWT с access 30 мин и refresh 7 дней. Mail.ru OAuth на альтернативу логину.

PIPELINE КП

upload → парсер XLSB → AI-описания → DOCX-движок → шаблон города → /generated/*.docx

↓ asyncpg ↓ httpx ↓ filesystem

PostgreSQL 15

  • Async asyncpg, без sync-fallback
  • Alembic миграции (двухступенчатые: dev → prod)
  • CHECK на role, city, kp_type
  • Индексы: email, user_id, created_at desc, (city, is_active)
  • 15 таблиц: users, kps, items, viz, chat, consent, pii_log

AI-сервис

  • Внешняя image-generation модель
  • Async-вызовы через httpx
  • Retry с backoff на сетевых ошибках
  • Каждый запрос → запись в visualization_logs
  • Per-user квота на день (15 для designer)
  • Хранение результатов 48 часов

Файловая система

  • uploads/ — XLSB-прайсы и фото мебели
  • generated/ — итоговые DOCX
  • chat/YYYY/MM/ — вложения чата
  • Auto-purge КП через 2 года (retention_service)
  • Auto-purge AI-рендеров через 48 часов

№ 01

Async везде

FastAPI handlers, SQLAlchemy 2.0 async с asyncpg, httpx для AI-провайдера. Нет ни одного sync-вызова на hot path. Один воркер uvicorn держит сотни одновременных запросов.

№ 02

Тонкий API-слой

Роутер только валидирует и зовёт сервис: route → schema → service → ORM → response. Бизнес-логика в services/: парсер, DOCX-генератор, retention, AI-клиент. Тестируется без HTTP-стека.

№ 03

152-ФЗ из коробки

Append-only журнал доступа к PII (pii_access_log). Отдельная история согласий, нельзя переписать. Self-service удаление аккаунта с анонимизацией. Brute-force защита: счётчик попыток + locked_until.

№ 04

Production-grade ops

Backend живёт как systemd-сервис на хосте — прямой доступ к файловой системе, рестарт через systemctl restart. Docker только под БД. Структурированные логи с trace_id на каждый запрос.

№04 · МЕТРИКИ · ИЗ ПРОДАКШН-БД · 2026-04-28

Цифры —
не нарисованные.

Все значения — реальные, выгружены из production PostgreSQL непосредственно при подготовке этой презентации.

01 / 08

0

Совокупная стоимость коммерческих предложений, выпущенных через сервис.

prod DB · 2026-04-28 · table: kp_documents · sum(total_price_full)

02 / 08

0

Коммерческих предложений за 60 дней.

с 1 марта 2026 · ~25 КП в неделю · 115 за последние 30 дней

03 / 08

0

AI-визуализаций интерьера для клиентов.

в среднем 33 рендера в день · async pipeline

04 / 08

0

Success rate AI-визуализаций.

production-grade надёжность · стабильно под нагрузкой

05 / 08

0

Позиций мебели с AI-описаниями.

531 из 543 · средняя длина 389 символов

06 / 08

0

Adoption — дизайнеров в активном использовании.

17 из 20 designer-аккаунтов сгенерировали ≥ 1 КП

07 / 08

0

Рост AI-генераций март → апрель.

587 → 1 041 · команда наращивает использование

08 / 08

0

Среднее время одного AI-рендера.

end-to-end · от запроса к финальному PNG

№06 · АДОПШН

20 дизайнеров.
2 города.
60 дней до прода.

После одного дня онбординга весь дизайн-департамент Реформы перешёл на regenkp.ru. 17 из 20 в активном использовании. Топ-5 дизайнеров за первые 60 дней:

  1. 01 С. Ш. 25 КП 16 538 365 ₽
  2. 02 Л. А. 22 КП 14 033 604 ₽
  3. 03 К. С. 21 КП 54 095 375 ₽
  4. 04 С. К. 21 КП 21 578 384 ₽
  5. 05 Л. Т. 20 КП 30 452 593 ₽

* Имена анонимизированы инициалами. География: Уфа — 153 КП (73%), Москва — 56 КП (27%).

№07 · ЧТО ДАЛЬШЕ

Roadmap не в Notion —
в коде.