Розробка React-модуля міні-гри “Lucky Ticket” для Telegram Mini App (WebSocket, TypeScript)
Розробка React-модуля міні-гри “Lucky Ticket” для Telegram Mini App (WebSocket, TypeScript)
Загальний опис проєкту
Завдання: Розробити клієнтську частину (фронтенд) багатокористувацької міні-гри “Lucky Ticket” (Щасливий квиток).
Середовище: Модуль вбудовується в існуючий Telegram Mini App.
Стек:
Основна логіка та рендер гри: React.
Мова: TypeScript.
Взаємодія з бекендом: WebSocket (основне) + REST API (додаткове, за потреби).
Архітектура та зона відповідальності (Важливо!)
Застосунок використовує гібридний підхід.
НЕ входить до завдань виконавця (вже реалізовано в застосунку):
Верхній бар (лічильники валют, бургер-меню).
Нижнє навігаційне меню (Shop, Tasks, Birds...).
Загальна ініціалізація Telegram WebApp, авторизація користувача.
Входить до завдань виконавця:
Реалізація React-модуля гри, що монтується у наданий HTML-контейнер у центральній частині екрана.
Реалізація всієї внутрішньої логіки гри: сітка квитків, таби кімнат, анімація розіграшу, внутрішні попапи (Правила, Історія).
Адаптивна верстка вмісту Canvas, щоб він коректно заповнював виділений простір на різних пристроях, зберігаючи пропорції дизайну.
Підключення до WebSocket бекенда гри для отримання станів і надсилання дій гравця.
Ігровий процес і стани UI
Увесь UI гри повинен суворо відповідати наданому макету в Figma (посилання буде надано виконавцю).
3.1. Стан 1: Активний раунд (Збір учасників)
Основний екран, де гравці купують квитки.
Таби кімнат (Bet Tiers): Перемикачі “1k”, “5k”, “10k”.
При перемиканні змінюється активна кімната, оновлюється вартість квитка, призовий фонд і стан сітки.
Інформаційний блок:
Поточний призовий фонд (Current Prize Pool) — оновлюється в реальному часі.
Ціна квитка в поточній кімнаті.
Сітка квитків (20 комірок):
Вільний квиток: Іконка квитка. Клікабельний. При кліку переходить у стан “Обраний”.
Обраний квиток: Трохи тьмяніший і менший (як у Figma).
Зайнятий квиток (Чужий): Відображається заглушка аватара іншого гравця. Неклікабельний.
Зайнятий квиток (Свій): Відображається аватар поточного користувача (дані аватара мають передаватися в модуль при ініціалізації). Неклікабельний.
Кнопка дії (Buy):
Завжди сіра (як у Figma).
Якщо квитки обрані і вистачає коштів: активна (помаранчева), відображає загальну суму покупки. При натисканні надсилає запит на купівлю.
Якщо обрані, але не вистачає коштів: неактивна, поверх виводиться повідомлення “You don't have enough silver”.
Таймер: Відлік часу до автоматичного старту розіграшу (ХХ:СС).
3.2. Стан 2: Розіграш (Spinning)
Перехід у цей стан ініціюється подією з бекенда (таймер сплив АБО розкуплено всі 20 квитків).
Блокування: Сітка квитків і кнопка купівлі блокуються/затемнюються.
Анімація спінера: Поверх сітки з’являється панель із трьома “слотами”. У слотах запускається швидка анімація прокрутки аватарів учасників поточного раунду (ефект слот-машини).
Визначення переможців:
Бекенд надсилає список із трьох переможців.
Слоти зупиняються одночасно: 1-ше місце, 2-ге і 3-тє, показуючи аватар, ім’я переможця та суму виграшу.
Завершення: Після показу всіх результатів через кілька секунд гра автоматично повертається до Стану 1 (новий раунд).
3.3. Додаткові елементи (всередині Pixi)
Панель “5 Last games”: Таблиця внизу екрана. Дані надходять з бекенда при ініціалізації та оновлюються після кожного розіграшу.
Попап “Info” (Правила): Відкривається за кнопкою (?). Модальне вікно всередині Canvas, що перекриває гру. Статичний текст.
Попап “History” (Мої ігри): Модальне вікно з таблицею історії особистих ігор користувача та пагінацією. Дані підвантажуються з бекенда.
Взаємодія з бекендом (Data Flow)
Модуль має бути “тонким клієнтом”. Уся логіка валідації, розрахунку виграшів і таймерів знаходиться на сервері. Зв’язок через WebSocket.Вимоги до реалізації
Графіка та асети:
Усі візуальні елементи брати суворо з Figma.
Використовувати текстурні атласи (sprite sheets) для оптимізації.
Анімації: Реалізувати плавні анімації (спінер, відкриття попапів, підсвічування кнопок).
Оптимізація: Гра повинна працювати плавно на мобільних пристроях середнього рівня. Слідкувати за споживанням пам’яті, уникати витоків при перемиканні кімнат.
Типізація: Суворе використання TypeScript, типізація всіх вхідних і вихідних даних API.
Актуальні фриланс-проєкти в категорії Javascript та Typescript
Підтримка та розвиток сайту клінінгової компанії
906 UAH
Шукаю веб-розробника / вебмайстра для довгострокової підтримки та розвитку сайту клінінгової компанії. Сайт: https://donely.ca Про проєкт DoneLy Home Services — компанія з надання послуг прибирання в Канаді, яка активно розвивається та розширює географію роботи. Шукаю… Javascript та Typescript, Веб-програмування ∙ 8 годин 12 хвилин тому ∙ 48 ставок |
Розробка сайту по ТЗ на FramerПотрібно зробити сайт по цим параметрам що в тз https://docs.google.com/document/d/1ODO2C9Krb4AaMiJz9wfbNzWlAyA2FwCCHL8r0biajUY/edit?usp=sharing Називайте реальний рейт на основі цього дизайну HTML та CSS верстання, Javascript та Typescript ∙ 1 день 9 годин тому ∙ 26 ставок |
Розробка інтерактивної карти Palworld для сайтуПотрібно розробити інтерактивну карту Palworld за прикладом: https://palworld.gg/map Нам потрібна не просто статична картинка, а повноцінна інтерактивна карта, де користувач може дивитися локації, вмикати / вимикати категорії об’єктів, шукати потрібні точки та взаємодіяти з… HTML та CSS верстання, Javascript та Typescript ∙ 3 дні тому ∙ 32 ставки |
Розробка платформи AM Mobility (автосервіс, парковка, страхування, оренда автомобілів)
257 282 UAH
Шукаємо команду або досвідченого Full Stack розробника для створення MVP платформи AM Mobility. AM Mobility — це єдина цифрова екосистема для автомобілістів, що об'єднує в одному додатку та веб-платформі: парковку; автосервіс; шиномонтаж; автомийку; оренду автомобілів;… Javascript та Typescript, Веб-програмування ∙ 8 днів 6 годин тому ∙ 119 ставок |
Gsap анімації
1000 UAH
Доброго дня. Треба внести правки в поточному проєкті. Потрібен фахівець, який добре працює на gsap/lenis Треба зробити анімацію карточок. Детально ТЗ тут: https://www.figma.com/design/5bLEJudN5LPpB9ZSoJa2Eb/Untitled?m=auto&t=qwyluUctL1lrMNvh-6 Треба проявити креатив та… Javascript та Typescript, Веб-програмування ∙ 8 днів 12 годин тому ∙ 21 ставка |