� Огляд Сторінок та Функціоналу Десктопного Клієнта
🗺 Карта Маршрутів Десктопного Додатку
graph TD Login["/auth/login\n(Вхід до системи)"] -->|Успіх| Home["/\n(Дашборд)"] Register["/auth/register\n(Реєстрація)"] -->|Успіх| Home Forgot["/auth/forgot-password\n(Запит скидання)"] --> Reset["/auth/reset-password\n(Новий пароль)"] --> Login
subgraph Private["🛡 Захищені Маршрути (DashboardLayout)"] Home --> Catalogs["/catalogs\n(Каталоги товарів)"] Home --> AI["/ai-enrichment\n(AI Асистент)"] Home --> Cloud["/cloud-sync\n(Хмарний бекап)"] Home --> Plans["/plans\n(Тарифні плани)"] Home --> Team["/team\n(Команда та Компанія)"] Home --> Settings["/settings\n(Профіль і мова)"] end📄 Детальний Огляд Екранів
1. Дашборд (/)
- Привітання авторизованого користувача з відображенням ролі та активного тарифу.
- Віджети швидкої статистики: підключені каталоги, статус останньої синхронізації, залишок AI-кредитів.
- Кнопка швидкого переходу до тарифів.
2. Каталоги Товарів (/catalogs)
- Перегляд списку завантажених фідів (Rozetka XML, Prom.ua YML, Google Merchant Center CSV).
- Фільтрація за форматом (XML / CSV / YML) та швидкий пошук товарів.
- Політика доступу: якщо термін тарифу завершився, сторінка замінюється компонентом
<ExpiredPlanBlocker />, що запобігає маніпуляціям з товарами.
3. AI Асистент (/ai-enrichment)
- Лічильник доступних AI-кредитів (
aiCredits). - Інструменти автоматичної генерації SEO-описів, структурованих характеристик та перекладів карток товарів.
- Політика доступу: блокується при
isExpired === true.
4. Хмарна Синхронізація (/cloud-sync)
- Моніторинг локальних та хмарних знімків у MinIO / S3.
- Створення моментального знімку бази (
Create Snapshot Now) за допомогою прямого завантаження через Presigned URL. - Політика доступу: блокується при
isExpired === true.
5. Тарифні Плани та Порівняльна Матриця (/plans)
- Сегментований перемикач режимів (Segmented View Switcher):
- 🗂️ Картки тарифів (
LayoutGrid): 4-колонковий адаптивний перегляд тарифів (STARTER,GROWTH,PRO,ENTERPRISE), 4 квоти (Товари, Постачальники, Канали, AI), чітке розділення на доступні можливості (✅) та недоступні в поточному тарифі (❌ сірі закреслені), ціни в грн та знижка -20% за рік. - 📊 Порівняльна матриця (
TableProperties): інтерактивна таблиця 1-в-1 з адмінкою за 4 категоріями:- 📥 Вхідні ліміти (Input Quotas) (
ArrowDownToLine) - 📤 Вихідні канали експорту (Output Channels) (
Share2) - ⚙️ Ресурси та автоматизація (Resources & Automation) (
Cpu) - 🛡️ B2B & Розширений функціонал (Enterprise & Advanced) (
ShieldCheck)
- 📥 Вхідні ліміти (Input Quotas) (
- 🗂️ Картки тарифів (
- Інтерактивні дії клієнта та Оформлення підписки (
PaymentCheckoutModal):- Бейдж та disabled статус «Ваш поточний тариф» для активного плану.
- Для безкоштовного
STARTER: миттєвий перехід без виклику платіжного шлюзу. - Для платних тарифів (
GROWTH,PRO,ENTERPRISE): відкриття модального вікнаPaymentCheckoutModal:- Review: підсумок замовлення, період (щомісяця або щорічно зі знижкою 20%), сума у грн, ліміти SKU/AI/каналів, 256-bit SSL захист WayForPay.
- Оплата: перехід до платіжної сторінки WayForPay (
POST /api/payments/checkout). - Sandbox термінал: швидкі кнопки тестування для симуляції
Approved(успіх) таDeclined(відхилення банком). - Розблокування доступу (
Approved): миттєве подовження ліцензії (30 або 365 днів), оновленняLicenseContextтаNavigationContext, повне зняття блокувальникаExpiredPlanBlockerта доступ до Каталогів, AI та Хмари. - Захист блокування (
Declined): сповіщення про причину відхилення банком, доступ до каталогів залишається заблокованим до успішної оплати.
- Динамічна синхронізація з адмінкою: миттєве відображення оновлених цін, квот та списку переваг з бекенду (
GET /api/plans) без дублювання запитів (Zero-Duplicate Requests). - Завжди залишається доступною для користувача навіть у заблокованому стані!
6. Команда та Компанія (/team)
- Дані компанії: назва організації, власник, бейдж тарифного плану та лічильник днів до завершення дії.
- Редагування назви: власник може оновити назву організації через модальне вікно
EditCompanyNameDialog. - Командні місця (
maxTeamSeats):STARTER/GROWTH: 1/1 місць (Solo-режим) з інформаційним блоком про переваги командної роботи.PRO: до 3 місць (Власник + 2 колеги) з візуальним прогрес-баром використання.ENTERPRISE: безліміт місць (used / ∞).
- Інтелектуальна кнопка «Запросити колегу» (Always Clickable):
- При наявності вільних місць: відкриває форму інвайту
InviteMemberDialog(вибір ролі:MEMBERабоADMIN). - При вичерпаному ліміті або соло-тарифі: відкриває модальне вікно пропозиції апгрейду
UpgradeTeamSeatsDialogз прямим переходом до/plans.
- При наявності вільних місць: відкриває форму інвайту
- Список учасників: картки співробітників, ролі, дата входу та кнопка вилучення (
RemoveMemberDialog), що вивільняє місце в тарифі.
7. Налаштування (/settings)
- Зміна мови інтерфейсу (Українська / English).
- Вибір колірної теми (Zinc, Slate, Stone, Bronze) та перемикач темного/світлого режиму.
- Зміна паролю користувача.
8. Єдина Реактивна Система Синхронізації Лічильників (DataSync)
- Централізована шина подій (
@/lib/syncEvents.ts):SyncDomain:'all' | 'suppliers' | 'feeds' | 'products' | 'categories' | 'quotas' | 'licenses'.- Функції
emitDataSync(domain, detail)та реактивний хукuseDataSync(domains, callback).
- Автоматична узгодженість лічильників:
- При будь-якій мутації (видалення фіду, імпорт товарів, видалення категорій, оновлення постачальника, завершення черги BullMQ) всі залежні компоненти (квоти в шапці
QuotaMetricCard, лічильники картокactiveFeedsCount/productsCount, списки джерел) оновлюються миттєво та тихо в реальному часі без перезавантаження сторінки (0 ms desync).
- При будь-якій мутації (видалення фіду, імпорт товарів, видалення категорій, оновлення постачальника, завершення черги BullMQ) всі залежні компоненти (квоти в шапці
- Захист від дублювання запитів (
Zero-Duplicate Requests):- Усі фонові оновлення захищено через
isFetchingRefтаlastFetchedTokenRef, що гарантує відсутність подвійних або каскадних запитів до API.
- Усі фонові оновлення захищено через
9. Розширений Майстер Імпорту Фідів та Проактивне Блокування Переліміту SKU
- Просторий інтерфейс 95vw:
- Діалогове вікно
ImportFeedWizardDialogадаптовано під розмірw-[95vw] max-w-6xl h-[92vh]для зручного вибору сотень категорій та широкої таблиці попереднього перегляду товарів.
- Діалогове вікно
- Проактивний контроль залишку квоти товарів:
- У реальному часі підраховується сума SKU у вибраних категоріях (
totalSelectedSkus). - Якщо
totalSelectedSkus > remainingQuota:- Відображається контрастний банер з попередженням про перевищення ліміту та точним залишком SKU.
- Кнопка «Розпочати імпорт» блокується (
disabled={true}) з підказкою (title).
- Користувач знімає галочки з зайвих категорій -> як тільки кількість стає
<= remainingQuota, кнопка автоматично активується для безпечного запуску.
- У реальному часі підраховується сума SKU у вибраних категоріях (
10. Локальна Зашифрована База Даних (SQLCipher), Онбординг та Управління Сховищем
- Безпечне локальне зберігання каталогів (0 ms затримка, 100% приватність):
- Усі товари, собівартість та націнки зберігаються безпосередньо на комп’ютері користувача у зашифрованій базі даних SQLite + SQLCipher AES-256 (
database/catalog.db). - Ключ шифрування генерується локально та захищено зберігається в системному сховищі паролів OS Keychain (через Rust
keyring).
- Усі товари, собівартість та націнки зберігаються безпосередньо на комп’ютері користувача у зашифрованій базі даних SQLite + SQLCipher AES-256 (
- Майстер вибору робочої папки (First-Run Workspace Setup / Onboarding):
- Після реєстрації/першого входу з’являється повнорозмірне модальне вікно
FirstRunWorkspaceSetupDialog(з порталом уdocument.bodyта м’яким затемненнямbg-black/40 backdrop-blur-sm). - Пропонується системна рекомендована папка (
~/Documents/SmartFeedStudioData) або можливість вказати власну папку на диску. - Автоматичне розгортання структури:
database/,feeds/,exports/,backups/,logs/.
- Після реєстрації/першого входу з’являється повнорозмірне модальне вікно
- Вкладка «База даних та сховище» у Налаштуваннях (
/settings):- Активна робоча область: поточний шлях, статус шифрування SQLCipher AES-256, кнопка «Відкрити в провіднику» та кнопка «Змінити папку» (
MigrateWorkspaceDialog). - Використання дискового простору: картки загального об’єму, розміру БД, фідів, експортів та бекапів.
- Локальні лічильники: кількість збережених товарів, постачальників та підключених фідів.
- Операції: створення бекапу (
create_local_backup), дефрагментація та оптимізація (run_database_maintenance/ VACUUM), очищення тимчасового кешу фідів (clear_storage_cache).
- Активна робоча область: поточний шлях, статус шифрування SQLCipher AES-256, кнопка «Відкрити в провіднику» та кнопка «Змінити папку» (
11. Єдиний Принцип Побудови Сторінок та Інтерактивний AI-Асистент у Шапці
- Компактні шапки без громіздких банерів: усі масивні статичні інформаційні банери (як у медіасховищі) вилучено для максимального вивільнення вертикального простору під робочі каталоги й таблиці.
- Іконка розділу + заголовок + кнопка
[i]: у хлібних крихтах шапки виводиться іконка маршруту (<Cloud />,<Layers />,<Truck />тощо), назва сторінки та інтерактивна кнопка[i]. - Контекстна модалка від 3D AI-асистента (
PageHeaderGuide): при кліку відкривається діалогове вікно з 3D аватаром AI Copilot, роллю, описом розділу, чеклистом ключових можливостей та порадою від ШІ. - Єдине джерело істини для фото асистента (
useAiAssistantProfile): аватар і метадані асистента централізовано контролюються бекендом (GET/PUT /api/page-guides/assistant/profile) та автоматично синхронізуються скрізь у додатку (у шапці, віджетахAiCopilotCardта гайдах) з надійним локальним офлайн-фолбеком.