GH GambleHub

Проектування UX-форм

1) Принципи

1. Спочатку завдання, потім поля. Форми - продовження призначеного для користувача сценарію, а не список БД.
2. Один екран - одна мета. Приберіть все, що не веде до завершення завдання.
3. Ніколи не втрачайте дані. Автосейв, відновлення чернетки, безпечні повтори.
4. Покажіть «як правильно». Правила та приклади до помилки; валідуйте дбайливо.
5. Доступність за замовчуванням. Лейбли, фокус, контраст, клавіатурна навігація.
6. Передбачувана швидкість. Перший відгук ≤ 100 мс, відправка з явним статусом і прогресом.

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

Мета → кроки → поля. Почніть з результату (наприклад, «виплата коштів») і виділіть мінімальний набір полів.
Угруповання за змістом: «Особисті дані», «Оплата», «Підтвердження». Кожна група ≤ 6 полів.
Прогресивне розкриття: додаткові поля показуйте за умовою (toggle/вибір країни).
Порядок полів - як в голові у користувача: від відомого до складного.

3) Макет і сітка

Одна колонка для мобільних і більшості завдань - швидше по погляду і таб-порядку.
Дві колонки доречні для коротких взаємопов'язаних полів (дата/час, ім'я/прізвище).
Висота рядка 40-48 px, відстань між полями 8-12 px (пов'язані )/16-24 px (групи).
Вирівнювання лейблів зверху поля; праворуч - для вузьких форм не використовувати.

4) Лейбли, плейсхолдери, хелпери

Лейбл обов'язковий. Плейсхолдер - приклад, а не заміна.
Helper-текст розміщуйте під полем: правила, формат, посилання на приклад.
Опціональні поля позначайте «(необов'язково)» замість «» на обов'язкових.

Приклад:
html
<label for = "iban"> IBAN <span class = "muted"> (optional) </span> </label>
<input id="iban" aria-describedby="iban-help">
<small id = "iban-help "> Format A-Z, 0-9; example: DE89 3704 0044 0532 0130 00 </small>

5) Кроки і прогрес

Багатокрокові форми (КУС/виплати): 3-5 кроків, явний прогрес «Крок 2 з 4».
Зберігайте завершені кроки; дозволяйте повернутися без втрати даних.
Кнопки навігації: «Назад», «Далі», фінальний «Підтвердити» - завжди на одному місці.

6) Управління введенням

Клавіатури та атрибути: 'type','inputmode','autocomplete'під тип даних.
Маски вводу використовуйте м'яко (телефон, IBAN, PAN, дата), зберігайте нормалізовані значення.
Автозаповнення не ламайте: коректні'autocomplete =» given-name» | «cc-number» | «one-time-code»'і т.п.
Пресети сум/шорткати: «+ 50/+ 100/Все» поруч з полем суми.

Таблиця атрибутів (скор.):
Полеtypeinputmodeautocomplete
Emailemailemailemail
Телефонtelteltel
Сумаtextdecimaloff
PANtextnumericcc-number
CVCpasswordnumericcc-csc
Дата картиtextnumericcc-exp
OTPtextnumericone-time-code

7) Валідація і помилки

Стратегія: до введення (helper), під час (м'які підказки), після (на blur/submit).
Асинхронні перевірки (унікальність логіну, ліміти, ризик) - з дебаунсом 250-400 мс.
Текст помилок: причина → як виправити → альтернатива.
Summary-панель над формою для декількох помилок + фокус до першої помилки.
Idempotency-Key для критичних дій (ставка/платіж) і безпечні ретраї.

8) Кнопки і відправка

Первинна CTA виділена кольором/розміром, доступна за Enter.
'Busy'-стан і блокування повтору кліка; при затримці> 3-5 с - «Очікуємо підтвердження»....
Після успіху - явний статус (тост/екран «Готово») + що буде далі.

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

Правильні зв'язки'label → input', помилки через'aria-describedby', критичні -'role = «alert»'.
Видиме':focus-visible', порядок Tab відповідає візуальному.
Контраст тексту/іконок ≥ AA; сенс не тільки кольором.
Підтримка'prefers-reduced-motion': мінімум анімацій.
Для груп радіокнопок -'fieldset/legend', для підказок -'role = «status»'.

10) Локалізація та міжнародні формати

Дати/валюти/номери - локальні при введенні, сховище - ISO/мінорні одиниці.
Допускайте різні алфавіти в іменах/адресах; не обмежуйте дефіси/апострофи.
Телефон зберігайте в E.164; країна вибирається явно або з «+ CC» при вставці.

11) Перформанс і стабільність

Перший візуальний відгук ≤ 100 мс; асинхронні перевірки - не блокують екран.
Skeleton замість «висить» спінера, фіксуйте висоти, уникайте CLS.
Віртуалізуйте довгі списки (наприклад, країни/банки).
Анімуйте тільки'transform/opacity', без масових blur/тіней.

12) Безпека і приватність

Не логуйте PAN/CVC/паспорт; не відправляйте в RUM/консоль.
Маскуйте чутливі поля, не зберігайте їх в автосейв.
Не розкривайте, чи існує аккаунт: «Якщо email зареєстрований, ми надішлемо листа».
Зберігання - мінімально необхідне; показуйте, навіщо потрібно KYC.

13) Патерни за типовими сценаріями

13. 1 Платіж/депозит

Поле суми з пресетами, валюта явно вказана.
PAN з м'якою маскою, Luhn-перевіркою; CVC прихований; дата'MM/YY'з авто- '/'.
Текст про комісії/терміни поруч, не в tooltip.

13. 2 Виведення коштів

Кроки: «Сума → Метод → Підтвердження».
Прогрес і «Зазвичай до N хвилин/годин» (без жорстких обіцянок).
Варіанти методу по країні; попередження про ліміти.

13. 3 KYC

Покроковий завантажувач файлів: вимоги до формату/ваги, передогляд, приватність.
Терміни перевірки і канал статусів (пошта/повідомлення).

13. 4 Ліміти і відповідальна гра

Зрозумілі одиниці (в день/тиждень/місяць), умисбудови, підтвердження змін, «Вступить в силу через»....

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

Placeholder замість лейблу.
Помилки «на кожен символ» без дебаунсу.
Скидання форми при помилці.
Критична інструкція захована тільки в tooltip.
Жорсткі маски, що забороняють валідні символи/вставку.
Блокування всієї сторінки заради перевірки одного поля.
Відправка без явного busy/прогресу.

15) Сніпети реалізації

Зведення помилок + фокус до першої проблеми

js function focusFirstError() {
const el = document. querySelector('[aria-invalid="true"]');
if (el) el. focus({ preventScroll:false });
}

Кнопка з миттєвим busy і ідемпотентністю

js btn. addEventListener('click', async () => {
btn. classList. add('is-busy');
try {
const r = await fetch('/api/submit', {
method: 'POST',
headers: { 'Idempotency-Key': crypto. randomUUID() },
body: new FormData(document. querySelector('form'))
});
if (!r.ok) throw new Error();
// success UI
} catch {
// show retry
} finally {
btn. classList. remove('is-busy');
}
});

HTML-каркас доступної групи радіокнопок

html
<fieldset>
<legend> How to get </legend>
<label><input type="radio" name="method" value="sepa"> SEPA</label>
<label><input type="radio" name="method" value="swift"> SWIFT</label>
</fieldset>

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

json
{
"form": {
"gap": 12,
"groupGap": 20,
"labelSize": 14,
"fieldHeight": 44,
"radius": 10
},
"motion": {
"pressMs": 90,
"hoverMs": 160,
"overlayInMs": 240
},
"validation": {
"debounceMs": 300,
"blurFeedbackMs": 100
},
"a11y": {
"focusRing": { "width": 2, "offset": 2 },
"contrastAA": true
}
}

CSS-пресети

css
.form { display:grid; gap:12px; }
.form__group { display:grid; gap:20px; }
label { font-size:14px; }
.input { height:44px; padding:0 12px; border-radius:10px; }
.input:focus-visible { outline:2px solid var(--focus-ring); outline-offset:2px; }
.field-error { color: var(--role-danger); font-size:.875rem; margin-top:6px; }

17) Метрики та експерименти

Completion Rate, Time-to-Complete, Error Rate по полях.
Retry Success Rate, частка покинутих форм, глибина кроку.
CTR підказок/прикладів, частка автозаповнень.
A/B: порядок полів, пресети сум, тексти помилок, поділ на кроки.

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

Сенс і потік

  • Поля відповідають меті; немає зайвих.
  • Групи логічні; максимум 6 полів на групу.

Введення

  • Коректні'type/inputmode/autocomplete'.
  • Маски м'які, вставка не ламається, caret передбачуваний.

Валідація

  • Helper до введення; помилки на blur/submit; дебаунс 250-400 мс.
  • Summary-панель для множинних помилок; фокус до першої.

Доступність

  • Лейбли пов'язані; контраст ≥ AA;':focus-visible'видно.
  • Навігація з клавіатури; радіогрупи з'fieldset/legend'.

Перформанс

  • Перший відгук ≤ 100 мс; немає «висять» спінерів.
  • Немає CLS; довгі списки віртуалізовані.

Безпека

  • Немає логів чутливих полів; PAN/CVC не в автосейві.
  • Ідемпотентність і безпечні ретраї включені.

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

Ставки: поле суми + пресети, миттєвий'busy', оптимістичне підтвердження з можливістю undo (якщо регламент допускає).
Платежі/висновки: явні комісії і терміни поряд з полями, не тільки в підказках; перевірка лімітів і статусу KYC.
Турніри: форма реєстрації з мінімальним набором даних, правила і погоджувані чекбокси без «темних патернів».
Відповідальна гра: форми установки лімітів зі зрозумілими інтервалами і прев'ю результату («Ваш денний ліміт стане 2 000 ₴ з завтрашнього дня»).

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

Хороша форма - це ясна мета, мінімальний набір полів, зрозумілі правила до помилки, миттєвий відгук і збережені дані. Проектуйте структуру від сценарію, поважайте доступність і локалі, включайте безпечні ретраї та ідемпотентність. Так форми відчуваються швидкими і довіреними - особливо в критичних сценаріях iGaming.

Contact

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

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

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

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

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

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