GH GambleHub

Аватари, статуси і presence

1) Роль аватара і статусу в UX

Аватар - це візуальний якір особистості, а статус - контекст її активності. Разом вони:
  • забезпечують впізнаваність (у списках, чатах, таблицях);
  • дають миттєвий зворотний зв'язок про присутність (online/offline);
  • створюють відчуття жвавості інтерфейсу (особливо в real-time іграх, PvP, чатах);
  • підвищують довіру і залученість при взаємодіях між гравцями.

2) Типологія

ЕлементПризначенняПриклад відображення
АватарВізуальний ідентифікатор користувачаКругла або квадратна мініатюра 32-64 px
PresenceПоточний статус з'єднанняЗелена/сіра точка, «в мережі», «неактивний»
ActivityПоточна дія«Грає в Book of Ra», «У турнірі», «Ставить ставку»
Custom statusВласний підпис«Не турбувати», «На перерві»

3) Розміри і форма

32 px - мінімальний розмір (списки, таблиці, чати).
40-48 px - профілі, картки, панель навігації.
64-96 px - великі блоки профілю, стрім-кімнати.
Форма: кругла - стандарт, квадратна - для брендів/операторів.
Радіус: '50%'для кола або'8-12 px'для м'якого квадрата.


4) Завантаження і fallback

Підтримувані формати: JPEG, PNG, WebP, SVG (до 2–3 MB).
Ресайз і оптимізація на сервері (наприклад, 128, 256, 512 px).
При відсутності - ініціал аватар: перші літери імені, фон з палітри.
Помилка завантаження → підставної placeholder з іконкою користувача.

html
<img class="avatar" src="/u/123/avatar.jpg" alt="Аватар игрока Alex" onerror="this.src='/assets/avatar-fallback.png'">

5) Колірні палітри і фон

Автогенерація фону по хешу імені: стабільний, але унікальний колір.
Контраст ≥ AA між тлом та ініціалами.
Для темної теми - затемнення 15-20%.
Уникайте випадкових «отруйних» поєднань; обмежте палітру (6-10 тонів).


6) Presence-індикація

6. 1 Базові статуси

СтатусКолірТекстПоведінка
OnlineЗелений («#00C853»)В мережіПідключено до WebSocket
IdleЖовтий («#FFD600»)НеактивнийНемає дій> 5 хв
Busy / DNDЧервоний («#D32F2F»)Не турбуватиУ грі або відключив повідомлення
OfflineСірий («#9E9E9E»)Не в мережіНемає з'єднання> 2 хв

6. 2 Activity-level presence

Додатково можна показувати дії:
  • «Грає»
  • «Робить ставку»
  • «У турнірі»
  • «На перерві»

6. 3 Технічна реалізація

Відправка'heartbeat'кожні 30 сек через WebSocket.
При відсутності сигналу> 60 сек →'offline'.
При активності (scroll, клік, bet) → оновлення статусу «online».
У сховищі: TTL 120 сек (Redis/Realtime API).


7) Патерни відображення

7. 1 У списках користувачів

Аватар + статус крапкою в правому нижньому кутку (8-10 px).
Tooltip: «Онлайн »/« Останній вхід 5 хв тому».

7. 2 В чаті

Аватар + нік + mini-presence ('online/offline').
Останнє повідомлення і час.
Синхронізація через socket event'user _ presence'.

7. 3 У таблиці лідерів

Аватар + ім'я + рівень/ранг.
Hover → міні-профіль (остання активність, країна, перемоги).

7. 4 У картці гравця (PvP/Live)

Великий аватар (64-80 px).
Живий статус: «У грі», «На паузі», «Очікує опонента».
Колір обведення = стан ('border-color'var).


8) Доступність (A11y)

'alt'з ім'ям і статусом: «Аватар гравця Alex - в мережі».
Для статусів - текстові дублікати, не тільки колір.
'aria-live = «polite»'при зміні статусу.
Контраст ≥ AA для статусу до фону.
Не використовувати миготливі індикатори.


9) Стану завантаження та помилки

Loading: сірий круг/скелетон без рамки.
Error: fallback-іконка + підказка «Аватар не завантажений».
Empty: ініціал або системний placeholder.


10) Приватність

Користувач повинен контролювати видимість presence (on/off).
Налаштування: «Показувати онлайн-статус »/« Показувати останню активність».
Для гостьових акаунтів presence прихований.
У PvP - можна показувати тільки «доступний/зайнятий», без точного часу.


11) Реалізація presence API

json
{
"userId": "u123",
"presence": "online",
"activity": "playing",
"lastSeen": "2025-11-03T18:52:00Z"
}
Сервер:
  • Підписка на канал '/presence/{ userId}'.
  • Періодичний ping/pong через socket.
  • Автоматичне оновлення статусу за TTL.
Клієнт:
js socket.on('presence:update', data => {
document.querySelector(`#u${data.userId}.status`).dataset.state = data.presence;
});

12) Специфіка iGaming

Live-ігри: статус «У кімнаті № 12», «Очікує дилера», «Роздача йде».
Турніри: бейдж «Бере участь», таймер закінчення.
Кооперативні PvP: активність «Суперник знайдений/неактивний».
Соціальні стрічки: аватар з mini-badge турніру або VIP-рівня.
Ставки: «У процесі ставки» (busy) → «Готовий» (online).


13) Метрики та перформанс

Presence latency: ≤ 1 сек від події до оновлення UI.
Heartbeat success rate: ≥ 99%.
CPU load на клієнті: ≤ 5% при 1000 оновлень/хв.
TTL accuracy: користувачі не «висять» онлайн після виходу.
Memory leak tests: очищення відписаних слухачів.


14) Антипатерни

Аватар без'alt'або без фону - «дірка» в UI.
Тільки колір для статусу (без тексту/tooltip).
Миготливі точки/пульсуючі кільця - дратують.
Відсутність ліміту на оновлення → перевантаження WebSocket.
Відображення «last seen» з точністю до секунди (порушення приватності).
Різні формати/пропорції аватарів в одній сітці.


15) Токени дизайн-системи (приклад)

json
{
"avatar": {
"sizes": { "xs": 24, "sm": 32, "md": 40, "lg": 64 },
"radius": { "circle": "50%", "square": 8 },
"border": { "width": 2, "color": "var(--bg-elevated)" }
},
"presence": {
"dotSize": 10,
"gap": 2,
"colors": {
"online": "#00C853",
"idle": "#FFD600",
"busy": "#D32F2F",
"offline": "#9E9E9E"
}
},
"motion": {
"updateMs": 150,
"fadeMs": 120
},
"a11y": {
"contrastAA": true,
"textLabel": true
}
}

16) QA-чек-лист

UI

  • Розміри і радіуси консистентні; аватар центрований.
  • Контраст ≥ AA; немає чисто колірних статусів.
  • Фолбек ініціал бачимо і читаємо.
  • Tooltip або текстовий статус присутній.

Presence

  • Статус оновлюється ≤ 1 сек після події.
  • Offline → Online коректно при реконнекті.
  • Не відбувається сплесків (дедуплікація подій).
  • Враховується бездіяльність (idle> 5 хв).

Приватність

  • Налаштування видимості presence працюють.
  • Last seen округлюється до хвилин/годин.
  • Немає зайвого розкриття активності (наприклад, ставок).

Перформанс

  • Heartbeat стабільний, WebSocket auto-reconnect з backoff.
  • Без витоків пам'яті при 1000 оновлень.
  • TTFF ≤ 100 мс при відображенні.

17) Документація в дизайн-системі

Компоненти: `Avatar`, `PresenceDot`, `UserCard`, `ActivityBadge`, `LiveStatus`.
Патерни: «Аватар з fallback», «Статус крапкою», «Реал-тайм оновлення presence», «Приватний режим».
Токени: розміри, кольори, радіуси, TTL оновлення, контраст.
Do/Don’t: колір без тексту (don't), круглі та квадратні форми в одному списку (don't), стабільні розміри та обведення (do).


Коротке резюме

Аватари і статуси - це не просто декоративні елементи, а мова спілкування між користувачами і системою. Послідовні кольори, читані підписи, коректна синхронізація і повага до приватності формують відчуття «живого» простору, особливо важливого в iGaming: на арені, в турнірі, в live-чаті або при ставках з друзями. Presence робить інтерфейс динамічним і людяним - але тільки при балансі інформативності і тиші.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.