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).

Нажимая кнопку, вы соглашаетесь на обработку данных.