История версий
Как развивается платформа: что сделано, для чего и какую ценность это даёт.
v0.27.0
03.08.2026
major
Текущая
Верхний правый угол админ-панели: подпись пользователя и уведомления
Верхний правый угол админ-панели переработан: рядом с аватаром теперь подпись пользователя (имя и роль), появился колокольчик уведомлений с красным бейджем-циферкой непрочитанных событий (как в YouTube), список уведомлений в выпадающей панели и полноценная страница уведомлений с отметкой прочитанными.
Подпись пользователя
- app/Providers/Filament/AdminPanelProvider.php — renderHook USER_MENU_BEFORE выводит блок с именем и ролью пользователя слева от аватара в верхнем правом углу
- resources/views/filament/user-menu-caption.blade.php — имя + человекочитаемая роль (Администратор / Кладовщик / Поставщик / Тестировщик), тёмная тема учтена
- Вместо анонимной буквочки — администратор сразу видит, кто зашёл в систему и с какой ролью
Колокольчик уведомлений
- AdminPanelProvider.php — включён встроенный механизм Filament database notifications: колокольчик в топбаре с красным бейджем количества непрочитанных, выпадающий список последних событий
- database/migrations/2026_08_03_013535_create_notifications_table.php — таблица notifications (uuid, morphs notifiable, data, read_at)
- Модалка — список уведомлений, отметка «прочитано/не прочитано», удаление, «Отметить все прочитанными»
Страница уведомлений
- app/Filament/Pages/Notifications.php — страница /admin/notifications (группа «Администрирование») с таблицей всех уведомлений: заголовок, описание, дата, статус прочтения
- Действия — «Отметить прочитанным / непрочитанным», «Удалить», bulk «Удалить выбранные», кнопка «Отметить все прочитанными»
- resources/views/filament/pages/notifications.blade.php — view страницы
События, порождающие уведомления
- app/Services/NotificationService.php — сервис notifyAdmins/notifyUsers/notifyUser (синхронная запись в таблицу notifications, формат Filament)
- app/Observers/MovementObserver.php — приход/расход/перемещение товара и изменение движений уведомляют администраторов
- app/Observers/ProductObserver.php — добавление нового товара и низкий остаток (количество < 10)
- app/Providers/AppServiceProvider.php — вход пользователя (кроме админа) уведомляет администраторов
- UserResource/Pages/CreateUser.php — создание нового пользователя уведомляет администраторов
- ProductResource/Pages/ListProducts.php — ошибка синхронизации товаров уведомляет администраторов
Backend bober-bob
- config/app.php — версия 0.26.1 → 0.27.0 (env('APP_VERSION', '0.27.0'))
- resources/json/versions.json — добавлена запись 0.27.0 наверх списка
- Проверка — светлая и тёмная темы, колокольчик с бейджем, отметка прочитанными, /admin/notifications
v0.26.1
03.08.2026
major
Ссылка на страницу версий в футере админ-панели
Версия платформы в нижнем левом углу админ-панели (футер сайдбара Filament) стала кликабельной ссылкой: теперь администратор может перейти по ней на страницу /admin/settings/versions и посмотреть полную историю версий платформы. Раньше это был обычный текст без ссылки.
Футер админ-панели
- app/Providers/Filament/AdminPanelProvider.php — renderHook SIDEBAR_FOOTER: версия v{config('app.version')} обёрнута в ссылку на url('/admin/settings/versions')
- Стили — сохранены классы футера (p-4, text-center, text-xs, border-t), добавлены hover:underline и hover:text-серый для явной индикации кликабельности
- Удобство — версия в футере ведёт на страницу «Версии», где виден changelog всех релизов и «Информация о системе»
Единый источник версий
- config/app.php — версия 0.26.0 → 0.26.1 (env('APP_VERSION', '0.26.1'))
- resources/json/versions.json — добавлена запись 0.26.1 наверх списка; страницы /about и /admin/settings/versions показывают актуальную версию
- Проверка — футер админки: клик по версии открывает /admin/settings/versions
v0.26.0
02.08.2026
major
Витрина «О платформе» (/about) и единый источник версий
Страница /about полностью переработана в витрину в стиле admin-platform-heart: hero-блок с текущей версией платформы, сетка возможностей (складской учёт, Telegram-боты, ИИ-агенты, Google Таблицы, RBAC, отчёты), блок «Информация о системе» (PHP, Laravel, MariaDB, сервер), блок доверия (ООО «Студия ИПД»), контакты (Алексей Гапеев: Telegram/телефон/email) и история версий. Устранён источник дублирования: жёстко зашитый массив версий в routes/web.php удалён, страница /about теперь читает единый ресурс resources/json/versions.json (как и /admin/settings/versions). Версия платформы поднята до v0.26.0.
Витрина /about
- Hero-блок — брендинг Бобер Боб (navy #0a0e27 + gold #c9a96e), бейдж «Платформа складского учёта», текущая версия платформы (config app.version)
- Возможности — 6 карточек: складской учёт, Telegram-боты, ИИ-агенты, Google Таблицы, RBAC и безопасность, отчёты и экспорт
- Информация о системе — версия платформы, PHP, Laravel + Filament v5 + Livewire, MariaDB utf8mb4, Bcrypt + Spatie Permission, сервер VDS 185.66.68.122 Ubuntu 22.04
- Доверие — блок «Платформу развивает ООО «Студия ИПД»» с пояснением про юридическое лицо
- Контакты — карточка Алексея Гапеева, ссылки Telegram @aleksey_gapeev, телефон +375 29 576-39-28, email info@ipd.by
- История версий — рендер всех записей versions.json с бейджами типа (major/minor/patch) и меткой «Текущая» на активной версии
- Полезные ссылки — «Войти в систему», «Админ-панель», ipd.by
- Тёмная тема — только тёмный стиль, адаптив под мобильные
Единый источник версий
- routes/web.php — жёстко зашитый массив $versions (строки 16–448) удалён; /about читает resource_path('json/versions.json')
- resources/json/versions.json — единый источник: /about и /admin/settings/versions используют один и тот же файл
- Паттерн — страница версий отдаёт массив ['app_version' => config('app.version'), 'versions' => json_decode(...)]
Backend bober-bob
- config/app.php — версия 0.25.0 → 0.26.0 (env('APP_VERSION', '0.26.0'))
- resources/views/about.blade.php — переписан полностью, standalone-шаблон (без layout), фирменные цвета Бобер Боб
- Проверка — GET /about = 200, GET /admin/settings/versions = 200 на bober-bob.ipd.test; обе страницы показывают v0.26.0
v0.25.0
01.08.2026
major
Карточки клиентов для бота bober-bob-client
Добавлена страница «Карточки клиентов» (/admin/client-cards, группа «Чаты»): список карточек клиентов бота bober-bob-client с синхронизацией с живым n8n-telegram.ipd.by (первоисточник). Персональный контекст клиента хранится в файле ai-kb/bots/bober-bob-client/clients/{telegram_id}.md на n8n-telegram и при разговоре подгружается ботом. Управление из админки bober-bob: просмотр списка (данные с живого через api/clients_list.php), создание новой карточки, редактирование и удаление. Запись/правка идёт через admin/action.php живого n8n-telegram (import_contact, kb_save, delete_contact) с использованием нового N8N_TELEGRAM_ADMIN_TOKEN из .env. Добавлен селектор ботов, детальный просмотр карточки с историей чата, подтверждение удаления и тосты об успехе/ошибке. Версия обновлена до v0.25.0.
Страница «Карточки клиентов»
- Список клиентов — загрузка с живого n8n-telegram (api/clients_list.php: support-clients.md + clients/*.md + chat_history/*.md), кеш 60 сек, refresh=0 байпас кеша
- Детали карточки — имя, telegram_id, бот, персональный контекст (markdown) и история чата (последние ходы)
- Селектор ботов — переключение между ботами n8n-telegram (по умолчанию bober-bot-client)
- Создание/редактирование — модал с полями (имя, telegram_id, контекст); создание через action.php create_client_card + kb_save, правка через import_contact/kb_save
- Удаление — delete_contact с подтверждением; тосты об успехе/ошибке
API n8n-telegram
- api/clients_list.php — POST с secret + target_bot_id; парсит support-clients.md, clients/*.md, chat_history/*.md; отдаёт {ok, target_bot_id, count, clients[]}
- admin/action.php — AJAX-ответы JSON при ajax=1 или X-Requested-With: XMLHttpRequest для delete_contact, kb_save, create_client_card, import_contact (hub_ajax_reply)
- Права — ai-kb/bots/bober-bot-client на живом: www-data:www-data (755, файлы 644); 11 эталонных файлов синхронизированы с локалью
Backend bober-bob
- N8N_TELEGRAM_ADMIN_TOKEN — добавлен в .env/.env.example, ключ config/services.php admin_token
- N8nTelegramService — getClients (кеш 60 сек, refresh=0 байпас), saveClientCard, deleteClientCard, createClientCard, saveClientFile, приватный postAdminAction (form POST на action.php?token=..., заголовок X-Requested-With)
- ClientCardsController — index/save/delete/create; маршруты GET /admin/client-cards/data, POST /admin/client-cards/save|delete|create
- Filament-страница — ClientCards (slug client-cards, группа «Чаты», navigationSort=13) + blade-шаблон
Технически
- config/app.php — версия 0.24.6 → 0.25.0
- routes/web.php — /about: блок 0.25.0
- Тесты — ClientCardsTask75Test: рендер страницы, auth, index-клиенты, кеш/refresh, unknown bot 404, API error surface, save/delete/create, валидация, отсутствие утечки секретов (12 тестов, 35 ассертов)
- Проверка — полный php artisan test зелёный (кроме предсуществующего ExampleTest 302); live-проверки api/clients_list.php (count=2) и action.php (kb_save → {"ok":true}) на живом n8n-telegram.ipd.by
v0.24.6
01.08.2026
major
Автообновление переписки и подсказки по настройке ботов
Раздел «Телеграм боты» (/admin/telegram-bots) теперь обновляет переписку автоматически: каждые 15 секунд выполняется тихий poll с refresh=1, открытый диалог при обновлении не сворачивается, а новые ходы появляются сами с уведомлением «Появились новые сообщения». Добавлен переключатель «Автообновление: вкл/выкл» и живой индикатор «Обновлено: N сек назад». Исправлен корневой баг обновления: Cache::remember с TTL=0 возвращал устаревшие данные из кеша, из-за чего кнопка «Обновить» фактически не подтягивала свежие ходы — теперь refresh=1 полностью обходит кеш (getConversations/getConversationsWithMeta при cacheSeconds<=0 читают источник напрямую). Добавлен сворачиваемый блок «Как настроить бота»: подсказки про bot_id и target_bot_id, отправку ходов из n8n в api/log_turn.php, настройки N8N_TELEGRAM_BASE_URL/N8N_TELEGRAM_API_SECRET в .env, автообновление, тест соединения и получение прямой ссылки на сессию. Версия обновлена до v0.24.6.
Автообновление
- Тихий poll каждые 15 секунд — loadConversations(refresh, silent) с refresh=1; открытый диалог не сворачивается, меню и модалы не перекрываются
- Уведомление о новых сообщениях — при росте числа ходов показывается toast «Появились новые сообщения»
- Переключатель — «Автообновление: вкл/выкл» в шапке страницы; пауза при открытых модалах и скрытой вкладке (document.hidden)
- Индикатор свежести — «Обновлено: только что / N сек назад / N мин назад» в карточке бота
Исправление refresh (корень жалобы)
- Баг — Cache::remember(key, 0, …) сначала читал живой ключ и возвращал устаревшие данные; refresh=1 не сбрасывал кеш
- Фикс — N8nTelegramService: при cacheSeconds<=0 getConversations/getConversationsWithMeta идут напрямую в fetchRaw, минуя Cache::remember
- Проверка — тест: новый ход на n8n-telegram появляется в ответе при refresh=1 сразу, без ожидания 60 сек
Подсказки по настройке
- Блок «Как настроить бота» — сворачиваемая карточка: bot_id = target_bot_id, отправка ходов в api/log_turn.php, N8N_TELEGRAM_BASE_URL/N8N_TELEGRAM_API_SECRET в .env
- Практика — автообновление каждые 15 сек, тест соединения, получение прямой ссылки на сессию через «⋯»
Технически
- config/app.php — версия 0.24.5 → 0.24.6
- routes/web.php — /about: блок 0.24.6
- N8nTelegramService — приватный fetchWithMeta, ранний выход из кеша при cacheSeconds<=0
- Тесты — TelegramBotsTask76Test: автообновление на странице, подсказки, refresh обходит кеш, новые ходы подтягиваются сразу, отсутствие утечки секрета (9 тестов, 34 ассерта)
- Проверка — полный php artisan test зелёный (кроме предсуществующего ExampleTest 302); E2E в headless Chrome
v0.24.5
01.08.2026
major
Телеграм боты: шрифт и контраст, кебаб-меню переписки, публичные ссылки на диалоги, нумерация диалогов
В разделе «Телеграм боты» (/admin/telegram-bots) шрифт интерфейса увеличен с 8-10px до 14px и усилен контраст текста (метки и значения вместо серых тонов). У каждой переписки появилось кебаб-меню с пунктами «Скопировать ссылку» и «Открыть в новом окне». Реализованы публичные ссылки на диалоги: при выборе пункта меню снимок диалога (имя бота, username, имя пользователя, пары «вопрос → ответ») сохраняется в таблицу telegram_conversation_shares (токен Str::random(40), уникальность по bot_key+session_id) и доступен без авторизации по /shared/telegram/{token}. Диалоги пронумерованы №1/№2/... и выводится общее число переписок. Версия обновлена до v0.24.5.
Страница Телеграм боты
- Шрифт 14px — тексты интерфейса переведены с 8-10px на 14px (text-sm), значения читаемые (text-gray-800/text-gray-100 вместо серого на сером)
- Кебаб-меню переписки — у каждого диалога пункты «Скопировать ссылку» (в буфер обмена, toast) и «Открыть в новом окне» (window.open)
- Публичная ссылка — снимок диалога сохраняется в telegram_conversation_shares и доступен без авторизации по /shared/telegram/{token}
- Нумерация диалогов — №1/№2/... на каждой переписке и общее число переписок
Данные и архитектура
- TelegramConversationShare — модель: token(40), bot_key, bot_name, bot_username, session_id, username, user_id, started_at, data(json), created_by; turnCount()
- TelegramShareController.store — snapshot свежего диалога (без кеша) в таблицу, firstOrNew по (bot_key, session_id), отдаёт ok/token/url; только для авторизованных
- TelegramShareController.show — публичный просмотр по токену, view telegram-share (noindex)
- routes/web.php — POST /admin/telegram-bots/share (auth), GET /shared/telegram/{token} (public)
Технически
- config/app.php — версия 0.24.4 → 0.24.5
- routes/web.php — /about: блок 0.24.5
- Миграция — 2026_08_01_000001_create_telegram_conversation_shares_table (token 64 unique, unique(bot_key, session_id))
- Тесты — TelegramBotsTask75Test: страница, share (auth) создаёт token/url, публичная страница 200 без авторизации, неверный token → 404, отсутствие утечки секрета
- Проверка — полный php artisan test зелёный; E2E в headless Chrome (кебаб, ссылка, нумерация, шрифт 14px)
v0.24.4
01.08.2026
major
Телеграм боты: раздел в настройках, управление ботами, переписка из n8n-telegram
Добавлен раздел «Телеграм боты» (/admin/telegram-bots) по образцу «ИИ агентов»: вкладки-селектор ботов (ботов может быть несколько), карточка выбранного бота (имя, username, bot_id, статус, число диалогов/сообщений, время и латентность обновления), панель переписки с раскрывающимися диалогами и парами «вопрос → ответ» из n8n-telegram (admin_dump.php, кеш 60 сек). Управление ботами — модал настроек (имя, username, описание, вкл/выкл, сброс к заводским), кебаб-меню, тест соединения с n8n-telegram и кнопка «Обновить». В /admin/settings добавлена карточка «Телеграм боты». Секрет API n8n-telegram убран из config/services.php в .env (N8N_TELEGRAM_BASE_URL, N8N_TELEGRAM_API_SECRET). TelegramBotConfigService хранит ботов в кеше (settings.telegram_bots) аналогично ai_agents. N8nTelegramService получил getConversationsWithMeta (ошибки, статус, латентность, fetched_at) и отдаёт явный ответ «данные не приходят» при недоступности API. Версия обновлена до v0.24.4.
Страница Телеграм боты
- Вкладочки-селектор — список ботов (name + username + зелёный/серый статус); при нескольких ботах переключение между ними
- Карточка бота — bot_id, статус «Включён/Выключен», число диалогов и сообщений, время обновления, латентность API
- Переписка — раскрывающиеся диалоги, пары «вопрос пользователя → ответ бота» с цветовой маркировкой и временем, авто-скролл вниз, ссылка на дашборд n8n-telegram
- Кебаб-меню — Настроить, Тест соединения, Обновить данные, Включить/Выключить (телепорт в body)
- Модал настроек — имя, username, описание, зелёный переключатель «Включён», Сбросить к заводским
- Модал теста — результат соединения, число диалогов, латентность
- Ошибки — при недоступности API показывается «Данные не приходят» с подсказкой про N8N_TELEGRAM_* в .env
Данные и архитектура
- TelegramBotConfigService — боты как объекты (key=bot_id, name, username, description, enabled), дефолты config/instances.php + оверрайды кеша settings.telegram_bots (TTL 30 суток)
- N8nTelegramService.getConversationsWithMeta — ok/error/status/latency_ms/fetched_at; группы по сессиям, кеш 60 сек; refresh=1 сбрасывает кеш
- TelegramController — conversations(bot, refresh), update, test; сохранена обратная совместимость ответа для дашборда
- Безопасность — секрет n8n-telegram только в .env, дефолт в config/services.php удалён; в интерфейс/JSON он не попадает
Технически
- config/app.php — версия 0.24.3 → 0.24.4
- routes/web.php — POST /admin/telegram-bots/update, POST /admin/telegram-bots/test; /about: блок 0.24.4
- /admin/settings — новая карточка «Телеграм боты»
- Тесты — TelegramBotsTask74Test: страница, карточка в settings, conversations с Http::fake, update, test, отсутствие утечки секрета
- Проверка — полный php artisan test зелёный; E2E в headless Chrome (вкладки, переписка, настройки, тест)
v0.24.3
31.07.2026
major
ИИ-агенты: карточки со статусом, настройки, тест соединения, реальное подключение LLM
Раздел «AI Агенты» (/admin/ai-agents) переработан из формы в наглядные карточки: зелёный индикатор «Включён» (виден и на тёмной теме), детальная информация об агенте (версия, модель, API, тариф, подключение, источник данных, база знаний, баланс/токены), кебаб-меню с быстрым включением/выключением. Настройки каждого агента открываются модалом: имя, модель, провайдер API (regex/OpenAI/OpenRouter/Anthropic), API URL, API-ключ (хранится зашифрованным и показывается частично), подключение, источник данных, описание, база знаний, методология, вкл/выкл, сброс к заводским. Добавлены кнопка «Тест соединения» (проверяет агента: детерминированный режим или реальный вызов LLM) и автоматический запрос баланса (кредиты OpenAI/OpenRouter). В /admin/settings добавлена карточка «ИИ агенты». Реальная LLM-интеграция: AiAgentService.processWithLLM (OpenAI-совместимый chat/completions и Anthropic messages) с системным промптом на базе знаний и актуальных остатков склада; dispatch по агенту в SheetController.agentCommand: если у агента указан API-ключ — отвечает LLM, иначе — детерминированный regex-парсер. API-ключи — только в .env (AI_API, AI_OPENAI_KEY) и в шифрованном виде в кэше настроек. Версия обновлена до v0.24.3.
Страница AI Агенты
- Карточки агентов — имя, ключ, зелёный/серый статус «Включён/Выключен» (работает на тёмной теме), метка провайдера
- Информация об агенте — версия, модель, API, тариф, подключение, источник данных, статус API-ключа (маскирован), баланс/токены, база знаний
- Кебаб-меню — Настроить, Тест соединения, Включить/Выключить (телепорт в body, как в ai-chat)
- Модал настроек — все поля агента + зелёный переключатель «Включён» + Сбросить к заводским
- Модал теста соединения — результат, латентность, пример ответа, повторный тест
Реальная LLM-интеграция
- AgentConfigService — единый доступ к конфигурации агентов: дефолты config/instances.php + оверрайды кэша; API-ключ шифруется (Crypt::encryptString) и нигде не выводится целиком
- AiAgentService.processWithLLM — OpenAI-совместимый POST {api_url}/chat/completions и Anthropic /messages; системный промпт из роли, методологии, базы знаний и актуальных остатков склада (stockSnapshot)
- SheetController.agentCommand — диспетчер по агенту: есть API-ключ → LLM, иначе regex; выключенный агент отвечает отказом
- Баланс — кредиты OpenAI (dashboard/billing/credit_grants) и OpenRouter (credits); для regex — «Встроенный (бесплатно)», для Anthropic — «не публикуется»
Настройки и безопасность
- /admin/settings — новая карточка «ИИ агенты» → /admin/ai-agents
- API-ключи — только в .env (AI_API, AI_OPENAI_KEY) и шифрованными в кэше; в интерфейсе — только маска sk-…xxxx
- Тесты — Task67Test обновлён под новую страницу; добавлены тесты endpoints update/test/balance и LLM-пути с Http::fake
Технически
- config/app.php — версия 0.24.2 → 0.24.3
- routes/web.php — POST /admin/ai-agents/update, POST /admin/ai-agents/test, GET /admin/ai-agents/balance
- Проверка — полный php artisan test зелёный; E2E в headless Chrome (карточка в settings, статусы, модал настроек, тест)
v0.24.2
31.07.2026
major
Кебаб-меню работает: телепорт на <template>, модалы в скоупе, публичные ссылки диалогов
Исправлена ошибка из 0.24.1: меню «появлялось, но раздвигало поле» — Alpine предупреждал «x-teleport can only be used on a <template> tag»: директива была на <div>, из-за чего Alpine не инициализировал поддерево (без позиционирования и обработчиков, оверлей блокировал клики). Теперь единое меню на уровне страницы: <template x-teleport="body"> с x-show (элемент всегда в DOM — стили и клики работают), position:fixed по координатам кнопки «⋯», z-index 1000, закрытие прозрачным оверлеем. Модалы (Агенты, Поделиться, Редактировать, Оценить, Заметки, Удалить) перенесены внутрь x-data — пункты меню открывают их. Ссылки диалогов публикуются через уже публичный маршрут /admin/shared-conversation/{token} (без авторизации — можно открыть в инкогнито и передать клиенту). Версия обновлена до v0.24.2.
Исправление кебаб-меню (корень бага)
- x-teleport только на <template> — в Alpine 3 директива работает исключительно на шаблоне; на <div> она не телепортировала меню, Alpine ронял инициализацию (cloneNode), меню оставалось в потоке и раздвигало таб-бар
- Единое меню на уровне страницы — <template x-teleport="body"> вне цикла вкладок; x-show вместо x-if, чтобы элемент всегда был в DOM
- position: fixed + getBoundingClientRect() — координаты по кнопке «⋯», прижатие к границам окна
- Закрытие прозрачным оверлеем — fixed inset-0 z-index 999 перехватывает клики мимо меню (без гонки кликов, которая была у @click.outside с телепортом)
- Модалы внутри x-data — Агенты/Поделиться/Редактировать/Оценить/Заметки/Удалить теперь в скоупе страницы, пункты меню открывают их
Публичные ссылки диалогов
- /admin/shared-conversation/{token} — маршрут вне middleware auth: ссылку можно открыть без входа (инкогнито) и передать клиенту
- Поделиться из меню — публикация создаёт share_token и URL; копирование кнопкой в модале
Технически
- config/app.php — версия 0.24.1 → 0.24.2
- Тесты — Task67Test расширен (assertSee menuConv/closeTabMenu), общий прогон зелёный
- Проверка — воспроизведение в headless Chrome (Playwright) до и после фикса, E2E-проверка публичной ссылки без авторизации
v0.24.1
31.07.2026
major
Кебаб-меню вкладок: не обрезается и видно целиком
Исправлен баг в /admin/ai-chat: кебаб-меню вкладки диалога обрезалось скролл-контейнером таб-бара (overflow-x-auto) и карточкой чата (overflow-hidden) — меню «загружалось тремя пикселями внизу» и перекрывалось другими элементами. Меню теперь телепортируется в <body> через Alpine x-teleport, позиционируется position:fixed по координатам кнопки «⋯» (расчёт через getBoundingClientRect), z-index поднят до 1000 — меню видно целиком, поверх всего, и не создаёт лишний скролл. Добавлены методы openTabMenu/closeTabMenu, меню закрывается по клику вне его (click.outside). Версия обновлена до v0.24.1.
Кебаб-меню вкладки
- x-teleport="body" — меню переносится в <body>, минуя overflow-контейнеры (таб-бар overflow-x-auto, карточка overflow-hidden)
- position: fixed + getBoundingClientRect() — координаты меню = позиция кнопки «⋯» (left, bottom+6), прижатие к границам окна
- z-index: 1000 — меню поверх модалов и остальных элементов панели
- closeTabMenu() — закрытие по клику вне меню (@click.outside) и при выборе пункта; открывается только одно меню (activeTabMenu)
Технически
- config/app.php — версия 0.24.0 → 0.24.1
- Тесты — test_ai_chat_page_renders расширен проверками x-teleport и z-index (Task67Test: 9/9 зелёные)
- Сборка — php artisan view:cache, npm run build
v0.24.0
31.07.2026
major
Дизайн чата: вкладки диалогов, большое поле ввода, агенты и их настройки
Интерфейс /admin/ai-chat переработан по требованиям Алексея: диалоги стали вкладочками-переключателями сверху (чат больше не уезжает вниз при множестве диалогов, при загрузке сразу виден первый диалог — скроллить не нужно). Поле ввода стало большим и раздвигающимся (минимум 2 строки, авто-рост до 50% высоты окна, растягивается за угол) с явной видимой кнопкой «Отправить» и индикатором «Отправка…». У каждого диалога — кебаб-меню (Поделиться, Редактировать, Оценить, Заметки, Удалить) и копирование ссылки у опубликованных. Добавлен знак «?» об агентах: модал показывает, чем отличаются агенты — описание, модель, подключение, база знаний, методология. Создана страница настройки агентов /admin/ai-agents с формой (имя, модель, подключение, описание, база знаний, методология, вкл/выкл). Агенты описаны в config/instances.php (default/analyst/support). Версия обновлена до v0.24.0.
Дизайн чата (требования Алексея)
- Диалоги вкладочками — таб-бар сверху: «Новый диалог» + вкладка на каждый диалог; при загрузке автоматически открыт первый диалог; чат не смещается вниз при многих диалогах
- Большое поле ввода — textarea rows=2, resize-y, min-h-[76px], авто-рост до 50% высоты окна, растягивается за угол вниз
- Явная кнопка «Отправить» — видимая, со спиннером и текстом «Отправка…» во время запроса
- Кебаб-меню на вкладке — Поделиться / Редактировать / Оценить / Заметки / Удалить; у опубликованных — иконка-ссылка копирования
- Знак «?» об агентах — модал «Агенты платформы»: у каждого агента описание, модель, подключение, база знаний, методология и статус
Агенты и их настройки
- config/instances.php — агенты как объекты: name, description, model, connection, knowledge (массив), methodology, enabled (default/analyst/support)
- AiChat::getAgents() — дефолты из конфига + мерж с cache('settings.ai_agents'), knowledge как массив
- Новая страница /admin/ai-agents — Filament-форма по секциям для каждого агента, действия «Сохранить» (в кеш) и «Сбросить»
- Селект агента в чате — выбор агента перед отправкой + ссылка «Что за агенты?»
Технически
- config/app.php — версия 0.23.1 → 0.24.0
- Тесты — Task67Test: 9/9 зелёные (добавлены test_ai_agents_page_renders, test_agent_command_accepts_explicit_agent; test_ai_chat_page_renders расширен)
- Сборка — npm run build (Tailwind: max-h-[50vh], min-h-[76px]), php artisan view:cache
v0.23.1
31.07.2026
major
Дизайн чата как в ChatGPT: бетонный фон, полный ввод, явный шаринг
Интерфейс /admin/ai-chat переработан под стиль ChatGPT. Убран коричневый фон (панель Filament переведена с золотого #c9a96e на серый Color::Gray; тёмная тема заменена с «кирпичной» на серый бетон). Поле ввода растягивается на всю ширину, автоматически растёт по мере набора, отправка по Enter (Shift+Enter — новая строка). Список диалогов и область сообщений прокручиваются независимо. Кнопка «Поделиться» в шапке и в меню диалога открывает модал с явными действиями «Опубликовать» / «Отменить публикацию»; у опубликованных диалогов в списке слева появилась кнопка копирования ссылки. Версия обновлена до v0.23.1.
Дизайн /admin/ai-chat
- Убран коричневый фон — primary панели Filament: #c9a96e → Color::Gray (серый)
- Тёмная тема-бетон — resources/css/app.css: «кирпичные» #2d1810/#3d2218/#4d2a1f/#1a0f0a заменены на серые #1f2937/#374151/#4b5563/#111827
- Полный ввод — textarea на всю ширину, авто-рост до 200px, Enter отправляет, Shift+Enter — новая строка
- Прокрутка — список диалогов и сообщения прокручиваются независимо, ввод закреплён внизу
Шаринг
- ShareController::toggleShare — поддержка явного параметра share=true/false (опубликовать / отменить)
- Модал публикации — кнопки «Опубликовать» и «Отменить публикацию» (danger)
- Ссылка в списке — у опубликованных диалогов кнопка копирования ссылки с подтверждением «Скопировано»
Технически
- config/app.php — версия 0.23.0 → 0.23.1
- Тесты — добавлен test_share_toggle_publishes_and_unpublishes_explicitly (Task67Test: 7/7 зелёные)
v0.20.1
30.07.2026
major
Полная история версий: ретроспективное версионирование
Проведена полная ревизия всех 55+ заданий проекта Бобер Боб. Восстановлена непрерывная история версий: задокументированы 11 ранее пропущенных версий (v0.11.0→v0.20.0). Каждая версия содержит заголовок, техническое описание и секции с детализацией. Страница /admin/settings/versions обновлена. Версия обновлена до v0.20.1.
Версионирование
- Ретроспектива — проанализированы 55+ файлов заданий и отчётов за 30.07.2026
- 11 пропущенных версий — v0.11.0, v0.12.0, v0.13.0, v0.14.0, v0.15.0, v0.16.0, v0.16.4, v0.16.5, v0.17.0, v0.18.0, v0.19.0, v0.20.0
- Каждая версия — заголовок + описание + секции (достижения, архитектура, статистика)
Изменённые файлы
- resources/json/versions.json — добавлены 12 новых записей версий
- config/app.php — версия обновлена до 0.20.1
- routes/web.php — обновлён массив версий на странице /about
v0.20.0
30.07.2026
major
Telegram-диалоги на дашборде: интеграция с n8n-telegram
Дашборд Google Sheets теперь отображает историю Telegram-диалогов бота @BBmsk_admin_bot. Создан N8nTelegramService, который проксирует данные из API n8n-telegram.ipd.by (admin_dump.php) и группирует по сессиям. Карточка Telegram Бот на дашборде стала интерактивной: раскрывающийся список диалогов с сообщениями пользователя и ответами AI. Добавлен публичный эндпоинт POST /webhook/telegram-log для прямой отправки ходов из n8n в bober-bob.
Архитектура
- N8nTelegramService — сервис с кешированием (60 сек), группировка по сессиям, парсинг JSON
- TelegramController — conversations() для дашборда (auth) + logTurn() для n8n (public)
- Маршруты — GET /admin/telegram/conversations, POST /webhook/telegram-log
Дашборд
- Telegram Бот — карточка с количеством диалогов, раскрывающийся список сессий
- Каждая сессия — user → bot пары с цветовой маркировкой (голубой/серый)
- Live-обновление — данные с кешированием 60 сек через n8n-telegram API
Конфигурация
- .env — N8N_TELEGRAM_BASE_URL, N8N_TELEGRAM_API_SECRET
- config/services.php — секция n8n_telegram с base_url и secret
Статистика
- Новые файлы: 2 (N8nTelegramService.php, TelegramController.php)
- Изменённые файлы: 3 (google-sheets-dashboard.blade.php, routes/web.php, config/services.php)
- Версия: 0.19.0 → 0.20.0
v0.19.0
30.07.2026
major
Дизайн чата AI-агента и страницы sidebar
Исправлен стиль чата AI-агента на дашборде: сообщения ассистента перекрашены в серую гамму (bg-gray-200, text-gray-800, border-gray-400). Созданы две новые страницы в sidebar: «n8n Webhook» (N8nWebhookSettings) в группе «Интеграции» и «Мониторинг системы» (SystemMonitor) в группе «Основное». Версия обновлена до v0.19.0.
Дизайн чата
- assistant bubble — bg-gray-200, text-gray-800, border-gray-400 (было bg-white, text-gray-900, border-gray-200)
- loading — bg-gray-200, border-gray-400, text-gray-500
Новые страницы
- N8nWebhookSettings (sidebar) — группа «Интеграции»: URL, secret, тестовая форма, инструкция для n8n
- SystemMonitor (sidebar) — группа «Основное»: 3 карточки статистики (БД, кеш, запросы) + 6 сервисов с цветными индикаторами
Статистика
- Новые Filament-страницы: 2 · Sidebar группы: Интеграции + Основное
- Версия: 0.18.0 → 0.19.0
v0.18.0
30.07.2026
major
n8n-вебхуки: AI-агент через внешний запрос
Создан N8nWebhookController с эндпоинтами POST /webhook/ai (приём запросов, логирование в AiConversation, вызов AiAgentService, JSON-ответ) и GET /webhook/ai/health (диагностика со статусом таблицы). Добавлен Bearer token auth через config('services.n8n.webhook_secret'), CSRF-исключение, дашборд-карточка с тестовой формой.
Webhook
- POST /webhook/ai — валидация (text, user_id, source, agent), логирование, вызов AiAgentService, JSON-ответ
- GET /webhook/ai/health — версия, PHP, Laravel, статус Google Sheets (sheet_name, last_sync)
- Bearer token — hash_equals() сравнение с config('services.n8n.webhook_secret')
Sidebar и дашборд
- N8nWebhookSettings — страница sidebar: URL, secret, тестовая форма JSON
- Карточка n8n Webhook — на дашборде: endpoint, метод, auth bearer, формат, тест
Статистика
- Новые файлы: 1 (N8nWebhookController.php) · Изменённые: 3
- Версия: 0.17.0 → 0.18.0
v0.17.0
30.07.2026
major
AI-диалоги: AiConversation модель и SheetController
Создана модель AiConversation с миграцией (conversation_id, user_id, telegram_chat_id, role, content, metadata, agent, source). Разработан SheetController с тремя методами: conversations() — получение истории диалогов, agentCommand() — вызов AI-агента из панели, telegramWebhook() — приём Telegram-запросов с отправкой ответов. Создана страница AiChat (sidebar, группа «Интеграции») для просмотра всех диалогов.
Модель и БД
- AiConversation — поля: id, conversation_id (indexed), user_id, telegram_chat_id, role, content (text), metadata (json), agent, source, timestamps
- Scope forConversation() — фильтр по conversation_id
- Scope forUser() — фильтр по user_id
SheetController
- conversations() — GET /admin/sheets/conversations — история для текущего пользователя
- agentCommand() — POST /admin/sheets/agent — вызов AiAgentService + логирование
- telegramWebhook() — POST /webhook/telegram — приём Telegram update, AI-обработка, отправка ответа
Страница AI Чаты
- AiChat (sidebar) — группа «Интеграции»: список всех диалогов, пользователи, превью, раскрытие
- Фильтрация — по conversation_id, source
Статистика
- Новые файлы: 3 (модель, миграция, контроллер) · Новые страницы: 1
- Версия: 0.16.5 → 0.17.0
v0.16.5
30.07.2026
major
Рефакторинг: SyncLogs, Settings, Security, AuditSummary
Страницы SyncLogs, Settings, Security и AuditSummary переписаны с использованием стандартных компонентов Filament. Blade-шаблоны сокращены: кастомный HTML-код форм заменён на {{ $this->form }}. Исправлен конфликт reset() с Livewire (переименован в resetForm()). Старые CSS-правила (fi-section-content) удалены.
Рефакторинг
- SyncLogs — переписан на HasForms + getFormSchema(), 6 PHP-классов + 6 Blade-шаблонов
- Settings, Security, AuditSummary — единый подход Filament Forms
- Исправление — reset() → resetForm() (конфликт имён с Livewire)
- CSS — удалён устаревший .fi-section-content из app.css
Статистика
- Страниц переписано: 4 · PHP-классов: 6 · Blade-шаблонов: 6
- Версия: 0.16.4 → 0.16.5
v0.16.4
30.07.2026
major
Принудительная тёмная тема: единый dark-mode
Платформа переведена на принудительную тёмную тему: удалён переключатель light/dark, все шаблоны используют только dark-варианты стилей. Основной фон — bg-gray-900, текст — text-gray-200/300/400/500. Единая мягкая цветовая схема для панели настроек и безопасности. Исправлен рендеринг SVG-иконок (@svg() → x-filament::icon).
Тёмная тема
- Принудительный dark-mode — переключатель light/dark удалён, все элементы только dark
- 6 Blade-шаблонов — stat, icon, versions, action, security-wrapper, blitz-badge обновлены
- Единая схема — text-gray-200/300/400/500 для всей панели настроек
Исправления
- SVG-иконки — @svg() → x-filament::icon (правильный рендеринг в Filament v5)
- CSS — добавлены правила для select option в тёмной теме
Статистика
- Шаблонов обновлено: 6 · CSS-правил добавлено: 5
- Версия: 0.16.0 → 0.16.4
v0.16.0
29.07.2026
major
Синхронизация с Google Таблицей и журнал синхронизации
Добавлена синхронизация товаров с Google Таблицей: ProductSyncService с автоопределением колонок (Название, Артикул, Категория, Цена) и upsert товаров по артикулу. Создана страница «Журнал синхронизации» (/admin/sync-logs) с историей всех операций импорта. Логирование через Spatie Activitylog. Кнопка «Синхронизировать» на странице товаров.
ProductSyncService
- Автоопределение колонок — поиск заголовков: Название, Артикул, Категория, Цена, Остаток, Единица
- Upsert — обновление/создание товаров по артикулу
- Валидация — проверка обязательных полей, дубликатов, типов данных
Журнал синхронизации
- SyncLogs — страница с таблицей: дата, пользователь, создано/обновлено/ошибки, статус
- Spatie Activitylog — log_name: sync, все операции с детализацией
- Кнопка «Синхронизировать» — на странице товаров, запуск импорта
Статистика
- Новые сервисы: 1 · Новые страницы: 1 · Новые Blade: 2
- Версия: 0.15.x → 0.16.0
v0.15.0
29.07.2026
major
Google Таблицы: интеграция, Ignition, экраны и уведомления
Реализована интеграция с Google Sheets API: SheetConfig модель, GoogleSheetService (read/write/append/update), привязка таблицы через Filament Resource. Установлен Ignition (интеграция с Spatie). Создана страница Screens и система уведомлений (NotificationController, NotificationLogs).
Google Sheets
- SheetConfig — модель с полями: name, url, sheet_id, range, is_active, last_sync_at
- GoogleSheetService — readFromConfig(), writeToCell(), appendRow(), updateRow()
- SheetConfigResource — CRUD в Filament, привязка таблицы через URL
Экраны и уведомления
- Screens — страница управления экранами (визуальные состояния)
- NotificationController — REST API для уведомлений
- NotificationLogs — история отправленных уведомлений
Исправления
- Ignition — установлен и настроен для интеграции со Spatie
- Критические ошибки — исправлено 3 бага при работе с Google API
Статистика
- Новые сервисы: 1 · Новые модели: 1 · Новые страницы: 3
- Версия: 0.14.0 → 0.15.0
v0.14.0
28.07.2026
major
Удаление Inertia: полный переход на Filament (Blade/Livewire)
Кардинальная архитектурная перестройка: удалены все React/TypeScript/Inertia компоненты. 26 .tsx-файлов удалены. Удалены пакеты inertiajs, react, react-dom, tailwindcss, postcss, autoprefixer, typescript. InertiaServiceProvider деактивирован. 4 Inertia-контроллера переписаны на стандартные Laravel Blade. Платформа полностью переведена на Filament (Blade/Livewire).
Архитектура
- Удалены — 26 React/TypeScript/Inertia компонентов и страниц
- Удалены пакеты — inertiajs/inertia-laravel, inertiajs/react, react, react-dom, tailwindcss, postcss, autoprefixer, typescript
- Деактивирован — InertiaServiceProvider из bootstrap/providers.php
Миграция
- 4 контроллера переписаны: DashboardController, AuthController (Inertia → Blade redirects)
- Все страницы — Blade/Filament, больше никаких React SPA
Статистика
- Файлов удалено: 26 .tsx · Пакетов удалено: 8 · Контроллеров переписано: 4
- Версия: 0.13.0 → 0.14.0
v0.13.0
28.07.2026
major
UserMenu, NotificationBell, регистрация и верификация
Добавлен UserMenu в правом верхнем углу с аватаром, именем, ролью и кнопкой выхода. NotificationBell с выпадающим списком последних уведомлений. Реализована регистрация через email с 5-значным кодом подтверждения. Привязка номера телефона к учётной записи.
UserMenu
- UserMenu — аватар, имя, роль, кнопка выхода (TopRight)
- NotificationBell — выпадающий список последних 5 уведомлений
Регистрация
- Регистрация — через email, 5-значный код подтверждения
- Верификация — подтверждение email перед доступом к панели
- Телефон — привязка номера к учётной записи
Статистика
- Новые компоненты: 2 (UserMenu, NotificationBell) · Новые страницы: 2 (Register, Verify)
- Версия: 0.12.0 → 0.13.0
v0.12.0
28.07.2026
major
Тёмная тема по умолчанию и User Switcher
Тёмная тема установлена по умолчанию для всех пользователей. Добавлен User Switcher — переключение между 5 тестовыми учётными записями (Administrator, Warehouse, Partner, Test, User). Решён конфликт авторизации Filament через кастомный LoginPage.
Тёмная тема
- Dark mode — установлен по умолчанию, отключён переключатель light/dark
- Filament panel — darkMode: true в PanelProvider
User Switcher
- 5 учётных записей — Administrator, Warehouse Worker, Partner, Test, обычный User
- Switcher UI — выпадающий список с быстрым переключением
Статистика
- Новые компоненты: 2 · Пользователей: 5 тестовых
- Версия: 0.11.0 → 0.12.0
v0.11.0
28.07.2026
major
Рефакторинг страниц настроек на Filament Forms
Все страницы настроек (/admin/settings/*) переписаны с использованием HasForms + getFormSchema(). 6 PHP-классов созданы (SettingsGeneral, Appearance, Typography, Notifications, Mail, Deploy). Blade-шаблоны сокращены: кастомный HTML заменён на {{ $this->form }}. Исправлен конфликт reset() с Livewire.
Архитектура
- HasForms — все страницы настроек используют Filament Forms API
- 6 PHP-классов — SettingsGeneral, Appearance, Typography, Notifications, Mail, Deploy
- Blade-шаблоны — кастомный HTML-код форм заменён на {{ $this->form }}
Исправления
- reset() → resetForm() — устранён конфликт имён с Livewire компонентом
- CSRF — добавлен meta csrf-token для форм Filament
Статистика
- PHP-классов: 6 · Blade-шаблонов сокращено: 6
- Версия: 0.10.1 → 0.11.0
v0.10.1
28.07.2026
major
Обновление страницы версий и типографика
Полная переработка страницы Release Notes: обновлена типографика с улучшенной контрастностью, добавлены цветовые акценты на ключевых технологиях, убрана вся конфиденциальная информация (учётные данные, пароли, порты). Версионность теперь безопасна для публичного доступа. Текущая версия платформы обновлена до v0.10.1.
Безопасность
- Удалены все учётные данные — пароли, имена пользователей, IP-адреса, порты SSH удалены из всех записей версий
- Безопасность публикации — страница версий теперь безопасна для публичного доступа в интернете
Типографика
- Улучшена контрастность — даты и описания теперь имеют достаточный контраст для чтения
- Цветовые акценты — ключевые технологии выделены золотым цветом (#c9a96e)
- Жирные акценты — важные термины и компоненты выделены жирным шрифтом
- Структурированные секции — каждая версия разделена на логические блоки (описание, технологии, статистика)
Статистика
- Версий задокументировано: 18 (v0.1.0 → v0.10.1)
- Версия: 0.10.0 → 0.10.1
v0.10.0
28.07.2026
major
Переработка страницы входа и создание страницы «О платформе»
Полная переработка страницы авторизации по образцу MedTech: логотип БОБЕР БОБ, заголовок, описание для пользователей, форма входа с поддержкой светлой и тёмной тем. Создана публичная страница «О платформе» (/about) с описанием системы, технической информацией, полезными ссылками и историей версий. Добавлен переключатель темы (light/dark) с сохранением выбора в localStorage. Версия обновлена до v0.10.0.
Страница входа
- Новый дизайн — логотип БОБЕР БОБ (SVG), заголовок «Вход в систему», подзаголовок «Платформа автоматизации складского учёта»
- Описание для пользователей — краткая инструкция по использованию системы
- Переключатель темы — кнопка в правом верхнем углу для переключения light/dark
- Ссылка на About — версия внизу формы кликабельна и ведёт на страницу «О платформе»
- Поддержка темы — все элементы адаптируются под выбранную тему (light/dark)
Страница «О платформе»
- Публичная страница — доступна без авторизации по адресу /about
- Описание платформы — Бобер Боб: система управления складами, товарами и остатками
- Техническая информация — версия, PHP, стек (Laravel 13 + Filament v5 + React), БД, сервер
- Полезные ссылки — Войти в систему, Админ-панель, ipd.by, GitHub
- История версий — 9 ключевых версий с описанием изменений
Инфраструктура
- Переключатель темы (ThemeToggle.tsx) — компонент с иконками луна/солнце, localStorage
- Inline script в app.blade.php — предотвращение flash-of-wrong-theme при загрузке
- Tailwind CSS v4 — добавлен `@custom-variant dark` для class-based dark mode
Статистика
- Новые компоненты: ThemeToggle.tsx, About.tsx
- Обновлённые файлы: Login.tsx, app.blade.php, app.css, routes/web.php, config/app.php
- Версия: 0.9.2 → 0.10.0
v0.9.2
27.07.2026
major
Деплой на staging и production окружения
Развёртывание платформы на боевых серверах: staging (bober-bob-dev.ipd.by) и production (bober-bob.ipd.by). Инфраструктура: Nginx с SSL, MariaDB 10.6, VDS. Настроены DNS-записи через Cloudflare, выпущены SSL-сертификаты, настроен reverse proxy для Laravel. Обе площадки отвечают HTTPS 200.
Деплой staging
- Nginx — reverse proxy для Laravel, SSL termination, статические ресурсы
- SSL-сертификат — выпущен через Let's Encrypt, автоматическое обновление
- MariaDB 10.6 — база данных staging, пользователь с ограниченными правами
- DNS — A-запись через Cloudflare, настроен proxy
Деплой production
- Бекап предыдущей версии — архив кода и дамп базы данных перед обновлением
- Миграция данных — импорт структуры БД и тестовых данных
- Проверка — все маршруты отвечают корректно (login, dashboard, admin)
Статистика
- Серверы: 2 (staging + production)
- Версия: 0.9.1 → 0.9.2
v0.9.1
27.07.2026
major
Восстановление тестовых данных
Восстановление тестовых данных после migrate:fresh. Создан бекап v0.9.0 в архиве. Проверена корректность работы всех модулей после пересоздания базы данных.
Восстановление
- Тестовые данные — восстановлены после migrate:fresh --seed
- Бекап v0.9.0 — создан в архиве для отката
v0.9.0
27.07.2026
major
RBAC, Filament v5, Excel Export, Client Panel
Реализована ролевая модель доступа (RBAC) через Filament Shield: 70 разрешений для 4 моделей, 4 роли. Установлена Filament v5 — PHP-админ-панель для Laravel с 4 CRUD-ресурсами. Добавлен экспорт данных в Excel, дашборд-виджет LowStockWidget и отдельная панель для клиентов.
RBAC через Filament Shield
- 70 разрешений — view/create/edit/delete для 4 моделей (Product, Warehouse, Stock, Movement) + дополнительные
- 4 роли — Administrator (полный доступ), Warehouse (складские операции), Partner (товары и остатки), Test (тестирование)
- Воспроизводимый сидер — roles и permissions создаются автоматически при migrate:fresh --seed
Filament v5
- ProductResource — CRUD + фильтры + badge-категории + пагинация
- WarehouseResource — CRUD + stocks_count (количество остатков)
- StockResource — CRUD + relationship select + expiry_date
- MovementResource — view-only + type badge (приход/расход) + фильтры
Дополнительный функционал
- Excel Export — экспорт отфильтрованных данных в .xlsx на страницах Products, Stocks, Movements
- LowStockWidget — дашборд-виджет с 5 карточками статистики (товары, склады, остатки, дефицит)
- Client Panel — отдельная Filament-панель для розничных клиентов с read-only каталогом
Установленные компоненты
- filament/filament v5.7.3, bezhansalleh/filament-shield v4.3.0, pxlrbt/filament-excel v3.6.1, maatwebsite/excel v3.1.69
Статистика
- Permissions: 70 · Роли: 4 · Resources: 4 · CRUD-страницы: 13 · Панели: 2 (Admin + Client)
- Версия: 0.6.0 → 0.9.0
v0.6.0
23.07.2026
major
Filament v5 admin panel: CRUD ресурсы, роли, база знаний
Установлена Filament v5.7.3 — PHP-админ-панель для Laravel. Созданы 4 CRUD-ресурса: ProductResource, WarehouseResource, StockResource, MovementResource. Добавлен role middleware на все маршруты настроек. Создана база знаний по Laravel (12 секций).
Filament Resources
- ProductResource — CRUD + фильтры + badge-категории + пагинация
- WarehouseResource — CRUD + stocks_count (количество остатков на складе)
- StockResource — CRUD + relationship select (Product, Warehouse) + expiry_date
- MovementResource — view-only + type badge (приход/расход) + фильтры по типу и дате
Исправления Filament v5 API
- Schema вместо Form — form() принимает Filament\Schemas\Schema (изменение API v5)
- BackedEnum для иконок — navigationIcon требует BackedEnum|string|null
- UnitEnum для групп — navigationGroup требует UnitEnum|string|null
Статистика
- Filament Resources: 4 · CRUD Pages: 13 · Role middleware: 9 маршрутов · База знаний: 12 секций
- Версия: 0.5.0 → 0.6.0
v0.5.0
23.07.2026
major
Sidebar, Settings, /admin/ routes
Создан постоянный левый сайдбар (AdminLayout.tsx) с SVG-иконками, навигационными секциями и информацией о пользователе. Добавлен SettingsLayout.tsx с горизонтальными вкладками для 9 страниц настроек. Все маршруты перенесены под /admin/* префикс с 301-редиректами.
Навигация
- AdminLayout.tsx — постоянное левое меню (256px): SVG-иконки, навигационные секции (Основное, Склад, Администрация), информация о пользователе, badge роли, кнопка выхода
- SettingsLayout.tsx — горизонтальные вкладки для страниц настроек
- 9 страниц настроек — General, Appearance, Typography, Security, Notifications, Mail, Deploy, Versions, History
Маршрутизация
- /admin/* префикс — все маршруты перенесены под единый префикс
- 301-редиректы — старые маршруты автоматически перенаправляют на новые
Статистика
- Маршруты: 41 · Страницы настроек: 9 · Layout компоненты: 2
- Версия: 0.4.0 → 0.5.0
v0.4.0
22.07.2026
major
CRUD товаров, складов, остатков, движений
Реализован практический функционал платформы: 5 миграций (products, warehouses, pallets, stocks, movements), 5 Eloquent-моделей с связями и Spatie Activity Log, 3 контроллера с CRUD + CSV-экспорт, 9 React-страниц. Дашборд показывает реальную статистику.
Миграции и модели
- 5 миграций — products, warehouses, pallets, stocks, movements. Foreign keys, timestamps, indexes
- 5 Eloquent моделей — Product, Warehouse, Pallet, Stock, Movement. Связи (belongsTo, hasMany), Spatie Activity Log
Контроллеры и страницы
- ProductController — CRUD + CSV-экспорт + фильтрация
- WarehouseController — CRUD + stocks_count
- StockController — CRUD + stock in/out операции
- 9 React-страниц — Products (Index/Create/Edit/Show), Warehouses (Index/Create/Edit), Stock/Index, Movements
Dashboard
- Реальная статистика — количество товаров, складов, стоимость остатков, движения за сегодня
- CSV-экспорт — скачивание списка товаров в формате CSV
- Seed data — 10 товаров, 2 склада, 10 движений для тестирования
Статистика
- Миграции: 5 · Модели: 5 · Контроллеры: 3 · React-страницы: 9 · Маршруты: 25
- Версия: 0.3.1 → 0.4.0
v0.3.1
21.07.2026
major
4 роли, 4 пользователя, ролевой Dashboard
Расширена ролевая модель с 2 до 4 ролей: Administrator, Warehouse Worker, Partner, Test. Dashboard.tsx обновлён: динамические карточки модулей в зависимости от роли пользователя. RolesAndAdminSeeder воспроизводимо создаёт роли и пользователей.
Ролевая модель
- 4 роли — Administrator (полный доступ), Warehouse Worker (складские операции), Partner (товары и остатки), Test (тестирование)
- 4 учётные записи — каждая роль имеет свою тестовую учётную запись
- Ролевой Dashboard — разные модули для разных ролей: Administrator видит всё, Warehouse Worker — остатки/движения/товары, Partner — товары/остатки
Статистика
- Роли: 4 · Пользователи: 4 (каждый с уникальной ролью)
- Проверено: все 4 роли авторизуются и видят контент по ролям
- Версия: 0.3.0 → 0.3.1
v0.3.0
21.07.2026
major
Авторизация, роли, Dashboard
Реализована система авторизации: Login.tsx — форма входа с React Hook Form + Zod, клиентская + серверная валидация, дизайн в фирменных цветах. Dashboard.tsx — дашборд с информацией о пользователе и навигацией. AuthController — login/logout с редиректами. HandleInertiaRequests middleware.
Авторизация
- Login.tsx — форма входа (login + пароль) с React Hook Form + Zod, клиентская + серверная валидация
- AuthController — login/logout, редиректы (guest → login, auth → dashboard)
- HandleInertiaRequests — передаёт auth.user + flash в React
- Zod schemas — auth.ts для валидации форм
Dashboard
- Dashboard.tsx — дашборд с информацией о пользователе, ролью, навигацией
- Защита — auth middleware на всех маршрутах дашборда
Исправления
- Auth key mapping — Auth::attempt() требует ключ email. Исправлено маппингом credentials
- CSRF token — добавлен meta csrf-token в app.blade.php для Inertia POST-запросов
Статистика
- Страницы: Login, Dashboard · Контроллеры: 1 · Маршруты: 3 · Исправления: 2 критических бага
- Версия: 0.2.1 → 0.3.0
v0.2.1
21.07.2026
major
Modern ecosystem: TypeScript, Sanctum, Spatie, React Hook Form
Установлена современная экосистема пакетов для Laravel и React. Laravel Sanctum для API-токенов. Spatie Permission для ролевой модели. Spatie Activity Log для аудит-лога. TypeScript для строгой типизации. React Hook Form + Zod для форм. TanStack Query для кеширования.
Установлено
- Laravel Sanctum — API-токены для интеграций
- Spatie Permission — ролевая модель (admin/user)
- Spatie Activity Log — аудит-лог для складских операций
- TypeScript — строгий режим, tsconfig.json
- React Hook Form + Zod — формы с валидацией
- TanStack Query — кеширование данных, background-обновления
- clsx + tailwind-merge — утилиты для className
Настроено
- Spatie Permission: конфиг + 5 миграций (roles, permissions, model_has_roles, model_has_permissions, role_has_permissions)
- Spatie Activity Log: конфиг + 1 миграция (activity_log)
- TypeScript: vite-env.d.ts, types/index.ts, строгий режим
- Git — инициализирован репозиторий, .gitignore настроен
Статистика
- Пакеты: 10 новых · TypeScript: 0 ошибок · Vite build: успешен
- Версия: 0.2.0 → 0.2.1
v0.2.0
21.07.2026
major
Laravel 13 + React + Inertia: новая платформа
Полная перезапись платформы: старый MVC-код заменён на Laravel 13.20.0 + React 19 + Inertia.js v3.1.1. Установлен Vite 8.1.5 для сборки. Созданы Welcome.jsx и app.blade.php. БД: MariaDB (utf8mb4), 9 миграций Laravel.
Установлено
- Laravel 13.20.0 — современный PHP-фреймворк
- React 19 + ReactDOM 19 — клиентская часть
- Inertia.js v3.1.1 — связка Laravel + React (JS + PHP adapters)
- Vite 8.1.5 — сборка: React JSX + Tailwind CSS + Inertia
Что добавлено
- Welcome.jsx — приветственная страница с логотипом БОБЕР БОБ
- app.blade.php — точка входа Inertia с CSRF-токеном
- БД — MariaDB (utf8mb4), 9 миграций Laravel
Исправления
- InertiaServiceProvider — в Laravel 13 не обнаруживается автоматически. Зарегистрирован вручную в bootstrap/providers.php
Статистика
- Стек: Laravel 13 + React 19 + Inertia v3 + Vite 8 + Tailwind CSS · БД: 9 таблиц
- Vite build: CSS 35.5KB, JS 316KB · HTTP: 200 OK
- Версия: 0.1.6 → 0.2.0
v0.1.6
21.07.2026
major
Деплой на dev/prod, enterprise дизайн
Полная переработка визуального стиля: cartoon-бобёр заменён на абстрактную геометрическую композицию + словесный знак БОБЕР БОБ. Цвета: тёмно-синий #1a237e + золотой #c9a96e (corporate navy+gold). Деплой на staging и production. Создана резервная копия v0.1.6.
Enterprise дизайн
- Абстрактная геометрическая композиция + словесный знак БОБЕР БОБ (вместо cartoon-бобра)
- Цвета — тёмно-синий #1a237e + золотой #c9a96e (corporate navy+gold)
- 4 CSS-файла обновлены (login, dashboard, about, general)
Деплой
- Staging — развёрнут на VDS, бекап предыдущей версии, импорт БД
- Production — DROP+CREATE БД, импорт данных staging
- Проверка — login 302, dashboard 200, version 0.1.6
Резервная копия
- DB dump — полный дамп базы данных
- code.zip — архив исходного кода
- README + changelog — документация версии
Статистика
- Серверы: 2 (staging + production) · Резервная копия: DB dump + code.zip + README
- Версия: 0.1.0 → 0.1.6
v0.1.5
20.07.2026
major
SVG-логотип: стилизованный бобёр
Создан профессиональный SVG-логотип (~1.5KB) — стилизованный бобёр, тёмно-зелёный фон, тематика складского учёта. Логотип интегрирован в страницу логина и заголовок приложения.
Что добавлено
- SVG-логотип — стилизованный бобёр, тёмно-зелёный фон, тематика складского учёта (~1.5KB)
- Интеграция в login page и app layout
Статистика
- Формат: SVG (векторный, масштабируемый) · Размер: ~1.5KB
- Версия: 0.1.4 → 0.1.5
v0.1.4
20.07.2026
major
Безопасность: очистка конфиденциальных данных
Критическое исправление безопасности: конфиденциальная информация удалена из публичного контента. About-страница переработана: техническая информация оформлена в формате Markdown с подзаголовками.
Безопасность
- Удалена конфиденциальная информация — учётные данные, пароли, порты удалены из публичного контента
- Создан бекап — архив предыдущей версии для отката
Описание платформы
- About-страница переработана: техническая информация оформлена в формате Markdown с подзаголовками
- Жирное выделение ключевых слов (технологии, функции, компоненты)
Статистика
- Безопасность: конфиденциальная информация удалена из публичного доступа
- Версия: 0.1.3 → 0.1.4
v0.1.3
20.07.2026
major
Глубокая очистка контента от MedTech
Полная очистка глубинных медицинских ссылок, оставшихся от шаблона MedTech. Проверены 17 файлов (5 контроллеров, 2 сервиса, 10 страниц). Grep: 0 вхождений «медtech» после очистки.
Очистка контента
- 17 файлов проверены и очищены от медицинских ссылок
- Grep: 0 вхождений «медtech» после очистки
- Версионирование исправлено: начато с v0.1.0 (дата создания Бобер Боб)
Статистика
- Файлы проверены: 17 · Вхождений «медtech»: 0 (было 20+)
- Версия: 0.1.2 → 0.1.3
v0.1.2
20.07.2026
major
Контент: замена MedTech на Бобер Боб
Замена контента: медицинская тематика → «Автоматизация складского учёта Бобер Боб». Обновлены 11 файлов: контроллеры, шаблоны, настройки. About-страница: описание платформы для складского учёта, логистики, импорта продовольствия.
Контент-замена
- 11 файлов обновлены: контент MedTech → «Автоматизация складского учёта Бобер Боб»
- About-страница — описание платформы для складского учёта, логистики, импорта продовольствия
Статистика
- Файлы обновлены: 11 · Тематика: медицина → логистика/складской учёт
- Версия: 0.1.1 → 0.1.2
v0.1.1
19.07.2026
major
Nginx + SSL + Domain
Настроен веб-сервер Nginx на VDS для bober-bob.ipd.by. SSL-сертификат выпущен через Certbot (Let's Encrypt). MariaDB: импортирована база данных, создан пользователь с ограниченными правами. Cloudflare DNS: A-запись для bober-bob.ipd.by.
Инфраструктура
- Nginx — reverse proxy для Laravel, SSL termination, статические ресурсы
- SSL — Certbot (Let's Encrypt), автоматическое обновление
- MariaDB — база данных, пользователь с ограниченными правами
- Cloudflare DNS — A-запись для bober-bob.ipd.by
Исправления
- Session handler — исправлен .user.ini: session.save_path
- Opcache — opcache_reset удалён (вызывал белый экран)
- Маршруты — добавлены недостающие маршруты для Inertia
Статистика
- HTTP: 200 OK · HTTPS редирект
- Версия: 0.1.0 → 0.1.1
v0.1.0
18.07.2026
major
VDS + Nginx + MariaDB: начальная инфраструктура
Развёртывание VDS-сервера для проекта Бобер Боб. Ubuntu 22.04, Nginx, MariaDB. Cloudflare: DNS-зона для *.ipd.by, wildcard SSL. SSH-ключ для доступа. fail2ban, UFW, rate limiting для безопасности.
Инфраструктура
- VDS-сервер — Ubuntu 22.04, выделенные ресурсы
- MariaDB — сервер баз данных с аутентификацией
- Cloudflare — DNS-зона для *.ipd.by, wildcard SSL
- SSH — ключевой доступ для безопасного подключения
- Безопасность — fail2ban, UFW (firewall), rate limiting
Бэкапы
- Автоматические SQL-дампы — регулярное создание копий БД
- .env резервные копии — сохранение конфигурации
Статистика
- ОС: Ubuntu 22.04 · БД: MariaDB · Веб-сервер: Nginx
- Версия: 0.1.0