MatchGuard.ai Master Vision
Master Vision Document

Дві системи,
один джерело правди.

Об'єднаний майстер-документ MatchGuard.ai: операторська CRM і панель адміна в одному файлі. Дані обох документів збережено повністю. Кожна частина має власну наскрізну нумерацію й власні додатки.

Частина IOperator CRM — v0.4 (усе, що бачить і робить оператор)
Частина IIAdmin Panel — v0.3 (роль Admin: керівник команди)
Поза скоупомроль SuperAdmin (окремий розділ), лендінг matchguard-ai.com
01

Чому ми це робимо

На стороні оператора MatchGuard означає: людина заходить у систему і бачить чіткий, спокійний, преміальний інтерфейс, у якому зрозуміло що робити зараз, скільки на цьому можна заробити, і де гроші вже лежать на балансі.

Operator CRM — це робоче місце виконавця. Мінімалізм, швидкість, точна типографіка, відсутність зайвого шуму — але з акцентами там, де це додає азарту: прогрес, стріки, баланс.

02

Хто такий Оператор

Персона, під яку проєктуємо кожен екран:

  • Здебільшого віддалений виконавець із країн з нижчою вартістю праці — LATAM, Східна Європа, Південно-Східна Азія, MENA.
  • Заходить через десктоп (робочі сесії) і телефон (швидкі сесії 10–20 хвилин, перевірка балансу).
  • Працює одразу за гроші — мотивація фінансова, тож фінансовий стан інтерфейсу завжди на видноті.
  • Не є технічним користувачем. Криптогаманець уже має, але інтерфейс не повинен припускати знання Web3.
  • Не реєструється сам — доступ створює Admin. На CRM немає форми реєстрації, лише вхід.
03

Базові правила доступу і поведінки

  • На сайті CRM (app.matchguard.ai) публічна тільки сторінка входу. Усе інше — за авторизацією.
  • Облікові записи створює Admin із адмінки. Оператор отримує логін і початковий пароль на пошту.

При першому вході система примушує:

  1. Змінити пароль.
  2. Підтвердити пошту.
  3. Пройти онбординг-тур (можна скіпнути, але система ввічливо нагадає).
i
Ім'я і прізвище оператор змінити сам не може — тільки Admin. У профілі ці поля показуються як read-only з тултіпом: «Зміна імені доступна лише вашому адмінові. Напишіть йому в чат, якщо потрібно оновити дані».

Може змінити сам: пароль, аватар, мову, тему, налаштування сповіщень, дефолтні налаштування виплат.

04

Технологічний фундамент і архітектура розгортання

CRM і адмінка живуть в одному моно-репозиторії Turborepo, але як два незалежних Next.js-застосунки з окремими білдами і розгортанням на різних доменах. Спільний код (UI-кіт, типи, i18n-словники, API-клієнт) шариться через внутрішні npm-пакети. Бекенд — єдиний NestJS-сервіс, що обслуговує обидва фронти на основі role-based гардів. Деталі — у 4.1–4.3.

ШарТехнологіяЧому
FrontendNext.js 15 (App Router) + TypeScriptДва незалежні застосунки в монорепо, SSR/CSR гнучкість
UI-кітTailwind CSS v4 + shadcn/uiКонтроль над дизайном + швидкість зборки UI
Іконкиlucide-reactЧистий лінійний стиль, дружить з shadcn
АнімаціїFramer MotionПреміальні мікро-анімації
СтанZustand + TanStack QueryБез overhead Redux, розділ серверного/клієнтського стану
ФормиReact Hook Form + ZodТипобезпека, мінімум boilerplate
Темаnext-themesSystem / Light / Dark, SSR-safe
i18nnext-intlНайкраща підтримка App Router, плюрали, RTL
Real-timeSocket.IO ClientСповіщення, чат, оновлення статусів
ГрафікиRechartsДостатньо для дашборду, Tailwind-friendly
BackendNestJS + TypeScriptМодульність, DI, чиста архітектура в довгу
APIREST + WebSocket gatewayREST для CRUD, WS для live
ORM / БДPrisma + PostgreSQL 16Надійна типобезпека
Кеш / QueueRedis + BullMQСповіщення, асинхронні задачі, виплати
ПлатежіNOWPayments (Custody + Mass Payouts)0% збору на виведення, 350+ валют, sandbox, batch/CSV
DevOpsDocker Compose + pgAdminЛокальна розробка і staging
МоніторингSentry, BetterStack/LogtailПомилки фронта/бекенду, аптайм

4.1 Багатодоменна архітектура

Продукт розгорнутий на трьох окремих доменах і на двох серверах:

ДоменРольСервер
matchguard-ai.comПублічний лендінг, маркетинг, збір заявокServer 1 (уже існує)
CRM-домен (TBD)Робоче місце оператораServer 2 (прод-платформа)
Admin-домен (TBD)Панель адміна і SuperAdminServer 2 (прод-платформа)

Свідоме рішення — окремі apex-домени, а не піддомени (app.matchguard-ai.com). Мотивація:

  • Reconnaissance-захист. З бренд-домену не видно, де живуть операторська й адмінська зони — subdomain enum їх не знайде.
  • Ізоляція cookies і origin-boundary. Лендінг з формами й третьосторонніми скриптами не ділить origin з чутливими зонами. Різні apex — жорсткий cookie/CORS boundary за замовчуванням.
  • Індексація. Admin і CRM — robots: noindex, окремий домен посилює ізоляцію від SERP.
  • Бренд-розподіл. Домени можуть виглядати нейтрально (без згадки бренду) для операторських цілей.
i
Фінальний вибір бренд-доменів для CRM і Admin — окреме бізнес-рішення (напр. mg-ops.com / mg-panel.com). Технічно головне — це різні apex-домени.

4.2 Один проєкт чи три? → Монорепо Turborepo

Розглянуто три архітектурні варіанти:

A
Три окремих репозиторії
Ні
ПлюсиМаксимальна ізоляція; простий mental model.
МінусиДублювання UI-кіту, типів, API-клієнтів; синхронізація — біль; ×1.5 рутини.
B
Один Next.js з роут-групами на двох доменах
Ні
ПлюсиОдин код, одне репо, одна пайплайн.
МінусиРизик витоку admin-коду в CRM-бандл через misconfig / bundle-split; складніше довести аудит.
C
Монорепо Turborepo: apps/crm + apps/admin + packages/*
Так
ПлюсиДва незалежних білди (нульовий ризик витоку коду), спільні packages/ui · types · api-client; одна CI, консистентний DX.
МінусиОдноразовий Turborepo-setup.

Структура моно-репо:

matchguard-platform/            (git repo)
├── apps/
│   ├── crm/                    → Next.js → CRM-домен
│   └── admin/                  → Next.js → Admin-домен
├── packages/
│   ├── ui/                     → shadcn обгортки, спільні компоненти
│   ├── types/                  → TS-типи, DTO, енуми (єдине джерело)
│   ├── api-client/             → типізований клієнт NestJS
│   ├── i18n/                   → спільні строки, next-intl утиліти
│   ├── icons/                  → централізовані іконки (lucide)
│   └── config/                 → ESLint / TS / Tailwind preset
└── services/
    └── api/                    → NestJS backend (єдиний для CRM і Admin)

Бекенд — один NestJS-інстанс на приватному API-хості, обслуговує обидва фронти. Розподіл прав — на рівні гардів (@Roles('OPERATOR'), @Roles('ADMIN'), @Roles('SUPERADMIN')). Оператор фізично не може досягти admin-endpoints — блокується гардом на бекенді, навіть маючи URL. CORS-whitelist — тільки CRM- і Admin-домени. Landing лишається окремим проєктом на окремому сервері й у монорепо не потрапляє.

4.3 Взаємодія з лендінгом

Лендінг фізично на окремому сервері й поза монорепо, тож потрібен чіткий контракт передачі даних (заявки, ліди). Схема для MVP — пряма HTTP-передача:

[Landing @ Server 1]  ──HTTPS POST──▶  [Public API endpoint @ Server 2]  ──▶  [Admin DB]
  • Endpoint POST /public/leads. Захист: Cloudflare Turnstile на формі, HMAC-підпис shared secret'ом, rate-limiting по IP, whitelist Referer/Origin.
  • Тіло — лише нечутливі дані заявки. Без auth-токенів і сесій — односторонній публічний вхід. Усі leads логуються (source, IP, UA, timestamp) для антифроду.
  • У БД — окрема таблиця landing_leads (не входить у users). Адмін бачить заявки в секції «Applications» і конвертує дією «Approve as operator» — тоді дані переносяться в users з правильним adminId.
!
Чому не спільна БД: маркетинговий Server 1 не повинен мати мережевого доступу до продової PostgreSQL. Компроміс лендінгу (XSS у CMS, вразливість у сторонньому скрипті) не має відкривати шлях до всієї платформи. Public-API — ізольована точка входу з нульовою довірою.

На майбутнє (якщо трафік зросте): замінити прямий POST на брокер (Redis Streams / NATS / RabbitMQ) з ретенцією 7 днів, щоб лендінг працював навіть під час робіт з API. Для MVP — over-engineering, прямий POST закриває задачу.

05

Інформаційна архітектура

Карта екранів, які бачить оператор:

/login                      → публічна сторінка входу
/operator                   → редирект на /operator/dashboard
/operator/dashboard         → головна (огляд, активна робота)
/operator/tasks             → список призначених задач
/operator/tasks/:id         → деталь задачі (категорії всередині)
/operator/work/:id          → робочий екран (виконання завдань)
/operator/balance           → баланс, історія, статистика
/operator/balance/withdraw  → майстер виведення коштів
/operator/messages          → чат з адміном
/operator/notifications     → центр сповіщень
/operator/profile           → профіль (read-only поля + аватар)
/operator/settings          → налаштування
/operator/help              → FAQ, перезапуск туру, контакти
06

Дизайн-система і відчуття «premium»

Загальний tone

Інтерфейс має дихати. Багато повітря, мало рамок, ніяких градієнтних кнопок з 2014 року. Один акцентний колір + нейтральна шкала. Світла тема — м'які тіні. Темна — без чорного #000: м'який вугільний (#0B0D10 / #111418) з ледь помітними внутрішніми підсвітами карток.

Кольори

Приклад палітри для подальшої деталізації дизайнером:

РольLightDark
Background#FAFAFA#0B0D10
Surface#FFFFFF#15181D
Border#E5E7EB#23272E
Text primary#0B0D10#F3F4F6
Text muted#6B7280#9CA3AF
Accent (brand)TBD by designer
Success#10B981#10B981
Warning#F59E0B#F59E0B
Danger#EF4444#EF4444

Типографіка

Один шрифт — Inter із чіткою шкалою: 12 / 14 / 16 / 20 / 28 / 40. Числа — табулярні (особливо в балансі та статистиці), щоб не «плавали».

Радіуси, тіні, стани

  • Cards / inputs: rounded-xl (12 px); modals: rounded-2xl.
  • Тіні м'які, тільки на елементах, що реально «плавають» — поповер, тостер, модалка.
  • Чіткі й ввічливі empty / loading / error / success стани з ілюстрацією і однією CTA. Ніяких «Сталася помилка» без подробиць.

Анімації

  • Page transitions: легкий fade + slight Y-shift.
  • Toast: slide in від нижнього правого (десктоп) / зверху (мобільний).
  • Hover: 150 ms ease-out. Прогрес-бари — плавна заливка з невеликим shimmer.
  • prefers-reduced-motion поважаємо.
07

Layout і навігація

Desktop ≥ 1024px

┌────────────────────────────────────────────┐
│ ┌────────┐  ┌──────────────────────────┐    │
│ │        │  │ Topbar                   │    │
│ │ Side   │  ├──────────────────────────┤    │
│ │ bar    │  │                          │    │
│ │        │  │     Page content         │    │
│ │        │  │                          │    │
│ └────────┘  └──────────────────────────┘    │
└────────────────────────────────────────────┘

Sidebar (collapsible) — три смислові розділи:

  • Робота: Dashboard · My Tasks · Continue Work (швидкий вхід в останню активну категорію).
  • Гроші: Balance · Withdraw.
  • Зв'язок: Messages (з бейджем непрочитаних) · Notifications.
  • Профіль: Profile · Settings · Help.
  • Внизу — блок «Earned today: $X.XX» + аватар + кнопка згортання.

Topbar справа наліво: language switcher → theme toggle → notifications bell → user menu (Profile, Settings, Logout).

Mobile < 768px

  • Sidebar схований у Drawer (відкривається з лівого краю).
  • Замість sidebar — bottom navigation з 5 пунктами: Home · Work · Balance · Messages · More.
  • Topbar компактний: логотип, баланс, bell, аватар. На робочому екрані — окремий mobile-режим зі збільшеними тач-зонами.

Tablet 768–1023px

Сайдбар згорнутий до іконок за замовчуванням, розгортається на ховер/клік.

08

Перший вхід: повний user journey

Це найважливіша частина продукту. У оператора має скластись враження за перші 5 хвилин, що ним займаються.

Email від системи

«Welcome to MatchGuard. Your admin {AdminName} created an account for you.» — логін, тимчасовий пароль, кнопка «Open the dashboard».

/login

Преміальна центральна картка, субтильна фонова анімація, логотип. Email + password, «Forgot password?» і селектор мови.

Зміна пароля + пошта

mustChangePassword → екран «Set your permanent password». Далі mustVerifyEmail → поле 6-значного коду.

Редирект на dashboard

Усі прелімінарії пройдено → /operator/dashboard.

Welcome modal

«Welcome, {FirstName}! Your admin is {AdminName}. Let's take a 90-second tour.» — кнопки Start tour / Maybe later.

Старт туру

Якщо Start tour → покроковий тур (розділ 09).

Ввічливе нагадування

Якщо Maybe later — м'який pulsing бейдж «Tour available — 90 sec» на Help. Через 24 год — нагадування в центрі сповіщень.

09

Onboarding tour — як в іграх

Технологія і логіка

Обираємо Driver.js (MIT, легка, framework-agnostic, дружить з Next.js 15 через dynamic import). Альтернативи — Onborda або React Joyride v3. Прогрес туру зберігається на бекенді (User.onboardingProgress), щоб продовжити з іншого пристрою. Перезапуск — будь-коли зі сторінки Help.

Тур розбито на 3 акти по ~30 секунд — один безперервний 90-секундний тур втомлює, а три короткі «акти» — це геймдиз-патерн.

Акт 1 · 30с Tour the workspace
  • Підсвітка sidebar: «This is your workspace. Everything you need is here.»
  • My Tasks: «Your admin assigns you tasks — work packages with categories inside.»
  • Balance + баланс у кутку: «Every completed item adds to your balance.»
  • Theme: «Working at night? Switch to dark mode anytime.»
Акт 2 · 40с Your first task
  • «Let's open your first task» → перехід на /operator/tasks.
  • Категорії всередині: «Each category pays a different price per unit.»
  • Кнопка Start working → екран завдання.
  • Демо: кнопки Approve / Reject / Skip і гарячі клавіші 1/2/3.
Акт 3 · 25с Money and help
  • Balance: «When you're ready to withdraw, come here.»
  • Withdraw: «We send payouts in crypto — USDT, USDC, BTC, ETH and more.»
  • Messages: «Need to ask your admin something? Write directly here.»
  • AI-асистент (правий нижній кут): «Stuck on something? Our AI assistant is always here — 24/7.»
  • Фінал: «🎉 You're ready. Good luck and welcome to MatchGuard.»
i
UX-нюанси: кнопка Skip видима на кожному кроці без приниження, лічильник «3/13», затемнення тла без блокування скролу. На мобільному тултіпи показуються знизу екрану.
10

Сторінки CRM — детальний опис

10.1 /login — Sign in

  • Центральна картка ~420 px, легкий glassmorphism, логотип + слоган.
  • Помилки — інлайн під полем, без red'а на весь екран.
  • Внизу: «Forgot password?», селектор мови, лінк на статус системи.
  • Після 5 невірних спроб — м'який captcha (Cloudflare Turnstile).

10.2 /operator/dashboard — Home

Посадкова сторінка — те, що оператор бачить щодня першим. Зверху вниз:

  1. Welcome strip: «Good evening, {FirstName}» + дата + індикатор streak («🔥 5-day streak»).
  2. Active work card: назва активного завдання, прогрес-бар, скільки залишилось і скільки ще заробити, CTA «Continue working».
  3. Today's stats: Tasks done · Earned today · Average rate ($/hour).
  4. Earnings chart: лінійний графік за 14 днів (Recharts).
  5. Activity feed: «+$0.05 — Photo Moderation #023», «Task 'Traders #15' assigned», «Admin sent you a message».
  6. Tips card + Quick actions (mobile only).

10.3 /operator/tasks — My Tasks

  • Вкладки Active / Completed / All; сітка карток (3 кол. desktop, 1 mobile).
  • Картка: title, призначені категорії з лічильниками, загальний прогрес-бар, потенційний заробіток, дедлайн з кольоровим індикатором, кнопка Open.
  • Сортування: за прогресом, дедлайном, призначенням.

10.4 /operator/tasks/:id — Task detail

  • Над фолдом: загальний прогрес + сумарний заробіток із цього завдання.
  • Список лише призначених оператору категорій (інші він не бачить — це принципово): назва, ставка «$0.05/item», прогрес «220/500», очікуваний дохід із решти, CTA Start / Continue.
  • Якщо одиниць немає — статус «Awaiting refill» з тултіпом.

10.5 /operator/work/:id — Робочий екран

Серце продукту. Тут оператор проводить найбільше часу — інтерфейс спокійний, фокусний, швидкий.

┌────────────────────────────────────────────┐
│ Topbar (мінімальний, без sidebar)          │
├────────────────────────────────────────────┤
│  ┌──────────────────────┐  ┌─────────────┐  │
│  │                      │  │ Action      │  │
│  │  Item content        │  │  ✅ Approve [1] │
│  │  (фото / відео /     │  │  ❌ Reject  [2] │
│  │   профіль)           │  │  🚩 Flag    [3] │
│  │                      │  │  ⏭️  Skip   [4] │
│  └──────────────────────┘  └─────────────┘  │
├────────────────────────────────────────────┤
│ Progress • 120/500 • Earned session: $6.00 │
└────────────────────────────────────────────┘
  • Гарячі клавіші 1/2/3/4, авто-збереження після кожної дії — без «Save».
  • Undo останньої дії (Ctrl+Z) впродовж 5 секунд. Skip не зараховує оплату, повертає item у пул.
  • Pause/exit будь-коли — сесія зберігається. На мобільному — нижня панель з великими кнопками + свайпи (опційно).
  • На вибраних категоріях (Deepfake Detection) бічна панель містить підказки — ознаки, на які звертати увагу.

10.6 /operator/balance — Balance

  • Hero: Available — усі виконані одиниці зараховуються миттєво й автоматично, без ручної модерації адміна.
  • Pending — виведення у процесі (від кнопки Withdraw до фінального підтвердження транзакції в мережі). Lifetime earned + CTA Withdraw.
  • Графік earnings (7d / 30d / 90d / All) + donut-розбивка по категоріях.
  • Tabs: Earnings history (дата, завдання, категорія, кількість, сума) · Withdrawals history (статус, txid → explorer).

10.7 /operator/balance/withdraw — Withdraw wizard

Майстер у 3 кроки на одній сторінці; крок 2 розблоковується після валідного кроку 1.

Choose payout method

Криптовалюта — весь каталог NOWPayments (350+ токенів) у двошаровій структурі: Featured (8 плиток — USDT, USDC, BTC, ETH, SOL, MATIC, BNB, TON) + All coins (searchable-список з fuzzy-пошуком). Мережа — усі підтримувані для токена, з бейджем «Cheapest» на найдешевшій. Network fee утримується із суми (платить оператор), тож «You will receive» завжди менший за запрошену суму.

Recipient

Адреса гаманця з валідацією по мережі, «Scan QR», «Save as default» + аліас, whitelist збережених гаманців.

Confirm

Огляд усього + 2FA код + «Confirm withdrawal» (3s debounce). Далі статус: Pending → Processing → Sent (txid).

!
Мінімум на виведення — $1 245.50 (USD-еквівалент), однаковий для всіх, фіксує SuperAdmin на рівні системи. Свідомо високий поріг — політика утримання (менше дрібних виведень, довші сесії, антифрод-бар'єр, менше mass-payout операцій). Змінюється без релізу. Перша виплата доступна через 7 днів від першого зарахованого item; до цього Withdraw неактивний з підписом «Available in {N} days».
!
Безпека виведення: email-підтвердження кожного нового whitelist-гаманця, 24h cooldown на перше виведення на новий гаманець, обов'язкове 2FA (TOTP).

10.8 /operator/messages — Chat with Admin

  • Один зафіксований канал — з призначеним адміном. Інтерфейс месенджера, realtime через Socket.IO.
  • Текст з базовим Markdown, прикріплення (зображення до 10 MB), реакції-емодзі (опц.), системні повідомлення інлайн.
  • Можна поскаржитись адміну на item із робочого екрану («Ask admin» з підвантаженим контекстом).
  • Заборонено: писати іншим операторам, перевідкривати канал, видаляти історію.

10.9 /operator/notifications — Center

  • Фільтри: All · Work · Balance · Messages · System. Mark all as read.
  • Перехід на джерело події (лінк «Open task»). Toast у правому нижньому куті + запис у центр.

10.10 /operator/profile — Profile

  • Аватар (uploadable, з кропом). First / Last name — read-only з тултіпом.
  • Operator ID, інфо адміна (ФІО + нікнейм + аватар, «Assigned since»), email, member since. У оператора рівно один адмін — без мультиселектора чи перемикача.
  • Stats: lifetime earned, total items, streak best, achievements.

10.11 /operator/settings — Settings

ВкладкаЩо містить
AccountChange password · email read-only · delete account (soft, з коментарем)
PreferencesLanguage (11) · Theme · date/number format · currency · sound effects · reduced motion
NotificationsToggles по каналах (email / in-app / push) і категоріях
PayoutsDefault crypto + network · whitelist гаманців (CRUD)
Security2FA (TOTP) · active sessions · login history (20 входів з IP, гео, девайсом)

10.12 /operator/help — Help

  • Search bar · FAQ за категоріями · «Replay onboarding tour» (велика кнопка).
  • Глосарій (Task, Category, Item, Pending) · «Contact your admin» / «Contact support» · uptime indicator.
11

AI-асистент

Окрім чату з живим адміном (10.8), у CRM є другий канал допомоги — AI-асистент, що працює цілодобово і відповідає миттєво.

11.1 Навіщо окремо від чату з адміном

Чат з адміном — для питань, що потребують людського рішення. AI-асистент — для всього, що можна пояснити з документації миттєво, не чекаючи, поки адмін онлайн: «Як вивести гроші?», «Чому я не можу вивести кошти?» (пояснює 7-денний період і мінімум $1 245.50), «Що таке категорія Deepfake Detection?», «Де історія виплат?», «Як змінити мову?», «Що означає Awaiting refill?». Це знижує навантаження на адмінів і дає відчуття, що допомога є завжди.

11.2 Розміщення і поведінка

  • Плаваюча іконка у правому нижньому куті на всіх сторінках (крім /operator/work/:id, де згорнута до крапки, щоб не заважати фокусу — розгортається по кліку).
  • Клік відкриває компактне chat-вікно (bottom sheet на мобільному, floating panel ~380×520px на десктопі) — не окрему сторінку, не редирект.
  • Бейдж-анімація при першому вході (крок в Акті 3 онбординг-туру). Стани іконки: default / hover / active / typing.
  • Історія діалогу зберігається per-user — можна закрити й повернутись, контекст не губиться в межах сесії.

11.3 Що асистент вміє

Може: відповідати на питання про функціонал (та сама база знань, що й /operator/help, але в розмовному форматі); пояснювати терміни (Task, Category, Item, Pending, Trust Score — у загальних рисах); давати короткі туторіали з підсвіткою елементів (легка інтеграція з тим самим механізмом, що й Driver.js-тур); допомагати з навігацією («Take me there»); ескалувати до живого адміна — «This looks like something your admin should help with» → CTA відкриває /operator/messages з попередньо заповненим повідомленням.

!
НЕ може (свідомі обмеження): не має доступу до фінансових операцій напряму (не ініціює виведення, не змінює дані, не підтверджує транзакції) — тільки інформує і скеровує на UI; не дає юридичних/фінансових консультацій; не розкриває деталі антифроду; завжди явно позиціонується як AI, не видає себе за людину і не говорить від імені адміна.

11.4 Технічна реалізація

КомпонентПідхід
МодельClaude API (Anthropic) — узгоджено зі стеком компанії
КонтекстRAG на базі внутрішньої бази знань CRM (те саме джерело, що й Help FAQ — щоб не було розбіжностей)
ПерсоналізаціяБачить нечутливий контекст (ім'я, поточна сторінка, мова) — без доступу до балансу, паролів, деталей транзакцій
МультимовністьВідповідає мовою інтерфейсу оператора (з 11 підтримуваних)
Rate limitingЗахист від спам-запитів на рівні бекенду
ЛогуванняДіалоги (без PII у чистому вигляді) для аналітики «на що найчастіше питають»

11.5 Безпекові межі

i
Асистент має пояснювати що таке Trust Score і чому існують ліміти (7-денне очікування, мінімум виведення), але ніколи не розкриває конкретні пороги, ваги сигналів чи механіку детекції. Це той самий принцип «не показуємо число Trust Score», перенесений сюди: AI не повинен ненавмисно навчити, як обійти антифрод.

11.6 Аналоги

Intercom Fin / Resolution Bot — стандарт AI-first support-віджета з чіткою ескалацією до людини. Linear's in-app assistant — мінімалізм, відповіді в контексті сторінки. Notion AI Q&A — RAG на власній документації, той самий підхід переносимо на Help-контент.

12

Сповіщення і real-time

Канали доставки

ПодіяToastCenterEmailPush
Призначено нове завдання
Призначено категорію в існуючій
Закінчились items у категорії
Admin прислав повідомленняопц.
Зарахування на баланс
Зміна статусу виведення
Досягнення / мілстоун
Системні (maintenance)

Поведінка та стек

  • Toast: автохайд 5с (info) / 7с (success), ручний close для error. Стек до 3 видимих, один CTA максимум, опційний звук «tick».
  • Socket.IO gateway в NestJS, кімнати room:user:{id} + room:task:{id}.
  • Бекенд публікує події через BullMQ → fan-out на гейтвей. Reconnect з offline-індикатором у топбарі.
13

Прогрес і м'яка гейміфікація

i
Гейміфікація не повинна бути нав'язливою. Це не казино. Але мікродози дофаміну — це нормально і допомагає утриманню.
Daily streak · скидається через 36 год Levels · Newcomer → Elite Achievements · «First 100 items» Personal records · best day Progress bars · скрізь Session goals · опційні
  • Daily streak — дні поспіль із виконаною роботою (поріг конфігурується). Показ на dashboard і в profile.
  • Levels на основі lifetime items: не дають матеріальних переваг — лише статус і бейдж біля аватара. Запобігають синдрому «тільки гроші».
  • Achievements: «7-day streak», «First $100 withdrawn», «Multi-category master». Колекція в profile.
  • Personal records — тільки персональні, без leaderboard: лідерборди створюють тиск, уникаємо їх у MVP.
14

Локалізація (i18n)

Підтримувані мови (11)

English en Spanish es Português BR pt-BR French fr German de Russian ru Polish pl Turkish tr Arabic ar · RTL 中文 简体 zh-CN Hindi hi
i
Ukrainian свідомо не включаємо. Жодного хардкода українською навіть як placeholder — усі строки винесені в словники.

Принципи

  • next-intl + JSON-словники по фічах. Дати/числа/валюти — через Intl.* з прив'язкою до локалі.
  • Плюрали — ICU MessageFormat. RTL: автоматичний dir="rtl", sidebar дзеркалиться праворуч.
  • Дефолтна мова: cookie → user setting → Accept-Language → English.
  • На наступних ітераціях — Crowdin або Lokalise (поза скоупом MVP).
  • FAQ і Help-контент локалізуємо самотужки (у нашій кодовій базі/БД), без зовнішніх helpdesk-платформ (Crisp / Intercom / Help Scout): уже є вбудований канал з адміном, а статичний FAQ якісно перекладається стандартним workflow. До хелпдеска повернемось, коли зʼявиться окрема support-команда.
15

Безпека

  • HTTPS-only. JWT: короткий access 15 хв + httpOnly refresh 30 днів з ротацією при кожному використанні (anti-replay).
  • При деактивації акаунта адміном refresh-токен інвалідується миттєво; на логіні оператор бачить екран «Your account has been suspended» без деталей і публічної CTA на підтримку (деталі — у адміна іншими каналами).
  • Rate limiting на /login, /withdraw, /messages. Cloudflare Turnstile після 5 невдалих логінів.
  • 2FA (TOTP) — обов'язкове перед першим виведенням. Whitelist гаманців із email-підтвердженням.
  • IP geo-логування при кожному вході; підозрілий новий регіон — email-нотифікація.
  • Усі чутливі дії (зміна пароля, додавання гаманця, виведення) викликають email.
  • CSP, XSS, SQL-injection — стандартно. Логи без PII. Sentry зі скрабом sensitive полів.
16

Автоматичний контроль якості і антифрод

Ми свідомо відмовились від ручної модерації адміном (Додаток A, п. 1): кожен виконаний item зараховується автоматично, миттєво і без людини в циклі. Щоб це не стало дірою для зловживань, потрібна повноцінна автоматична модель довіри. Нижче — вся її механіка.

15.1 Класи загроз

  • Speed farming — клікає «Approve» на все підряд заради лічильника.
  • Boting — скрипт/макрос натискає замість людини.
  • Multi-accounting — одна людина реєструє кілька акаунтів у різних адмінів.
  • Collusion — група координує однакові відповіді, щоб пройти cross-check.
  • Accuracy drift — працює чесно, наростив довіру, потім починає фейкувати.
  • Payout abuse — швидкий фарм → миттєве виведення → зникнення (частково покрито 7-денним cool-down'ом і whitelist-гаманцями з 2FA).

15.2 Сигнали, які збирає система

  • Honeypots (gold questions). У кожну категорію підмішуються items з відомою правильною відповіддю — 3–7% для нормальних, до 20% на probation. Оператор не знає, який item — honeypot. Помилки прямо знижують accuracy.
  • Time-per-item baseline. Розподіл часу ретельного оператора (median, p25–p95). Хронічно нижче p25 → підозрілий; нижче p5 → майже гарантовано фейк.
  • Cross-validation (soft consensus). Частина items іде на 2–3 операторів (вони не знають про перетин). Сходяться → валідно, всі отримують оплату. Розходяться → arbitration-pool. Одну категорію можна призначити кільком операторам (але не двічі одному в межах завдання).
  • Behavioral biometrics (light). Патерн взаємодії у workspace: інтервали між кліками, рух миші, hotkeys vs миша, hesitation time. Ідеально рівні інтервали й нульовий рух миші — сигнал бота.
  • Device fingerprint + IP. Композитний fingerprint (FingerprintJS OSS) + IP + гео. Ідентичний композит на кількох акаунтах → multi-accounting.
  • Answer distribution. 98% approve при нормі категорії 60% → сигнал.
  • Withdrawal velocity та session anomalies — різкі відхилення від власного базлайну оператора.

15.3 Trust Score — композитний показник

Усі сигнали агрегуються в число 0–100 на оператора. Зважений композит, перекалібровується щоквартально:

СигналВага%
Honeypot accuracy
35%
Cross-validation agreement
25%
Time-per-item consistency
15%
Behavioral biometrics
10%
Answer distribution normality
8%
Device / IP uniqueness
5%
Payout velocity
2%

Score змінюється поступово (exponential moving average), а не стрибками — щоб один поганий день не убив історію нормального оператора.

15.4 Реакція системи залежно від Trust Score

85–100TrustedМиттєве зарахування, без затримок, honeypots 3–5%.
60–84NormalМиттєве зарахування, помірна частка cross-validation.
40–59WatchЗарахування миттєве, але shadow-flag для аналітики; honeypots до 10%.
20–39RestrictedЗарахування з 24-год затримкою; UI «Verifying activity»; виведення заблоковано.
0–19SuspendedАкаунт призупиняється; login «Account under review»; чекає вердикту адміна.

Нові акаунти стартують з 55 (Normal) і мають 3-денний probation з honeypots 20%. За 3 дні добропорядні виходять у Trusted, проблемні — у Watch/Restricted.

15.5 Прозорість для оператора

i
Ключове рішення: оператору не показуємо trust score як число. Інакше з'явиться стимул його інженерити, а не працювати чесно.
  • Trusted / Normal: нічого, робота як завжди.
  • Watch: нічого явного; можливо трохи більше складніших items у пулі.
  • Restricted: м'яке повідомлення на dashboard: «We noticed some unusual activity. Your withdrawals are temporarily paused for review.» — без конкретних сигналів.
  • Suspended: той самий екран «Your account has been suspended», що й для деактивації адміном.

Адмін у своїй панелі бачить trust score команди, розбивку по сигналах і рекомендацію системи. Може вручну змінити стан (напр. зняти ban), але не може напряму підняти/занизити score — це системний показник, захищений від маніпуляцій.

15.6 Кошти підозрілого оператора

  • Watch / Restricted → суми лежать на балансі, зростають, але не виводяться до нормалізації score.
  • Suspended → баланс заморожений; після ручного review адмін може розморозити.
  • Banned (рішення адміна після review) → баланс конфіскується. Правило в Terms of Service, які оператор акцептує при першому вході — без цього економічний стимул фроду не зникає.

15.7 Чому так, а не ручна модерація

  • Масштабованість. Один адмін не перегляне 5 000 items/день від 20 операторів. Час адміна дорогий.
  • Швидкість. Затримка платежу знижує engagement чесних. Миттєве зарахування утримує.
  • Консистентність. Автоматика робить однакові рішення на однакових патернах; людина — ні.
  • Data-driven. Статистика по мільйонах дій → retro-калібрація ваг. Ручні рішення не дають циклу навчання.
  • Стандарт індустрії. Toloka, Appen, Clickworker, Scale AI працюють саме так.

15.8 Поза скоупом антифрод-модуля

  • Точна ML-модель для behavioral biometrics — v1 rule-based на порогах, v2 з ML.
  • Graph-based ML для detection collusion — на пізніше.
  • Авто A/B-калібрація ваг Trust Score — на пізніше. ZK-докази роботи — далеке майбутнє.

Деталі імплементації (алгоритми, пороги, обробники) — окремий технічний документ. Цей розділ описує вимоги і логіку продукту, а не код.

17

Адаптивність і мобільний досвід

CRM — це не просто responsive, це mobile-first для робочих сесій. Багато операторів робитимуть прості модерації з телефону.

  • Workspace окремо оптимізований під мобілку: великі тач-зони, свайпи (опц.), фіксована нижня панель дії.
  • Сітки 3-кол → 1-кол. Усі модалки — bottom sheet. Топбар компактний (баланс — лише сума).
  • Жести pull-to-refresh у списках. iOS PWA installation (іконка, splash, standalone).
  • Шрифти 16+ px (інакше Safari зумить). На повільних мережах — skeleton screens, optimistic UI у workspace.
18

Аналоги: звідки беремо найкраще

Краудсорсинг (модель роботи)
  • Toloka — компактний task feed, «X¢ per task».
  • Clickworker — акцент на щоденному заробітку.
  • Mechanical Turk — дисципліна «одна одиниця = одна дія».
  • Appen / RemoTasks — візуалізація прогресу по категоріях.
Преміальний UI / UX
  • Linear — hotkeys, command palette, щільність інфо.
  • Stripe Dashboard — типографіка чисел, графіки.
  • Vercel — простір, повітря, темна тема.
  • Notion — м'якість тіней, empty states з ілюстраціями.
Криптогаманці / виведення
  • Binance — індикація network fee і «you will receive».
  • OKX — whitelist гаманців з аліасами.
  • Coinbase — zero ambiguity на confirm screen.
Онбординг
  • Duolingo — streaks, achievements без дитячості.
  • Linear onboarding — 3-актова структура туру.
  • Stripe onboarding — tooltips з визначеннями інлайн.
19

Що поза скоупом цього документу

  • Адмінська панель (/admin/*) — окремий vision-документ.
  • Робота SuperAdmin (завантаження контенту, створення варіацій, призначення).
  • Бекенд-схема БД у деталях — окремий технічний документ.
  • API-контракти — окремий OpenAPI. Лендінг matchguard.ai — окремий проєкт.
  • Деталі імплементації автоматичного контролю якості і антифроду (алгоритми, обробники подій, ML-моделі) — окремий технічний документ. Логіка продукту описана в розділі 15.
  • Лідерборди, командна гейміфікація — після MVP.
20

Що далі

Після затвердження цього vision-документу:

A

Закриті рішення

Раніше — відкриті запитання; у v0.2 зафіксовані 9 ключових рішень.

Контроль якостіclosed — ручної модерації немає. Усі items зараховуються на баланс автоматично й миттєво; система сама аналізує патерни і фрод (окремий тех-напрямок). Balance більше не має стану «на перевірці»; Pending = виведення у процесі мережевого підтвердження.

Мінімальна сума виведенняclosed — однакова для всіх, фіксує SuperAdmin на рівні системи. Додатково: виведення доступне лише через 7 днів від першого зарахованого item. Антифрод + soft retention.

Network feeclosed — оплачує оператор: комісія утримується із суми виведення, «You will receive» завжди показано після її врахування. Сервісний збір NOWPayments на mass payouts — 0%.

Час життя сесіїclosed — access 15 хв + refresh 30 днів (httpOnly, ротація при кожному використанні, anti-replay). При деактивації refresh інвалідується миттєво.

Кількість адмінівclosed — рівно один (User.adminId NOT NULL). Без перемикача в UI. Re-assignment — окремий адмінкейс в історії, але оператор завжди бачить одного «current admin».

Деактиваціяclosed — єдине повідомлення на логіні «Your account has been suspended», без деталей і публічної CTA. Ban-like soft suspension: дані не видаляються, доступ до CRM заблоковано.

Локалізація FAQclosed — робимо самотужки, без Crisp / Intercom / Help Scout. Уже є канал з адміном, статичний FAQ перекладається стандартним workflow. −1 вендор, −1 підписка, повний контроль.

Звуковий дизайнclosed — мінімальні UI-звуки: approve «tick» (~100 ms), баланс «coin». Вимикаються в Settings. Дефолт — вимкнено, пропонуємо ввімкнути в турі.

Імʼя адміна у профіліclosed — показуємо ФІО + нікнейм + аватар (ФІО над нікнеймом). Посилює довіру і пришвидшує комунікацію поза системою.

B

Залишилось відкритим

Оновлено у v0.3. Із попереднього списку закрито:

Точний поріг мінімального виведення$1 245.50 (розділ 10.7)
Перелік токенів і мережвесь каталог NOWPayments (350+), двошаровий UX + автосуджест найдешевшої мережі
Назви рівнів гейміфікаціїпідтверджено Newcomer → Contributor → Expert → Pro → Elite
Дефолтний стан звукових ефектіввимкнено, ввімкнення пропонується в турі
Деталі автоматичної антифрод-логікиповністю описано в новому розділі 15 (Trust Score)

Залишається відкритим:

Точний поріг daily streak. У беті перевіримо: items/день, $ /день, час, або гібрид (хоча б один поріг). Логіка configurable у SuperAdmin без релізу.

Deposit / поповнення на стороні оператора. У v0.3 є лише withdraw. Можливі майбутні кейси: stake за преміум-категорії, insurance-депозит, бонусні токени. Для MVP — out of scope operator CRM.

Фінальні бренд-домени CRM і Admin (розділ 4.1). Бізнес-рішення; зафіксувати перед налаштуванням Cloudflare/DNS і CI/CD.

Точна ставка HMAC-shared secret для лендінг → API (розділ 4.3) — визначаємо з командою лендінгу перед першим інтеграційним тестом.

Частина II

Admin Panel
керівник команди.

Адмінська панель, роль Admin — керівник групи операторів. Компаньйон до CRM-vision: терміни, стек і архітектурні рішення з Частини I діють за замовчуванням; повторюємо лише специфічне для адмінки.

Версіяv0.3 — vision / functional scope
Скоуптільки роль Admin (керівник команди операторів)
Поза скоупомроль SuperAdmin (наступна ітерація), операторська CRM, лендінг
00

Зв'язок із рештою системи

Щоб адмінка читалась у контексті — вся ієрархія MatchGuard:

SuperAdmin повний контроль
Створює контент (Variations), заводить Admin-ів, бачить усе.
Admin цей документ
Керує своєю командою операторів, роздає їм роботу.
Operator
Виконує роботу, отримує оплату — operator CRM (Частина I).
  • SuperAdmin створює Variations (пакети контенту з категоріями) і призначає їх Admin-ам. Admin сам контент не завантажує.
  • Admin отримує варіації «згори» і розподіляє їхні категорії між своїми операторами.
  • Кожен Admin бачить і керує тільки своєю командою. Оператори іншого адміна для нього не існують.
  • Оператор автоматично закріплюється за адміном, який його створив (один оператор — рівно один адмін).
  • Термін «Variation» — рідна назва в адмінці. Оператор у CRM бачить це як «Tasks», але адмін працює з поняттям «Variation».
01

Хто такий Admin (персона і місія)

Admin — керівник групи операторів, умовний «team lead» підрядників. Його робота: набирати й заводити операторів, роздавати роботу (варіації та категорії), стежити за продуктивністю і якістю, комунікувати з операторами, наглядати за балансами і виплатами, тримати «особові справи» (документи, нотатки).

Admin — не технічний, але операційно грамотний користувач. Проводить у панелі багато часу і хоче швидко бачити стан команди, швидко заводити людей, швидко роздавати роботу і не робити помилок (наприклад, не призначити ту саму роботу двічі).

01 — почуття

Контроль над командою

«Я з першого екрана бачу, хто працює, хто застряг, де проблема.»

02 — почуття

Швидкість операцій

«Завести оператора і видати роботу — це хвилина, а не квест.»

03 — почуття

Захист від помилок

«Система не дасть зробити дурницю — попередить, підсвітить, заблокує невалідну дію.»

02

Домени і доступ

2.1 Окремий домен, НЕ піддомен

Адмінка — окремий apex-домен, фізично й логічно відрізаний від лендінгу, і це найчутливіша зона всієї системи. Чому не admin.matchguard-ai.com:

  • Reconnaissance. Піддомен елементарно знаходиться через passive DNS, certificate transparency logs, subdomain enum. Окремий нейтральний apex цього не видає.
  • Cookie / origin isolation. Піддомени ділять scope .matchguard-ai.com. XSS на лендінгу (маркетингові скрипти — велика поверхня) дістає cookie всього дерева. Окремий apex — жорсткий бар'єр.
  • Індексація. Лендінг публічний і в SEO; адмінка невидима для пошуковиків. Окремий домен + noindex.
  • Психологічний бар'єр. Оператор ніколи не натрапить на адмінку — навіть не здогадується про існування admin-URL.

2.2 Три домени, дві зони чутливості

ЗонаДоменЧутливістьХто заходить
Лендінгmatchguard-ai.comПублічнаБудь-хто
Operator CRMокремий apex (TBD)ПриватнаОператори
Admin Panelокремий apex (TBD)МаксимальнаAdmin + SuperAdmin

CRM і Admin — різні apex-домени й між собою. Технічно з одного монорепо (apps/crm, apps/admin), але розгортаються на різні домени різними білдами — код адмінки фізично не потрапляє в бандл CRM.

2.3 Аналіз доменних імен (кандидати)

i
Доступність доменів звідси авторитетно не підтверджується (немає доступу до whois). Нижче — стратегія і кандидати; фінальну доступність перевірити bulk-search'ем (2.4). Очевидні словникові компаунди майже гарантовано зайняті, тож ставка на коіновані/змішані назви.

Кандидати для CRM (нейтральне, «робоче», легко диктується, бажано .com):

Ім'яЛогікаTLD
taskriaкоіноване, звучить як платформа.com / .io
moderlyнатяк на moderation, м'яко.com / .io
unitflow«unit» = одиниця роботи + flow.app / .io
verolyn / verona-work«vero» = truth (перевірка).com
taplanetap + lane, для тач-роботи.app / .io
queuelyвід queue (черга завдань).com / .io
paceboardpace + board, про темп і прогрес.com

Кандидати для Admin (ще нейтральніше, можна generic-технічне, нічого не розкриває):

Ім'яЛогікаTLD
nexadmin / nexpanelкоіноване, внутрішньо-технічне.com / .io
teamgrid-hq«grid» команди + hq.com
orbita-panelнейтральне, «орбіта» операцій.io / .app
mg-consoleMG-абревіатура + console.app / .io
stratomanage«strato» (шар управління).com
pilotdeckpilot (керує) + deck.io / .app

2.4 Як перевірити доступність

  1. Bulk-search: Porkbun, Cloudflare Registrar (за собівартістю), Namecheap Beast Mode — вставляєш список, бачиш вільні/зайняті + ціни.
  2. Перевір усі потрібні TLD для фіналіста (.com/.io/.app/.co) — зайняти основний + захисний.
  3. Trademark-перевірка (Google + USPTO/EUIPO), щоб ім'я не збіглося з чужою маркою.
  4. Реєструй через Cloudflare — одразу DNS, проксі, WAF, noindex-заголовки.

2.5 Мережева ізоляція (додатково до домену)

  • Cloudflare Access (Zero Trust) — доступ до admin-домену лише після автентифікації на edge (email OTP / SSO), ще до того, як запит дійде до застосунку.
  • Обов'язкове 2FA для всіх адмін-акаунтів (не опційне). noindex, robots deny-all, немає sitemap.
  • Окремі жорсткіші rate-limiting і WAF-правила. Гео-логування входів (моніторинг, не блокування — доступ за країною не обмежуємо).
03

Технологічний фундамент (специфіка адмінки)

Стек — той самий, що у Частині I (монорепо Turborepo, apps/admin — окремий Next.js 15, спільні packages/*, єдиний NestJS з role-based гардами, Postgres + Prisma, Redis + BullMQ, Socket.IO). Специфічне:

АспектРішення
Гарди доступу@Roles('ADMIN') / @Roles('SUPERADMIN'); operator-токен на admin-ендпоінтах → 403
Data scopingКожен запит Admin фільтрується по adminId (row-level scoping через Prisma middleware) — чужої команди з БД не отримає
ТаблиціTanStack Table (сортування / фільтри / пагінація)
ГрафікиRecharts + за потреби Tremor
Файли операторівОб'єктне сховище S3-сумісне (Cloudflare R2 / S3 / MinIO), приватні bucket'и, presigned URLs
ЕкспортCSV / XLSX (SheetJS на бекенді)
Локалізація3 мови: EN, RU, UK (на відміну від CRM з 11 — тут потрібна українська, адміни ближчі до власника)
04

Інформаційна архітектура

/login                     → вхід (Cloudflare Access + форма + 2FA)
/admin                     → редирект на /admin/dashboard
/admin/dashboard           → головна: огляд команди, KPI, алерти
/admin/operators           → список операторів (моя команда)
/admin/operators/new       → створення оператора
/admin/operators/:id       → картка (профіль, стата, документи, нотатки, лог)
/admin/operators/:id/edit  → редагування (обмежені поля)
/admin/variations          → варіації, призначені мені SuperAdmin'ом
/admin/variations/:id      → деталь варіації + категорії + пул контенту
/admin/assignments         → центр призначень (хто що робить)
/admin/assignments/new     → майстер призначення роботи
/admin/analytics           → аналітика команди
/admin/finance             → баланси, запити на виведення, історія виплат
/admin/messages            → командний інбокс
/admin/notifications       → центр сповіщень
/admin/settings            → налаштування (профіль, безпека, сповіщення)
/admin/help                → довідка
05

Layout і навігація

5.1 Desktop

Структура як у CRM (sidebar + topbar), але «щільніша» — адмінка інформаційно насиченіша. Sidebar згрупований: Огляд (Dashboard, Analytics) · Команда (Operators з лічильником, Add Operator) · Робота (Variations, Assignments) · Фінанси (Finance з бейджем «3 pending») · Зв'язок (Messages, Notifications); внизу Settings, Help, профіль адміна.

Topbar: заголовок + breadcrumbs (глибша вкладеність), глобальний пошук Cmd/Ctrl+K (знайти оператора за іменем/email/ID), мова, тема, сповіщення, меню профілю.

5.2 Mobile / tablet

Desktop-first (адмін працює з комп'ютера). На планшеті/телефоні: sidebar → drawer, важкі таблиці → карткові списки, масові дії спрощені, аналітика — вертикальний стек графіків.

06

Dashboard (головна адміна)

Має за 5 секунд відповісти на «як справи в команді і де втрутитись». Зверху вниз:

  1. Заголовок + період: «Your team · Today» з перемикачем Today / 7d / 30d.
  2. KPI-стрічка (4–5 карток): Active operators, Items processed (+тренд), Team earnings, Pending withdrawals, Avg trust score команди.
  3. Attention / алерти — найважливіший блок; система сама піднімає: «trust score впав до Watch», «3 operators idle 3+ днів», «категорія Deepfake 95% done, running low», «2 withdrawal requests waiting». Кожен з CTA «Переглянути».
  4. Team activity chart — items/earnings по команді (Recharts).
  5. Top / bottom performers — рейтинг для ока адміна (операторам не видно).
  6. Recent operators + Quick actions (Add operator / Assign work / Open messages).
07

Operators — управління командою

Операційне ядро адмінки.

7.1 /admin/operators — список команди

  • Таблиця (TanStack): аватар + ФІО, Operator ID, email, статус (Active/Idle/Restricted/Suspended), trust-рівень (рівень кольором, не число), Items, Earnings, Last active, дії (Open / Message / Assign / Suspend).
  • Фільтри (статус, trust, активність, дата), пошук (ім'я/email/ID), сортування, масові дії (Assign variation / Send message / Export), експорт CSV/XLSX.

7.2 /admin/operators/new — створення

Форма: First / Last name*, email* (унікальний по системі), мова інтерфейсу, нікнейм/примітка, опційно — одразу призначити стартову варіацію.

Створюється User

Роль OPERATOR, adminId = поточний адмін (автозакріплення).

Тимчасовий пароль

Криптографічно стійкий; mustChangePassword + mustVerifyEmail = true.

Лист-запрошення

Вітання, ім'я адміна, логін, тимчасовий пароль, кнопка на CRM-домен. Локалізований обраною мовою.

Показ пароля адміну один раз

На екрані успіху + «Copy» (щоб передати вручну, якщо email не дійде). Далі — тільки хеш у БД.

З'являється в списку

Статус «Invited / Pending first login».

!
Захист від помилок: email уже існує → «This email is already registered»; rate-limit на масове створення; «Resend invitation» у картці, якщо оператор не зайшов.

7.3 /admin/operators/:id — картка (особова справа)

Вкладки:

  • Overview: аватар, ФІО, нікнейм, ID, email, мова, дати; статус + trust-рівень; швидкі дії; міні-стата (lifetime items/earned, баланс, streak).
  • Work / Assignments: призначені варіації (кожна раз — правило B), категорії, per-operator completion, історія — саме звідси система знає, що вже призначалось, і блокує повтор.
  • Performance: графіки items/accuracy (honeypots)/швидкість/agreement; trust-рівень і динаміка з розбивкою по сигналах (адмін бачить, оператор — ні).
  • Finance: баланс, історія нарахувань і виведень, статуси.
  • Notes: внутрішні нотатки (оператор не бачить), таймлайн.
  • Activity log: логіни з країною/IP/девайсом (з прапорцем), призначення, зміни статусу, виведення; нові гео-регіони підсвічуються.

Documents — приватне файлове сховище на оператора (медіа, PDF, скани, договори):

  • Сховище: Cloudflare R2 (без egress-плати) або S3/MinIO, приватні bucket'и, публічного доступу немає в принципі.
  • Шифрування: at-rest SSE на рівні bucket'а; для чутливих типів (ID/договори) — application-level envelope AES-256-GCM нашим ключем ще до завантаження (ключі в KMS, ротуються); in-transit тільки TLS.
  • Доступ: лише presigned URLs з коротким TTL (~5 хв) після перевірки прав (row-level scoping). Постійних лінків не існує.
  • Drag & drop з прогресом і прев'ю; валідація MIME + ліміт розміру + антивірусний скан (ClamAV у черзі BullMQ) перед доступністю; метадані (тег, дата, хто, розмір); аудит кожного перегляду/завантаження/видалення.
  • Файли бачить тільки адмін оператора і SuperAdmin — сам оператор у CRM їх не бачить.
  • Ретенція: автовидалення через 1 місяць — фоновий job стирає файли старші за 30 днів разом з об'єктом і ключем шифрування (незворотно, з записом в audit log). Мінімізує PII, спрощує GDPR-відповідність.

7.4 /admin/operators/:id/edit

Admin може змінити First/Last name (оператор сам — ні), нікнейм, дефолтну мову, статус (suspend/reactivate). Не може бачити/змінювати пароль — лише «Send password reset». Усі зміни в activity log.

7.5 Деактивація / suspend

Suspend — м'яке призупинення; оператор бачить «Your account has been suspended», баланс замороджується. Reactivate повертає доступ. Видалення — лише soft (archived), щоб зберегти історію і фінанси. Усі дії — з confirm-модалкою.

08

Variations — пакети контенту

Варіації створює SuperAdmin і призначає їх адмінам. Admin бачить тут ті, що йому передали.

8.1 /admin/variations — мої варіації

Картки: назва, категорії з лічильниками (обсяг / зроблено), скільки операторів працює, загальний прогрес, статус (Active/Completed/Paused), дедлайн. Фільтри: активні / завершені / за дедлайном.

8.2 /admin/variations/:id — деталь

Заголовок + статус + прогрес. Список категорій; для кожної: назва + ставка ($/item — глобальна від SuperAdmin, адмін бачить, але не змінює), обсяг, зроблено/залишилось, призначені оператори, прогрес, «Assign this category». Загальна статистика: обсяг, темп, прогноз завершення. Кнопка «Assign work».

!
Admin не завантажує контент, не створює варіації/категорії і не редагує ставки — це строга монополія SuperAdmin. Жодного шляху створити варіацію (ні в UI, ні на рівні API — гард @Roles('SUPERADMIN')).
09

Assignments — призначення роботи (з правилами)

Найважливіша механіка «щоб нічого не поламалось». Тут живуть правила проти дублювання роботи.

9.1 /admin/assignments — центр призначень

Матриця «хто що робить»: рядки — оператори, колонки — активні варіації, у клітинках — персональний статус (не призначено / у роботі X% / завершено для цього оператора). Розгортання клітинки → розбивка по категоріях. Видно, хто перевантажений, хто вільний, де «діри». Швидка дія з клітинки: призначити / зняти.

9.2 /admin/assignments/new — майстер

Обрати варіацію

Зі списку активних варіацій адміна.

Обрати категорії

Категорії варіації з обсягом; відмітити одну або кілька.

Обрати операторів

Система одразу показує валідність: ✅ можна · ⚠️ попередження (перевантажений) · ⛔ заблоковано («Already assigned this variation»).

Підтвердження

Огляд варіація → категорії → оператори → «Assign».

9.3 Правила валідності (критично)

!
Базове правило — рівень B (варіаційна унікальність). Один оператор може отримати конкретну варіацію лише раз за все життя акаунта. Повторно призначити ту саму варіацію не можна — незалежно від категорій. Унікальність — по парі (operator × variation). Спроба → «This operator has already been assigned this variation».

Наслідок для категорій: вибір категорій відбувається в межах цього єдиного призначення — адмін одразу відмічає всі потрібні. Додати категорію тому ж оператору по тій самій варіації згодом = редагування наявного assignment (новий дочірній запис), а не новий assignment. Другий assignment тієї ж варіації тому ж оператору — заблоковано.

9.3.1 Per-operator completion

Варіація «виконана» індивідуально для кожного оператора, а не глобально. Приклад: оператор A закрив усі свої категорії «Solana #023» → для нього Completed. Це не завершує варіацію для команди — її можна призначити B, C, D (для них вона свіжа). Оператору A повторно — не можна (правило B), іншим — скільки завгодно (у межах контенту в пулах). Статус завершення живе на рівні пари (operator × variation).

Це природно поєднується з cross-validation антифроду (Частина I, розділ 16): один контент навмисно проходить через кількох операторів для перехресної перевірки — тому варіація не «згорає» після першого виконавця.

9.3.2 Технічний захист

  • Unique-constraint у БД на (operatorId, variationId) — навіть при гонитві паралельних запитів другий assignment відхиляється на рівні індексу, а не лише в UI.
  • Статус завершення в записі assignment (assigned / in_progress / completed) — прив'язаний до (operator, variation), що й дає per-operator completion автоматично.
  • Категорії — дочірні записи (assignment_categories) зі своїм прогресом; додавання = новий дочірній запис без порушення unique-constraint.

9.4 Додаткові захисти

Не можна призначити категорію без контенту («Awaiting refill» — кнопка неактивна) чи suspended-оператору; опційне попередження при N незавершених призначеннях; cross-validation overlap (різні оператори на одній варіації — дозволено; той самий двічі — ні).

10

Analytics — аналітика команди

  • Період-перемикач (7d / 30d / 90d / custom). Team overview: items, earnings, active operators, avg trust, throughput.
  • Per-operator breakdown (items, earnings, accuracy, швидкість, trust-динаміка); по варіаціях (темп, прогноз, вузькі місця); по категоріях (де продуктивніше, де більше помилок за honeypots).
  • Quality signals (скільки у Watch/Restricted, тренди); фінансова аналітика (нараховано / виведено / у балансах, прогноз).
  • Експорт будь-якого зрізу в CSV/XLSX; візуалізації (Recharts/Tremor, heatmap активності, донати).
11

Finance — фінанси і виплати

  • Team balances: оператори з Available / Pending / Lifetime.
  • Withdrawals — повністю автоматичні через NOWPayments, без ручного апруву адміна. Зарахування миттєве, виведення дозволене після 7 днів + мінімум $1 245.50; далі система сама відправляє payout. Адмін наглядає і бачить статуси, а не апрувить.
i
Архітектурне зачеплення на майбутнє: життєвий цикл виведення — машина станів з подіями (requested → queued → processing → sent → confirmed + гілки failed / on_hold). Кожен перехід публікує подію (BullMQ) з точками розширення (hooks), закладеними вже зараз (навіть якщо в MVP порожні) — щоб потім легко додати review великих сум, KYC-крок, утримання комісії, ескалацію на SuperAdmin, антифрод-затримку без переробки.

Withdrawals history (усі стани, txid, мережа, сума), заморожені баланси (suspended/restricted з причиною), експорт звітів.

12

Messages — командний інбокс

Інша сторона чату, який оператор бачить у CRM (Частина I, 10.8).

  • Список діалогів — усі оператори, що писали, зверху непрочитані; вікно діалогу з історією, прикріпленнями; realtime через Socket.IO; пошук.
  • Broadcast команді — надіслати кільком одразу («Нова варіація доступна»). Системні повідомлення інлайн. Бейджі непрочитаного.
  • Обмеження: адмін спілкується тільки зі своїми операторами — чужої команди в інбоксі немає.
13

Notifications — центр сповіщень

Фільтри: Team (idle / новий оператор), Work (варіація завершується, закінчився контент), Finance (запит на виведення, аномалія), Quality (оператор впав у Watch/Restricted), System. Realtime toast + центр (як у CRM), CTA-переходи на джерело.

14

Settings — налаштування адміна

ВкладкаЩо містить
ProfileАватар, ФІО, нікнейм (бачать оператори), email, контактна інформація
Security2FA (TOTP) — обов'язкове, не вимикається · active sessions + примусовий logout · login history (країна/IP/девайс) · зміна пароля
PreferencesМова адмінки (EN / RU / UK), тема, формати дат/чисел
NotificationsТонке налаштування каналів і категорій
Team defaultsДефолтна мова CRM нових операторів (з 11) · ліміт незавершених призначень (для попереджень). Розмір команди — безлімітний. Блокування повторної варіації — базова поведінка, не перемикач (9.3)
15

Безпека адмінки (зведено)

  • Cloudflare Access / Zero Trust перед застосунком (2.5); обов'язкове 2FA для всіх адмін-акаунтів.
  • Row-level data scoping: Admin бачить у БД тільки свою команду — жоден запит не поверне чужих операторів.
  • Усі чутливі дії (створення/suspend оператора, зміна даних) — у незмінний audit log. Документи — шифрування at-rest, приватні bucket'и, presigned URLs, аудит доступу.
  • Rate-limiting і WAF жорсткіші за CRM; noindex, немає sitemap.
  • JWT: access 15 хв + refresh 30 днів (той самий TTL, що й у операторів — додаткову чутливість покриваємо Cloudflare Access + обов'язковим 2FA, а не коротшим токеном).
  • Гео-логування, не гео-фенсинг: країна кожного входу записується і підсвічується при аномалії, але доступ за країною не блокується. Жорсткий гео-фенсинг свідомо не впроваджуємо.
16

Аналоги (адмінка)

Краудсорс-дашборди
  • Toloka Requester / Appen / Scale AI — розподіл роботи, аналітика якості, керування виконавцями.
Командний інбокс
  • Intercom / Front — розподіл діалогів, team inbox.
Щільні team-views
  • Linear / Height — таблиці, швидкі дії, Cmd+K.
  • Retool — патерни адмін-таблиць з bulk-діями.
Фінанси та HR
  • Stripe Dashboard — фінансові таблиці, статуси виплат.
  • Rippling / Deel / Gusto — «особова справа», документи, комплаєнс.
17

Що поза скоупом (адмінка)

  • Роль SuperAdmin повністю: створення варіацій, завантаження контенту, налаштування ставок, заведення адмінів, глобальна аналітика, системні параметри — окремий документ наступної ітерації.
  • Схема БД у деталях і API-контракти — окремий технічний документ.
  • Деталі документообігу/KYC і юридичної відповідності — окремо.
  • Точна ML-механіка антифрод-сигналів — концептуально в Частині I (розділ 16), деталі — окремий тех-документ.
A

Рішення (закриті) · Admin

Закрито в цьому раунді:

Правило призначення → рівень Bclosed — варіаційна унікальність: оператор отримує варіацію раз за життя (9.3). Плюс per-operator completion — ту саму варіацію можна давати іншим (9.3.1). Unique-constraint на (operatorId, variationId).

Документи операторівclosed — медіа + документи, шифруємо. Cloudflare R2, SSE at-rest + AES-256-GCM envelope для чутливих типів, presigned URLs, антивірус, аудит (7.3). Згода оператора при першому вході.

Мови адмінкиclosed — EN + RU + UK (українська тут потрібна, на відміну від CRM).

Refresh-TTL адмінівclosed — 30 днів (той самий, що й у операторів). Чутливість покриваємо Cloudflare Access + обов'язковим 2FA (15).

Гео-фенсингclosed — не впроваджуємо. Замість — гео-логування входів з підсвіткою аномалій; доступ за країною не блокується (2.5, 7.3, 15).

Створення варіацій/категорійclosed — строга монополія SuperAdmin. Admin не завантажує контент, не створює, не редагує ставки (8.2).

Виведенняclosed — повністю автоматичне через NOWPayments, без ручного апруву. Машина станів з подіями та hook-точками на кожному переході, закладеними з першого дня. Адмін наглядає і бачить статуси (11).

Розмір командиclosed — безлімітний; ліміту на кількість операторів немає (14).

Ретенція документівclosed — автовидалення через 1 місяць разом з об'єктом і ключем шифрування, з audit log (7.3). Мінімізує PII.

i
Усі питання цього етапу закриті. Відкритих пунктів немає.
B

Наступні кроки · Admin

Затвердити рішення з Додатку AЗатверджено
Обрати і зареєструвати домени (CRM + Admin)відкладено — робить власник пізніше (чекліст у 2.4)
Частина III

SuperAdmin
власник системи.

Вершина ієрархії — повний доступ до контенту, варіацій, адмінів і глобальних налаштувань. Живе в тій самій адмін-панелі (apps/admin), але роль SUPERADMIN відмикає розділи, невидимі звичайному Admin.

Версіяv0.1 — vision / functional scope
Скоупроль SuperAdmin (власник системи, повний доступ)
Кількість2 SuperAdmin-и; над усіма командами одночасно
00

Позиціонування ролі

SuperAdmin — власник усієї системи, не прив'язаний до команди. Головні відмінності від Admin:

АспектAdminSuperAdmin
Видимістьтільки своя командаусе і всі — адміни, оператори, контент, гроші
Контентлише роздає готовестворює варіації, заливає контент, розмічає категорії
Ставки/правилатільки бачитьзадає ставки, комісії, пороги антифроду, гейміфікацію
Адмінистворює і керує адмінами
Грошінаглядає за своєю командоювесь оборот, custody-баланс, усі виплати
Налаштування системиєдиний, хто має доступ
01

Доступ і безпека (найвищий рівень)

Усе, що є в безпеці адмінки (Частина II, розділ 15), плюс посилення саме для SuperAdmin:

  • Cloudflare Access / Zero Trust перед застосунком (як для всієї адмінки).
  • Passkey / апаратний ключ (WebAuthn) — не просто TOTP, а фізичний фактор. Це найчутливіший акаунт у системі.
  • Re-auth на найнебезпечніших діях — перед зміною ставок, конфіскацією балансу, видаленням варіації з контентом, зміною системних фінансових параметрів.
  • Правило «дві пари очей» (опційно, off за замовчуванням). Оскільки SuperAdmin-ів двоє, критична дія одного може вимагати підтвердження другого (four-eyes). Вмикається в System Settings.
  • Кожна дія SuperAdmin — у незмінному глобальному audit log (III-9). Refresh-TTL — той самий (30 днів); чутливість покривають фактори вище, а не коротший токен.
02

Модель контенту (фундамент)

Базова модель даних, від якої залежить уся робота SuperAdmin. Два рівні:

2.1 Category Type — глобальний тип

Живе на рівні всієї системи, визначається один раз: назва («Photo Moderation»), іконка, ставка $/item (глобальна, однакова скрізь), набір дій оператора (Approve/Reject/Flag), гайдлайни (інструкція + приклади для workspace), конфіг honeypot (поле є, механізм вимкнено на старті — III-6). Ставка і правила задаються тут раз і успадковуються всюди.

2.2 Category Pool — екземпляр у варіації

При створенні варіації всередині для кожного типу створюється пул — контейнер під контент саме цієї варіації. «Photo Moderation в Solana #023» — окремий пул items, що успадкував ставку й правила від глобального типу.

i
Правила й ціни — глобальні (задаються раз), контент — свій у кожної варіації. Саме це в початковому баченні звучало як «у кожній варіації однакові категорії, лише різний медіаконтент».

2.3 Каталог: стартові 7 типів

Побудований на дослідженні аналогів (Sightengine, Hive, Chekkee, TaskUs, Toloka, Appen). Дії — проста класифікація кнопками (оплата за одиницю):

#Category TypeЩо перевіряєДії
1Photo Moderationфото за правилами (не NSFW, легальне, реальне)Approve / Reject / Flag
2Deepfake / AI Detectionзгенероване чи підмінене обличчяReal / Fake / Unsure
3Profile Taggingрозмітка атрибутів (стать, вік, тип фото)набір тегів
4Video Moderationте саме для відеоApprove / Reject / Flag
5Fraud / Scam Signalsознаки шахрайства, крадені фотоClean / Suspicious / Scam
6Impersonation / Stolen Photoкрадене фото / видавання за іншу особуOriginal / Stolen / Unsure
7Profile Photo Validationобличчя видно, якість, без надмірних фільтрівValid / Invalid / Review

7 категорій — у діапазоні «5–8» з ТЗ. Кожна має власну ставку, дії та гайдлайни. Набір керований (III-4).

03

Створення і керування варіаціями

3.1 Майстер створення

Метадані

Назва, опис, теги, дедлайн (опційно).

Автостворення категорій

Одразу створюються всі 7 категорій з каталогу як пусті пули. SuperAdmin не обирає вручну — кожна варіація має однаковий повний набір (структура ідентична, різниться лише контент).

Завантаження контенту

У кожну категорію окремо (III-5).

Статус

Життєвий цикл Draft → Active → Paused → Archived.

Статуси: Draft — готується, операторам не видно; Active — у роботі, автопризначається всім адмінам, оператори отримують items; Paused — нова робота не видається, прогрес зберігається; Archived — прибрана з активних, лишається в історії/аналітиці.

3.2 Призначення варіацій адмінам

i
Активована варіація автоматично призначається одразу ВСІМ адмінам, без ручного вибору. Контент-пул спільний, а завершення per-operator (Частина II, 9.3.1) — тому кілька команд паралельно молотять одну варіацію без конфліктів. Новий адмін автоматично отримує доступ до всіх активних варіацій.

3.3 Керування

Список усіх варіацій з фільтрами; деталь — усі 7 пулів, обсяг, зроблено по всій системі, темп, прогноз. Дії: Pause / Resume / Archive / Delete (критична: re-auth + опційне «дві пари очей»). Дозаливка контенту в наявний пул (порожній пул → «Awaiting refill», після дозаливки робота відновлюється).

04

Керування Category Types (каталог)

Розділ, доступний тільки SuperAdmin:

  • CRUD типів (створити / редагувати / архівувати). Для кожного: назва, іконка, ставка $/item, набір дій, гайдлайни (текст + приклади), конфіг honeypot (поки неактивний).
  • Зміна ставки діє на майбутні нарахування; минулі транзакції не чіпаються. Історія ставок логується (хто, коли, з якої на яку).
  • Архівування типу не видаляє історичні дані — лише прибирає з нових варіацій.
!
Створення/зміна Category Types і ставок — виключно SuperAdmin. Admin цього не бачить і не може (гард @Roles('SUPERADMIN')).
05

Завантаження контенту (пайплайн)

5.1 Спосіб завантаження

Окремий плаский zip-архів медіа на кожну категорію. SuperAdmin відкриває варіацію → бачить 7 пустих категорій → у кожну окремо завантажує zip (плаский набір фото/відео) → пайплайн наповнює пул. Одна категорія = один архів; ніяких вкладених папок.

5.2 Пайплайн (асинхронно, BullMQ)

  1. Розпакування і валідація — MIME, розмір, цілісність; биті файли відсіюються зі звітом.
  2. Зберігання — Cloudflare R2 (приватне, presigned доступ).
  3. Генерація прев'ю / тумбнейлів для швидкого рендеру в workspace.
  4. Дедуплікація — перцептивний хеш, щоб контент не потрапив у пул двічі.
  5. [Місце під honeypot-ін'єкцію] — крок передбачено, але на старті вимкнено (III-6).
  6. Наповнення пулу — валідні унікальні items стають доступними операторам.

Підсумок для SuperAdmin: напр. «482 / 500 processed, 15 duplicates skipped, 3 invalid files». Статус кожного архіву в реальному часі, історія завантажень по пулу, можливість дозалити ще архів (поповнення).

06

Антифрод-конфігурація і статус honeypots

SuperAdmin налаштовує «ручки» движка довіри (Trust Score, Частина I розділ 16):

  • Ваги сигналів — honeypot, cross-validation, time-per-item, behavioral, answer distribution, device/IP, payout velocity.
  • Пороги станів Trust Score (Trusted / Normal / Watch / Restricted / Suspended) і тривалість probation.
  • Реакції системи на кожен стан (затримки, блокування виведення).
  • Ручний розбір ескалацій — найтяжчі кейси; тут же рішення про конфіскацію балансу забаненого (за ToS) — критична дія з re-auth.
!
Honeypots (золоті відповіді) на старті НЕ впроваджуємо — потребують контенту й даних для калібрування (логічніше після запуску). На старті антифрод тримається на решті: cross-validation, швидкість, поведінка, device/IP, розподіл відповідей. У даних і UI лишаємо місце під honeypots (поле в Category Type, крок у пайплайні, вага в Trust Score), щоб додати пізніше без переробки. «Gold set editor» — у беклозі.
07

Створення і керування адмінами

Дзеркало того, як Admin створює операторів (Частина II, 7.2):

7.1 Створення

Форма: ім'я, прізвище, email, нікнейм (оператори бачать ФІО + нікнейм). Криптографічно стійкий тимчасовий пароль, mustChangePassword + обов'язкове 2FA при першому вході. Лист-запрошення на email (логін, тимчасовий пароль, лінк на admin-домен). Пароль показується SuperAdmin'у один раз (Copy), далі — тільки хеш.

7.2 Керування

  • Список адмінів з показниками: розмір команди, продуктивність, оборот, остання активність. Картка: команда операторів, статистика, лог дій, «особова справа».
  • Дії: Suspend / Reactivate, Reset password, редагування. Reassignment операторів між адмінами (з логуванням; оператор бачить одного поточного адміна).
  • Видалення — тільки soft (archived). Усі активні варіації автоматично доступні кожному адміну (III-3.2).
08

Глобальна аналітика і фінанси

8.1 Dashboard SuperAdmin

Огляд усієї системи: оператори/адміни онлайн і активні сьогодні; items/день по всій системі й тренди; оборот (нараховано / виведено / у балансах); custody-баланс NOWPayments (критичний показник ліквідності); топ- і проблемні команди; системні алерти (аномалії, низька ліквідність, сплески виведень).

8.2 Фінанси

  • Усі виплати всіх команд зі статусами (машина станів, Частина II розділ 11), txid, мережа, сума.
  • Custody-баланс і прогноз: чи вистачає коштів на очікувані виплати.
  • Комісія/податок — фіксована сума (не відсоток); точну цифру SuperAdmin виставить пізніше (поле в System Settings). Утримується з виведення оператора.
  • Експорт звітів (CSV/XLSX) для бухгалтерії.

8.3 Аналітика

Зрізи по адмінах, командах, варіаціях, категоріях, операторах — продуктивність, якість (антифрод-сигнали), гроші, темпи. Візуалізації (Recharts/Tremor), heatmap, експорти.

09

Глобальний audit log

  • Усі чутливі дії всіх ролей (SuperAdmin, Admin, система): створення/зміна/видалення варіацій, зміна ставок, створення адмінів/операторів, suspend, виведення, конфіскації, зміни системних налаштувань.
  • Immutable (append-only) — записи не редагуються і не видаляються. Кожен: хто, що, коли, з якого IP/девайсу, деталі до/після.
  • Пошук, фільтри, експорт. Юридичний і безпековий фундамент — довести, хто що зробив.
10

System Settings (глобальні параметри)

Єдиний розділ, доступний тільки SuperAdmin — параметри, які більше ніхто не чіпає:

ГрупаПараметри
ФінансиМінімум виведення ($1 245.50) · період першої виплати (7 днів) · комісія/податок — фіксована сума (цифра пізніше) · крипторейли (весь каталог NOWPayments)
Ставки категорій$/item для кожного Category Type (дубль керування з III-4)
Антифродпороги Trust Score, ваги сигналів, probation, % honeypots (коли увімкнемо)
Гейміфікаціяпороги streak, назви рівнів (Newcomer → Contributor → Expert → Pro → Elite)
Системамови (CRM: 11; Admin: EN/RU/UK), брендинг, конфіг доменів, перемикач «дві пари очей» (off за замовчуванням)
11

Інформаційна архітектура (екрани SuperAdmin)

Понад те, що бачить Admin, роль SuperAdmin відмикає:

/admin/superadmin/dashboard    → глобальний дашборд
/admin/variations              → усі варіації + створення
/admin/variations/new          → майстер створення варіації
/admin/variations/:id/upload   → завантаження контенту в пули
/admin/category-types          → глобальний каталог категорій (CRUD, ставки)
/admin/admins                  → керування адмінами
/admin/admins/new              → створення адміна
/admin/admins/:id              → картка адміна
/admin/finance/global          → глобальні фінанси + custody-баланс
/admin/analytics/global        → глобальна аналітика
/admin/antifraud               → конфіг Trust Score + ескалації
/admin/audit-log               → глобальний незмінний журнал
/admin/system-settings         → системні параметри

Звичайні розділи адмінки (operators, messages, notifications) SuperAdmin теж бачить, але в глобальному охопленні, не обмеженому однією командою.

12

Що поза скоупом (SuperAdmin)

  • Impersonation / «View as» (вхід очима адміна/оператора для дебагу) — свідомо поза MVP; потребує суворого логування.
  • Honeypots / gold set editor — відкладено (III-6), місце в архітектурі лишено.
  • API-інтеграція автозаливки контенту з крипто-дейтинг платформи — на майбутнє; на старті ручне завантаження архівами.
  • Схема БД у деталях і API-контракти — окремий технічний документ.
·

Зафіксовані рішення · SuperAdmin

Модель категорійclosed — Category Type (глобальний, ставка + дії) + Category Pool (екземпляр у варіації).

Каталогclosed — 7 глобальних типів (з дослідження аналогів).

Автостворенняclosed — при створенні варіації всі 7 категорій створюються автоматично (пусті пули).

Завантаженняclosed — окремий плаский zip на категорію; пайплайн валідація → R2 → тумбнейли → дедуп → наповнення (honeypot-крок вимкнено).

Призначення варіаційclosed — активована варіація автоматично йде всім адмінам.

Комісія/податокclosed — фіксована сума, точна цифра пізніше.

SuperAdmin-івclosed — 2; правило «дві пари очей» опційне, off за замовчуванням.

Impersonationclosed — поза MVP.

Honeypotsclosed — відкладено; місце в даних/UI/пайплайні лишено.