Корпоративная B2B-платформа для производителя горно-шахтного электрооборудования. Проект объединяет публичный сайт, технический каталог, интерактивные 3D-модели, обработку обращений, сервисный учёт, аналитику и AI-рекомендации в одной Flask-системе.
(это старый скриншот, сейчас всё выглядит куда изящнее)
Сайт предназначен не только для презентации компании и продукции. Он закрывает полный цикл работы с потенциальным заказчиком: от просмотра оборудования и технических паспортов до отправки запроса, регистрации неисправности, обработки обращения сотрудником и последующего анализа накопленных данных.
Основные возможности:
- двуязычная публичная часть на русском и английском языках;
- каталог продукции с категориями, характеристиками, файлами и связанным оборудованием;
- интерактивный просмотр GLB-моделей с вращением и масштабированием;
- разделы решений, реализованных проектов, новостей и документов;
- технические паспорта для 15 позиций продукции;
- адаптивная форма коммерческих, сервисных и общих обращений;
- отдельный учёт неисправностей и связанных сервисных работ;
- развитая административная панель с управлением практически всем содержимым сайта;
- сквозная аналитика просмотров, вовлечения, скачиваний, заявок и неисправностей;
- AI-рекомендации по данным сайта и сервисным обращениям;
- AI-анализ загружаемых Excel- и Word-файлов;
- журнал действий администраторов;
- базовые SEO-настройки, Open Graph, canonical и hreflang.
Скриншоты ниже демонстрируют интерфейс на тестовых данных.
Каталог продукции![]() |
Карточка товара и 3D-модель![]() |
Отраслевые решения![]() |
3D-модель решения![]() |
Реализованные проекты![]() |
Контакты и форма обращения![]() |
Административная панель
Общая сводка![]() |
Управление товарами![]() |
Обработка заявок![]() |
Аналитическая панель![]() |
AI-рекомендации по обращениям и неисправностям
GLB-модели можно подключать к товарам, решениям и проектам через административную панель. На публичной странице посетитель может:
- вращать модель;
- приближать и отдалять объект;
- осматривать оборудование до запроса документации или консультации;
- перейти от 3D-просмотра к техническим характеристикам, связанному оборудованию и паспорту изделия.
Главная страница также использует Three.js для отдельной презентационной 3D-сцены.
Админка построена как единый интерфейс управления сайтом. Через неё можно создавать, редактировать, публиковать и удалять:
- страницы и реквизиты компании;
- категории и товары;
- технические характеристики и файлы товаров;
- типы и единицы оборудования;
- группы решений и сами решения;
- проекты и кейсы;
- новости и документы;
- заявки, сервисные обращения и записи о неисправностях.
Для контента поддерживаются русская и английская версии, порядок сортировки, статусы публикации, изображения, технические файлы и 3D-модели. Действия администратора сохраняются в журнале изменений.
Форма обращения меняется в зависимости от выбранной темы. Система обрабатывает:
- коммерческие запросы;
- общие вопросы;
- сервисные обращения;
- сообщения о поломках;
- жалобы и отзывы;
- предложения по улучшению;
- запросы на доработку;
- предложения о сотрудничестве.
Обращение можно привязать к товару, решению, проекту, типу оборудования и конкретной единице оборудования. Для поломок сохраняются приоритет, категория неисправности, повторяемость, необходимость выезда или обратного звонка, ответственный сотрудник и результат работы.
Статусы заявки и связанной неисправности синхронизируются, поэтому аналитика не получает противоречивые данные.
Встроенная аналитика собирает и связывает события публичного сайта с бизнес-объектами. В административной панели доступны:
- просмотры и вовлечение;
- открытия и отправки формы;
- конверсия по этапам воронки;
- скачивания документов и паспортов;
- популярные товары, решения и проекты;
- структура обращений по темам, тону и приоритету;
- динамика неисправностей;
- проблемное оборудование;
- повторные поломки;
- связь неисправностей с решениями и реализованными проектами;
- статистика работы сервисных сотрудников.
Период отчёта переключается между 7, 30, 90 и 365 днями.
AI-модуль подключается опционально через Gemini API. Он используется в двух сценариях.
Модель получает подготовленную сводку без прямого доступа к базе и формирует:
- основной вывод;
- обнаруженные закономерности;
- риски;
- рекомендуемые действия;
- оценку уверенности результата.
В админке можно загрузить:
.xlsx— таблицу Excel;.docx— документ Word.
Система извлекает текст и структуру файла, ограничивает объём входных данных и передаёт подготовленное содержимое AI-модели. Результат возвращается в виде структурированных выводов и рекомендаций. Временные файлы автоматически очищаются.
- Python 3.11+
- Flask 3
- Flask-SQLAlchemy
- SQLAlchemy 2
- Flask-Migrate / Alembic
- Flask-WTF
- SQLite для локальной разработки
- Jinja2
- Three.js
- Google Model Viewer
- Chart.js
- OpenPyXL
- python-docx
- Gemini API
- PowerShell-скрипты для подготовки и запуска под Windows
niva-motor-site/
├── app/
│ ├── blueprints/ # Публичные страницы, API и админка
│ ├── services/ # AI, почта, загрузки и синхронизация данных
│ ├── static/ # CSS, JavaScript, изображения и Three.js
│ ├── templates/ # Jinja-шаблоны сайта и админки
│ ├── models.py # Модели данных
│ └── __init__.py # Фабрика Flask-приложения
├── docs/screenshots/ # Скриншоты для README
├── migrations/ # Миграции Alembic
├── source_documents/ # Исходные паспорта и каталог
├── tests/ # Автоматические проверки
├── setup.ps1 # Первичная подготовка проекта
├── start-dev.ps1 # Локальный запуск
├── create_admin.py # Создание администратора
├── seed.py # Основные начальные данные
├── import_passports.py # Импорт технических паспортов
└── wsgi.py # Точка входа приложения
Нужен Python 3.11 или новее. Рекомендуется Python 3.12.
Откройте PowerShell в корне проекта и разрешите выполнение локальных скриптов только для текущего окна:
Set-ExecutionPolicy -Scope Process BypassПодготовьте окружение и базу:
.\setup.ps1Скрипт:
- создаст
.venv; - установит зависимости;
- сформирует локальный
.env; - применит миграции;
- наполнит базу начальными данными;
- импортирует паспорта продукции;
- синхронизирует справочник оборудования;
- запустит автоматические проверки.
Создайте администратора:
.\.venv\Scripts\python.exe .\create_admin.pyЗапустите проект:
.\start-dev.ps1Адреса после запуска:
Сайт: http://127.0.0.1:5000
Админка: http://127.0.0.1:5000/admin
При первом запуске setup.ps1 создаёт .env на основе .env.example и генерирует секретный ключ.
Для отправки заявок на email заполните SMTP-параметры и включите почту:
MAIL_ENABLED=true
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_USE_TLS=true
MAIL_FROM_EMAIL=no-reply@example.com
LEADS_TO_EMAIL=info@example.comAI_INSIGHTS_ENABLED=true
GEMINI_API_KEY=your-api-key
GEMINI_MODEL=gemini-2.5-flash
GEMINI_TIMEOUT_SECONDS=45Без API-ключа сайт, каталог, заявки и обычная аналитика продолжают работать. Недоступны только AI-рекомендации.
Автоматические проверки запускаются внутри setup.ps1. Их также можно выполнить отдельно:
.\.venv\Scripts\python.exe -m unittest discover -s tests -vПроверяются основные публичные маршруты, защита административных разделов, безопасность загрузок, валидация заявок, синхронизация статусов, публикация контента и работа справочников. После публикации репозитория те же проверки автоматически выполняются в GitHub Actions на Python 3.12 и 3.14 при каждом push и pull request.
В репозиторий не должны попадать .env, рабочая база, реальные заявки, пароли, приватные загрузки и временные файлы. Это уже учтено в .gitignore.
Дополнительно реализованы:
- CSRF-защита административных форм;
- безопасные cookie сессии;
- ограничения типов и размера загружаемых файлов;
- разделение публичных и приватных загрузок;
- защита формы от простых ботов и частых повторных отправок;
- экранирование AI-ответов перед выводом в интерфейс;
- проверка доступности связанных объектов;
- HTTP-заголовки безопасности;
- журнал административных изменений.
Основной пользовательский и административный функционал реализован. Проект проверен локальным запуском: создаётся чистая база, импортируется демонстрационный каталог, подключаются технические паспорта и запускается набор автоматических проверок.
Для production-развёртывания потребуется настроить внешний веб-сервер, постоянное хранилище загрузок, резервное копирование базы, SMTP и отдельный production-секрет.









