CATERIUM · v17.6.0 v17.6.0 · STABILITY & SECURITY - Зафиксирована отдельная rollback-сборка v17.5.31. - Закрыт stored DOM-XSS в старом bootstrap; общий безопасный вывод вынесен в core/sun-safe.js. - Старый bootstrap вынесен из index.html в legacy/bootstrap.js, динамические DOM-вставки защищены от insertBefore/NotFoundError. - Production Edge Function caterium-create-employee возвращена в исходники проекта; секреты остаются только в окружении Supabase. - Убран блокирующий offer-gallery-data.js; оставлены только реально используемые 001.jpg и 002.jpg, неключевые изображения грузятся лениво. - PDF-упаковка сведена в один A4-движок; Light / Editorial Grid / Midnight Glass / Emerald Gold и PDF-каталог повторно проверены визуально. - На мобильной ширине 390 px устранён document-level горизонтальный overflow; горизонтальные ленты прокручиваются внутри своих областей. - Добавлены автоматические syntax/security/release checks и E2E-спецификация для следующих релизов. v17.5.31 · СТАБИЛЬНАЯ НАВИГАЦИЯ ЧАТОВ - Исправлена ошибка insertBefore при добавлении чата в сгруппированное левое меню. - «Чат» — отдельный пункт бокового меню со счётчиком непрочитанных. - Внутри: Общий / Личные / Заказы. - Чат заказа открывается внутри самого заказа отдельной вкладкой «Чат». - Та же переписка доступна из «Чат → Заказы». - Серверная схема чата v29 и RLS не менялись. v17.5.30 · ПРАВА АДМИНИСТРАТОРОВ - У роли «Администратор» теперь можно индивидуально включать и отключать функции. - Явные права сотрудника имеют приоритет над шаблоном роли и на сервере, и в интерфейсе. - Проверка «последний активный администратор» считает других активных администраторов, а не блокирует второго администратора. - Нельзя оставить компанию без активного администратора или без администратора с правом «Пользователи и права». - Серверные изменения: SUPABASE-ADMIN-RIGHTS-V30.sql. РЕГИСТРАЦИЯ - Регистрация: название компании, email, пароль, подтверждение пароля. - Подтверждение email по ссылке не требуется. - После регистрации Caterium автоматически входит в аккаунт и создаёт компанию. ПОЛЬЗОВАТЕЛИ И ПРАВА 1. Настройки → Аккаунт → Пользователи и права. 2. Нажмите «+ Добавить сотрудника». 3. Укажите имя, email и роль. 4. Новый аккаунт создаётся сразу и получает временный пароль; существующий аккаунт просто добавляется в компанию. 5. При первом входе по временному паролю сотрудник задаёт новый пароль. ЧАТЫ - «Чаты» в основной навигации: общий чат компании и личные диалоги сотрудников. - В сохранённых заказах есть «Обсуждение», а в карточках заказов — кнопка «Чат». - Есть непрочитанные, прочтение, «печатает…» и онлайн-статус. - Можно отправлять фото и файлы: до 5 за сообщение, до 15 МБ каждый. - Личные чаты серверно доступны только двум участникам; данные разных компаний изолированы. - Вложения хранятся в приватном Supabase Storage bucket sun-chat. ДЛЯ ТЕКУЩЕГО SUPABASE - SUPABASE-CHAT-V29.sql уже применён. Для нового проекта выполняйте его после базовых/SaaS/RBAC миграций. Сборка v17.5.21. Главное изменение: Настройки разделены на 6 вкладок — Аккаунт, Оформление, Предложение, Заказы, Справочники и Документы. На мобильных вкладки прокручиваются горизонтально, последняя открытая вкладка запоминается. Резервное копирование и блок стабильности остаются скрыты из обычных Настроек. Что изменено в v17.5.19: - Исправлен выход из аккаунта: кнопки «Выйти» теперь завершают локальную сессию Supabase без зависания на сетевой синхронизации, с аварийным локальным сбросом токена текущего проекта. - При выходе текущая локальная копия компании сохраняется отдельно; разделение данных аккаунтов из v17.5.18 сохранено. - Обновлён PWA-кэш, чтобы браузер не оставался на старом обработчике выхода. Что было добавлено в v17.5.18: - рабочие данные теперь изолируются по облачной компании/workspace на одном устройстве; - при смене аккаунта локальная копия предыдущей компании сохраняется отдельно в IndexedDB и очищается перед загрузкой другой компании; - новая компания стартует без заказов, клиентов, финансов, склада и прочих рабочих данных, но с текущим каталогом из 113 позиций; - фотографии каталога оптимизированы без смены формата (JPEG), чтобы уменьшить размер дистрибутива; - старый статический PDF-каталог удалён из архива: актуальный PDF формируется по текущим данным приложения через кнопку «Скачать PDF». Структура релиза сохранена без изменения облачной архитектуры: браузерные модули объединены в app-runtime.js, мобильный CSS встроен в index.html. Фотографии боксов хранятся обычными JPG в папке catalog: legacy-каталог 001.jpg–060.jpg находится там полностью, а актуальный каталог использует current-001.jpg–current-113.jpg. Перед первым запуском start-mobile-server.bat выполняет prepare-catalog-photos.js: он проверяет все 113 актуальных фотографий, один раз докачивает отсутствующие по исходным ссылкам сайта и только после полного результата запускает server.js. Во время обычной работы server.js больше не загружает фотографии с Tilda/CDN — каталог и PDF используют локальные файлы. После успешной первой подготовки интернет для фотографий каталога не нужен. Финальная фотогалерея предложения хранится отдельными JPEG в папке offer-gallery; преобразование изображений для PDF выполняется только после нажатия «Скачать PDF». Файлы .sun-sync-secret, sun-sync-data.json и PHONE-LINK.txt намеренно не входят в чистый релиз: server.js создаёт их автоматически при первом запуске. Это не удаляет пользовательские данные из уже работающей установленной папки — при обновлении поверх существующей папки её текущие файлы данных нужно сохранить. ВАЖНО ДЛЯ ПЕРВОГО ЗАПУСКА: если в архиве ещё нет всех current-001.jpg–current-113.jpg, компьютер должен быть подключён к интернету. Уже скачанные файлы сохраняются, поэтому при обрыве достаточно снова запустить start-mobile-server.bat. Отдельно повторить подготовку можно файлом DOWNLOAD-ALL-CATALOG-PHOTOS.bat. Ниже объединены прежние инструкции проекта, чтобы в папке не было множества отдельных README-файлов. ============================================================================== РАЗДЕЛ ИЗ ADMIN-ACCESS.txt ============================================================================== СОЛНЦЕ КЕЙТЕРИНГ — АККАУНТЫ И ПРАВА (Cloud RBAC) ГЛАВНЫЙ АДМИНИСТРАТОР Email: dpavlov346@bk.ru Роль: Администратор Рабочая база: Солнце Кейтеринг Пароль в архиве не хранится. КАК ВОЙТИ 1. Откройте приложение. 2. На экране «Вход в Солнце Кейтеринг» введите email и пароль облачного аккаунта. 3. После входа рабочая база «Солнце Кейтеринг» выбирается автоматически. 4. Быстрый PIN можно включить в Настройки -> Аккаунт. PIN работает только на этом устройстве. КАК ДОБАВИТЬ СОТРУДНИКА 1. Администратор: Настройки -> Аккаунт. 2. Выберите роль и создайте одноразовый код приглашения. 3. Сотрудник на своём устройстве создаёт аккаунт email + пароль. 4. После входа вводит код приглашения. 5. Администратор открывает «Пользователи и права» и настраивает галочки. МОБИЛЬНЫЙ ДОСТУП Подробно: см. раздел README-MOBILE ниже в этом файле. Постоянная плашка облака поверх всех разделов удалена. ============================================================================== РАЗДЕЛ ИЗ CLOUD-SETUP.txt ============================================================================== СОЛНЦЕ КЕЙТЕРИНГ — ОБЛАЧНАЯ СИНХРОНИЗАЦИЯ 1. Supabase уже подключён к этому билду приложения. 2. SQL-схема, RLS, Storage и Realtime уже развернуты в проекте Supabase. 3. Откройте в приложении Настройки -> Аккаунт. 4. Создайте аккаунт владельца или войдите. 5. Создайте рабочую базу «Солнце Кейтеринг». 6. На первом компьютере нажмите «Перенести текущие данные в облако». 7. Для сотрудников создайте код приглашения. На другом устройстве сотрудник создаёт свой аккаунт, вводит код и получает доступ к общей рабочей базе. Что синхронизируется: - заказы и клиентские данные; - каталог, цены и составы; - склад, движения, поставщики; - финансы, сотрудники, маршруты, настройки и другие рабочие sun*-данные; - загруженные изображения: они переносятся в приватный Supabase Storage. Офлайн: Приложение продолжает работать с локальной копией. Когда интернет появляется, изменения автоматически отправляются в облако. Realtime сообщает другим устройствам об изменениях и обновляет локальную копию. Безопасность: - в браузере используется только Publishable/anon key; - доступ к данным проверяется Row Level Security; - service_role / secret key в браузер добавлять нельзя; - изображения лежат в приватном bucket sun-media. ============================================================================== РАЗДЕЛ ИЗ DEPLOY-ONLINE.txt ============================================================================== ПОСТОЯННЫЙ ВХОД С ТЕЛЕФОНА Приложение уже работает с облачной базой Supabase и не требует компьютера для хранения данных. Чтобы открывать интерфейс из любой сети, папку приложения нужно один раз разместить на HTTPS static hosting (GitHub Pages / Cloudflare Pages / Netlify / Vercel). После публикации на телефоне откройте HTTPS-адрес, войдите под тем же Supabase аккаунтом и добавьте сайт на главный экран как PWA. Компьютер после этого может быть полностью выключен. ============================================================================== РАЗДЕЛ ИЗ README-MOBILE.txt ============================================================================== СОЛНЦЕ КЕЙТЕРИНГ — МОБИЛЬНЫЙ ДОСТУП И ОБЛАКО ВАЖНО: Supabase хранит общую базу данных, но сам интерфейс приложения должен быть открыт по адресу (URL). Вариант 1 — в одной Wi-Fi сети (уже работает): 1. На компьютере запустите start-mobile-server.bat. 2. Откройте PHONE-LINK.txt. 3. На телефоне, подключенном к той же Wi-Fi сети, откройте указанный адрес. 4. Войдите тем же облачным email и паролем. 5. Выберите рабочую базу «Солнце Кейтеринг». Данные подтянутся из Supabase. Вариант 2 — работать с телефона из любой точки мира (рекомендуется): 1. Разместите содержимое этого архива на обычном HTTPS-хостинге статического сайта (например, Cloudflare Pages / Netlify / Vercel). 2. На телефоне откройте полученный https:// адрес в Safari или Chrome. 3. Войдите своим email и паролем. 4. После первого открытия можно добавить сайт на главный экран как PWA. 5. Все устройства работают с одной рабочей базой Supabase; компьютер держать включенным не нужно. АДМИНИСТРАТОР Email: dpavlov346@bk.ru Рабочая база: Солнце Кейтеринг Пароль не хранится в архиве. Используется пароль облачного аккаунта. УПРАВЛЕНИЕ ОБЛАКОМ Постоянная плашка «Облако» поверх всех разделов удалена. Облако и пользователи открываются только через Настройки -> Аккаунт. ОФЛАЙН После первого успешного входа и загрузки базы PWA хранит локальную рабочую копию. При восстановлении интернета изменения синхронизируются с Supabase. ============================================================================== РАЗДЕЛ ИЗ ROLLBACK-V17.txt ============================================================================== ОТКАТ v17 v17 не удаляет старую структуру sun_app_state и не заменяет существующий архив v16. Если при тестировании найдена критическая проблема: 1. Закройте v17. 2. Запустите прежнюю папку v16. 3. Войдите в тот же Supabase аккаунт. 4. Загрузите облачную копию. Новая v17 схема добавлена параллельно и не требуется для запуска v16. Перед восстановлением старого состояния из backup используйте Настройки → Стабильность и резервирование → Восстановить. ============================================================================== РАЗДЕЛ ИЗ SAAS-V16-README.txt ============================================================================== СОЛНЦЕ КЕЙТЕРИНГ — SaaS v16 Что уже работает: - отдельная рабочая база (workspace) для каждой компании; - 14 дней Полного тарифа для новых компаний; - выбор «Пустая база» или «Загрузить демо» при создании компании; - тарифы Базовый / Профессиональный / Полный; - лимиты сотрудников: 1 / 3 / без лимита; - серверная проверка тарифа и функций; - после окончания: 7 дней только просмотр, затем блокировка без удаления данных; - SaaS-кабинет владельца сервиса: компании, тариф, срок, блокировка, индивидуальная функция; - текущая рабочая база Солнце Кейтеринг сохранена на Полном тарифе без практического ограничения срока. Для нового Supabase-проекта: 1. Выполнить SUPABASE-SETUP.sql. 2. Выполнить SUPABASE-RBAC-V3.sql. 3. Выполнить SUPABASE-SAAS-V16.sql. 4. Выполнить SUPABASE-SAAS-V16-FINALIZE.sql. Для текущего Supabase-проекта эти миграции уже применены. Что НЕ входит в v16: - автоматическое списание денег; - платёжный webhook; - публичная страница оплаты/чекаут; - автоматические письма об окончании подписки. Сейчас владелец сервиса может активировать и продлевать тариф вручную из SaaS-кабинета. ============================================================================== РАЗДЕЛ ИЗ V17-STABILITY-README.txt ============================================================================== СОЛНЦЕ КЕЙТЕРИНГ · v17 STABILITY · LOCAL TEST Эта версия предназначена для локального тестирования перед переносом на постоянный сервер. КАК ЗАПУСТИТЬ 1. Распакуйте архив в отдельную папку. 2. Запустите start-local-test.bat. 3. Приложение откроется по http://localhost:8787/ 4. Войдите в тот же облачный аккаунт Supabase. ЧТО ИЗМЕНИЛОСЬ - Старый sun_app_state НЕ удалён и остаётся аварийным мостом. - Заказы, строки заказов, каталог, клиенты и настройки зеркалируются в отдельные таблицы v17. - Облачное сохранение использует проверку revision. Устаревшая вкладка не может молча затереть более новую облачную версию. - Несинхронизированные изменения отмечаются в локальной IndexedDB-очереди. - После успешной синхронизации очередь очищается. - Ошибки JavaScript сохраняются локально и отправляются в облачный журнал после появления интернета. - Раз в день создаётся серверная резервная копия workspace. - В Настройки добавлен блок «Стабильность и резервирование · v17». - Из него можно вручную сделать backup, восстановить backup и выгрузить аварийный JSON. - Добавлен /healthz для будущего серверного мониторинга. ВАЖНО v17 пока использует старую структуру как основной источник для интерфейса, а новую структуру как синхронное зеркало. Это сделано намеренно для безопасного тестирования. После проверки нескольких реальных рабочих дней можно переключить заказы и каталог на новые таблицы как на основной источник. ПЕРЕНОС НА СЕРВЕР ПОТОМ Архитектура уже готова к HTTPS-хостингу: статические файлы + Supabase. Локальный server.js нужен только для удобного тестирования на компьютере. v17.2: клиентские предложения показывают полный состав каждого бокса во всех шаблонах и PDF; высота строк/карточек рассчитывается динамически.