Фан-платформа нового поколения

Живой
Фан
Статус

Поддержка клуба — это больше чем кричалки. Собирай трофеи, участвуй в ивентах, зарабатывай реальные награды.

6
Клубов
Ивентов
Болельщиков
Fan
Вступай!
🏟
Лужники · Москва
⚡ 12 мин до начала · Главная
Сбор ультрас
22 янв, 17:00
😎
Иван Петров
🧢
🔥
+31
📍 Лужники, Москва · Трибуна Б
✓ Бесплатно · +50 очков за участие
Спартак Москва ЦСКА Динамо Локомотив Торпедо Фан-трофеи Ultria · Москва Живой профиль Спартак Москва ЦСКА Динамо Локомотив Торпедо Фан-трофеи Ultria · Москва Живой профиль
Возможности платформы
Всё для
настоящего фана
Это про тебя →
01
🏟
Интерактивная карта
Реальные стадионы Москвы на живой карте. Наводи на клуб — входи в фан-зону мгновенно.
02
🪪
Живой профиль
Создай аватара-болельщика. Кастомизируй внешность, одежду, клубные аксессуары.
03
Ивенты & активности
Сборы ультрас, выезды, фан-зоны. Зарабатывай очки за каждое действие.
04
🏆
Цифровые трофеи
NFT-трофеи за посещения, победы клуба и особые достижения болельщика.
05
💬
Фан-чаты
Чаты по клубам и стадионам. Общайся с фанатами рядом в реальном времени.
06
🎁
Реальные награды
Очки = билеты, мерч, скидки в кафе и VIP-доступ к закрытым событиям.
Москва · Сезон 2025
Твой
Город
Все главные стадионы Москвы с реальными координатами. Подходи к стадиону — попадай в чат болельщиков автоматически.
⚽ Спартак ⭐ ЦСКА 🔵 Динамо 🚂 Локомотив ⚫ Торпедо 🏟 Лужники
МСК
Открыть карту →
Лужники · ВТБ Арена · Открытие · РЖД Арена
Join
Вступить в Ultria
Стань
частью
игры
Создай профиль, выбери клуб и начни зарабатывать трофеи уже сегодня.
(async () => { const token = getToken(); if (token) { const data = await apiFetch('/api/me'); if (data.id) { localStorage.setItem('ultria_user', JSON.stringify(data)); if (data.isAdmin) { document.getElementById('nav-admin').style.display = 'block'; document.getElementById('footer-admin').style.display = 'block'; localStorage.setItem('ultria_admin', 'true'); } } } })(); // ── Scroll reveal ───────────────────────────────────────── const obs = new IntersectionObserver((entries) => { entries.forEach((e,i) => { if(e.isIntersecting) setTimeout(()=>e.target.classList.add('visible'),i*70); }); }, {threshold:0.08}); document.querySelectorAll('.reveal').forEach(r=>obs.observe(r)); // ── Регистрация ─────────────────────────────────────────── async function handleRegister(e) { e.preventDefault(); const btn = e.target.querySelector('button[type=submit]'); const nick = document.getElementById('reg-nick').value.trim(); const email = document.getElementById('reg-email').value.trim(); const password = document.getElementById('reg-pass').value; const club = document.getElementById('reg-club').value; btn.textContent = 'Создаём аккаунт...'; btn.disabled = true; const data = await apiFetch('/api/register', { method: 'POST', body: JSON.stringify({ nick, email, password, club }), }); if (data.error) { btn.textContent = 'Создать профиль'; btn.disabled = false; showFormError(data.error); return; } localStorage.setItem('ultria_token', data.token); localStorage.setItem('ultria_user', JSON.stringify(data.user)); window.location.href = 'map.html'; } // ── Вход ────────────────────────────────────────────────── async function handleLogin(e) { e.preventDefault(); const btn = e.target.querySelector('button[type=submit]'); const email = document.getElementById('l-email').value.trim(); const password = document.getElementById('l-pass').value; btn.textContent = 'Входим...'; btn.disabled = true; const data = await apiFetch('/api/login', { method: 'POST', body: JSON.stringify({ email, password }), }); if (data.error) { btn.textContent = 'Войти'; btn.disabled = false; showFormError(data.error); return; } localStorage.setItem('ultria_token', data.token); localStorage.setItem('ultria_user', JSON.stringify(data.user)); if (data.user.isAdmin) localStorage.setItem('ultria_admin', 'true'); window.location.href = 'map.html'; } function showFormError(msg) { let el = document.getElementById('form-error'); if (!el) { el = document.createElement('p'); el.id = 'form-error'; el.style.cssText = 'color:#c0392b;font-size:0.82rem;margin-top:12px;letter-spacing:1px;font-weight:500'; document.querySelector('.reg-right form')?.appendChild(el); } el.textContent = '⚠ ' + msg; } function showLogin() { document.querySelector('.reg-right').innerHTML = `

Войти

← Регистрация

`; }