STRIX Logo
STRIX COMMUNITY
Official Community Leaderboard & Hall of Fame

Community
Leaderboard & Rankings

Discover our most loved creators, top community supporters giving hearts, and all-time points champions across streamers and viewers!

Your Wallet Balance: 0 PTS
Hearts Received: 0
Hearts Given: 0
#1 Points Leader: Standby
Top Strix Spotlight: Standby
Top Community Spotlight: Standby
Individual Member Points Standings: This leaderboard ranks every community member strictly by their personal cumulative points earned. Spending points for perks does not decrease your leaderboard ranking!
MEMBER LIFETIME POINTS

Community Podium (Top 3)

Top ranked members in selected view

Full Leaderboard Standings

Rankings updated dynamically based on real member activity

0 members

How Leaderboard Rankings Work

Fair, transparent individual member scoring for both broadcasters and viewers

Member Points Standings

Tracks every point earned by each member individually. Streamers and viewers are separated into distinct ladders so everyone has fair competition! Spending points will never decrease your rank.

Hearts Received

Measures community love received across creators and viewers. Supporters can vote once every 24 hours for any community member, not locked to live broadcast status.

Hearts Given

Celebrates our most active viewers and supporters! Every heart you give awards you +5 Community Points to your wallet and climbs you up the Hearts Given leaderboard.

Strix Spotlight

Tracks how many times community streamers have held the official 30-minute queue spotlight on the homepage while broadcasting live on Twitch.

Community Spotlight

Tracks how many times creators have received a Community Spotlight boost (5,000 PTS) activated by members from the Points Shop!

let ALL_COMMUNITY_MEMBERS = ([{"id":"218433011","login":"tatubber","displayName":"TATUBBER","avatar":"https:\/\/static-cdn.jtvnw.net\/jtv_user_pictures\/14274916-f857-4e23-82a6-038f9c35e21b-profile_image-300x300.png","banner":"https:\/\/static-cdn.jtvnw.net\/jtv_user_pictures\/34c3a1ce-a4bf-442f-b4c4-892f03f230d8-channel_offline_image-1920x1080.jpeg","role":"streamer","isStreamer":true,"isLive":false,"game":"Offline","title":"Offline","viewers":0,"followers":640,"subscribers":0,"subPoints":0,"broadcasterType":"affiliate","description":"STRIX Community Streamer","tierBreakdown":{"tier1":0,"tier2":0,"tier3":0},"allTimePoints":0,"pointsBalance":0,"heartsGiven":0,"heartsReceived":0,"timesFeatured":0,"timesSpecialFeatured":0,"joinedDate":"May 2018","claimedSessions":[],"tags":["Community","English"],"lastUpdated":"2026-10-10 22:46:13","createdAt":"2026-10-10 22:46:13","totalTimesFeatured":0}] || []) .filter(m => m && m.login); // Hydrate with client-side user try { const savedUserStr = localStorage.getItem('strix_user'); if (savedUserStr) { const u = JSON.parse(savedUserStr); if (u && u.login) { const uId = u.id ? String(u.id) : ''; const uLogin = String(u.login).toLowerCase(); const exists = ALL_COMMUNITY_MEMBERS.some(m => (uId && String(m.id) === uId) || (uLogin && m.login && String(m.login).toLowerCase() === uLogin) ); if (!exists) { ALL_COMMUNITY_MEMBERS.push(u); } } } } catch (e) {} function isMemberStreamer(m) { if (!m) return false; if (m.isStreamer !== undefined) return Boolean(m.isStreamer); const role = m.role ? String(m.role).toLowerCase() : ''; if (role === 'streamer') return true; if (role === 'viewer' || role === 'member' || role === 'supporter') return false; const bt = m.broadcasterType ? String(m.broadcasterType).toLowerCase() : ''; const hasBt = bt && bt !== '' && bt !== 'none' && bt !== 'viewer' && bt !== 'member'; const followers = parseInt(m.followers || 0, 10); return Boolean(hasBt || followers > 50 || m.isLive); } // State let currentMode = 'points'; // 'points' | 'likes' | 'heartsgiven' | 'strix' | 'community' let pointsRoleFilter = 'all'; // 'all' | 'streamer' | 'viewer' let likesRoleFilter = 'all'; // 'all' | 'streamer' | 'viewer' let heartsRoleFilter = 'all'; // 'all' | 'streamer' | 'viewer' let strixLiveOnly = false; let communityLiveOnly = false; let searchQuery = ''; function setMainMode(mode) { currentMode = mode; const activeClass = 'py-2.5 px-3 rounded-xl text-xs font-black transition-all text-center justify-center flex items-center bg-white text-black shadow-lg shadow-white/10'; const inactiveClass = 'py-2.5 px-3 rounded-xl text-xs font-semibold text-zinc-400 hover:text-white transition-all text-center justify-center flex items-center'; // Update Mode Buttons UI const tabBtnMap = { 'points': { el: document.getElementById('tabModePoints') }, 'likes': { el: document.getElementById('tabModeLikes') }, 'heartsgiven': { el: document.getElementById('tabModeHeartsGiven') }, 'strix': { el: document.getElementById('tabModeStrix') }, 'community': { el: document.getElementById('tabModeCommunity'), isCommunity: true } }; Object.keys(tabBtnMap).forEach(k => { const item = tabBtnMap[k]; if (!item || !item.el) return; const base = item.isCommunity ? 'col-span-2 sm:col-span-1 ' : ''; item.el.className = base + (k === mode ? activeClass : inactiveClass); }); // Toggle corresponding notice banner const noticeMap = { 'points': document.getElementById('pointsLockedNotice'), 'likes': document.getElementById('likesNotice'), 'heartsgiven': document.getElementById('heartsGivenNotice'), 'strix': document.getElementById('strixNotice'), 'community': document.getElementById('communityNotice') }; Object.keys(noticeMap).forEach(k => { const el = noticeMap[k]; if (!el) return; if (k === mode) { el.classList.remove('hidden'); } else { el.classList.add('hidden'); } }); renderSecondaryControls(); renderLeaderboard(); } function setPointsRole(role) { pointsRoleFilter = role; renderSecondaryControls(); renderLeaderboard(); } function setLikesRole(role) { likesRoleFilter = role; renderSecondaryControls(); renderLeaderboard(); } function setHeartsRole(role) { heartsRoleFilter = role; renderSecondaryControls(); renderLeaderboard(); } function toggleStrixLiveOnly() { strixLiveOnly = !strixLiveOnly; renderSecondaryControls(); renderLeaderboard(); } function toggleCommunityLiveOnly() { communityLiveOnly = !communityLiveOnly; renderSecondaryControls(); renderLeaderboard(); } function handleSearchLeaderboard() { const input = document.getElementById('leaderboardSearchInput'); searchQuery = input ? input.value.trim().toLowerCase() : ''; renderLeaderboard(); } function renderSecondaryControls() { const container = document.getElementById('secondaryControlsContainer'); if (!container) return; if (currentMode === 'points') { container.innerHTML = `
`; } else if (currentMode === 'likes') { container.innerHTML = `
`; } else if (currentMode === 'heartsgiven') { container.innerHTML = `
`; } else if (currentMode === 'strix') { container.innerHTML = `
30-Minute Queue Spotlight Rotations
`; } else if (currentMode === 'community') { container.innerHTML = `
Shop Community Spotlight Boosts (5,000 PTS)
`; } if (window.lucide) lucide.createIcons(); } function showToast(msg, showLoginBtn = false) { const toast = document.getElementById('leaderboardToast'); const text = document.getElementById('leaderboardToastText'); const action = document.getElementById('leaderboardToastAction'); if (toast && text) { text.textContent = msg; if (action) { if (showLoginBtn) { action.innerHTML = ` `; } else { action.innerHTML = ` View Wallet → `; } } toast.classList.remove('hidden'); if (window.toastTimer) clearTimeout(window.toastTimer); window.toastTimer = setTimeout(() => toast.classList.add('hidden'), 5000); if (window.lucide) lucide.createIcons(); } } function handleVoteLike(streamerId) { const streamer = ALL_COMMUNITY_MEMBERS.find(s => String(s.id) === String(streamerId) || String(s.login).toLowerCase() === String(streamerId).toLowerCase() ); if (!streamer) return; if (typeof StrixLikes !== 'undefined' && !StrixLikes.isLoggedIn()) { showToast('🔒 Please log in with your Twitch account to send hearts and vote!', true); return; } const res = StrixLikes.like(streamer); showToast(res.message, !res.success && res.requireLogin); // Update header points display in real-time const navBal = document.getElementById('nav-points-bal'); if (navBal && typeof StrixPoints !== 'undefined') { navBal.textContent = StrixPoints.getBalance().toLocaleString() + ' PTS'; } renderLeaderboard(); } function renderLeaderboard() { const cleanMembers = ALL_COMMUNITY_MEMBERS.filter(m => m && m.login); const currentUser = (typeof StrixLikes !== 'undefined' && StrixLikes.getCurrentUser) ? StrixLikes.getCurrentUser() : null; // Global metrics across community const allLikesMap = StrixLikes.getLeaderboard ? StrixLikes.getLeaderboard(cleanMembers, 'all') : []; const totalCommunityLikes = allLikesMap.reduce((acc, s) => acc + (s.likes || 0), 0); const heartsGivenList = StrixLikes.getHeartsGivenLeaderboard ? StrixLikes.getHeartsGivenLeaderboard(cleanMembers, 'all') : []; const totalCommunityHeartsGiven = heartsGivenList.reduce((acc, m) => acc + (m.heartsGiven || 0), 0); const allPointsList = StrixPoints.getPointsLeaderboard ? StrixPoints.getPointsLeaderboard(cleanMembers, 'all') : []; const totalAllTimePoints = allPointsList.reduce((acc, m) => acc + (m.allTimePoints || 0), 0); // Update Hero stats const heroPointsEl = document.getElementById('heroTotalPointsCount'); const heroLikesEl = document.getElementById('heroTotalLikesCount'); const heroLikesLabel = document.getElementById('heroLikesLabel'); const heroGivenEl = document.getElementById('heroTotalHeartsGivenCount'); const heroGivenLabel = document.getElementById('heroHeartsGivenLabel'); const heroLeaderEl = document.getElementById('heroLeaderName'); const heroWalletEl = document.getElementById('heroYourWalletCount'); if (heroPointsEl) heroPointsEl.textContent = totalAllTimePoints.toLocaleString() + ' PTS'; if (currentUser) { const uId = currentUser.id ? String(currentUser.id) : (currentUser.login || ''); const myLikes = StrixLikes.getLikes(uId, currentUser.heartsReceived || 0); const myGiven = StrixLikes.getHeartsGiven(currentUser.id, currentUser.login, currentUser.heartsGiven || 0); if (heroLikesLabel) heroLikesLabel.textContent = 'Your Hearts Received:'; if (heroLikesEl) heroLikesEl.textContent = myLikes.toLocaleString(); if (heroGivenLabel) heroGivenLabel.textContent = 'Your Hearts Given:'; if (heroGivenEl) heroGivenEl.textContent = myGiven.toLocaleString(); if (heroWalletEl && typeof StrixPoints !== 'undefined') { heroWalletEl.textContent = StrixPoints.getBalance().toLocaleString() + ' PTS'; } } else { if (heroLikesLabel) heroLikesLabel.textContent = 'Hearts Received:'; if (heroLikesEl) heroLikesEl.textContent = totalCommunityLikes.toLocaleString(); if (heroGivenLabel) heroGivenLabel.textContent = 'Hearts Given:'; if (heroGivenEl) heroGivenEl.textContent = totalCommunityHeartsGiven.toLocaleString(); } // Update Top Strix Spotlight and Community Spotlight Streamers in Hero const allStreamers = cleanMembers.filter(m => isMemberStreamer(m)); const sortedStrixAll = [...allStreamers].sort((a, b) => (b.timesFeatured || 0) - (a.timesFeatured || 0)); const heroStrixEl = document.getElementById('heroTopStrixName'); if (heroStrixEl) { if (sortedStrixAll.length > 0 && (sortedStrixAll[0].timesFeatured || 0) > 0) { heroStrixEl.textContent = `${sortedStrixAll[0].displayName || sortedStrixAll[0].login} (${sortedStrixAll[0].timesFeatured}x)`; } else if (sortedStrixAll.length > 0) { heroStrixEl.textContent = `${sortedStrixAll[0].displayName || sortedStrixAll[0].login}`; } else { heroStrixEl.textContent = 'Standby'; } } const sortedCommunityAll = [...allStreamers].sort((a, b) => (b.timesSpecialFeatured || 0) - (a.timesSpecialFeatured || 0)); const heroCommunityEl = document.getElementById('heroTopCommunityName'); if (heroCommunityEl) { if (sortedCommunityAll.length > 0 && (sortedCommunityAll[0].timesSpecialFeatured || 0) > 0) { heroCommunityEl.textContent = `${sortedCommunityAll[0].displayName || sortedCommunityAll[0].login} (${sortedCommunityAll[0].timesSpecialFeatured}x)`; } else if (sortedCommunityAll.length > 0) { heroCommunityEl.textContent = `${sortedCommunityAll[0].displayName || sortedCommunityAll[0].login}`; } else { heroCommunityEl.textContent = 'Standby'; } } let ranked = []; const podiumTitle = document.getElementById('podiumSectionTitle'); const podiumSubtitle = document.getElementById('podiumSectionSubtitle'); const tableTitle = document.getElementById('tableHeaderTitle'); const tableSubtitle = document.getElementById('tableHeaderSubtitle'); const tableHeader = document.getElementById('leaderboardTableHeader'); // SECTION 1: TOTAL POINTS LEADERBOARD (BOTH USERS & STREAMERS) if (currentMode === 'points') { ranked = StrixPoints.getPointsLeaderboard(cleanMembers, pointsRoleFilter); const roleLabel = pointsRoleFilter === 'streamer' ? 'Streamers' : (pointsRoleFilter === 'viewer' ? 'Viewers / Users' : 'All Members (Users & Streamers)'); if (podiumTitle) podiumTitle.textContent = `Top ${roleLabel} Points Champions`; if (podiumSubtitle) podiumSubtitle.textContent = `Ranked by total lifetime points earned (spending never decreases leaderboard standing)`; if (tableTitle) tableTitle.innerHTML = `${roleLabel} Total Points Standings`; if (tableSubtitle) tableSubtitle.textContent = `Cumulative lifetime points earned since joining`; if (heroLeaderEl) heroLeaderEl.textContent = ranked.length > 0 ? `${ranked[0].displayName || ranked[0].login} (${ranked[0].allTimePoints.toLocaleString()} PTS)` : 'Standby'; if (tableHeader) { if (pointsRoleFilter === 'streamer') { tableHeader.innerHTML = ` Rank Streamer Supporter Tier Spotlights All-Time Points Profile `; } else { tableHeader.innerHTML = ` Rank Member Role Supporter Tier All-Time Points Profile `; } } // SECTION 2: HEARTS RECEIVED (NOT LOCKED TO LIVE STATUS) } else if (currentMode === 'likes') { ranked = StrixLikes.getLeaderboard(cleanMembers, likesRoleFilter); const roleLabel = likesRoleFilter === 'streamer' ? 'Streamers' : (likesRoleFilter === 'viewer' ? 'Viewers' : 'All Members (Streamers & Viewers)'); if (podiumTitle) podiumTitle.textContent = `Most Loved ${roleLabel} (Hearts Received)`; if (podiumSubtitle) podiumSubtitle.textContent = `Community members ranked by total hearts received (not locked to live status)`; if (tableTitle) tableTitle.innerHTML = `${roleLabel} Hearts Received Standings`; if (tableSubtitle) tableSubtitle.textContent = `Heart votes received from community supporters (24h rate limit)`; if (heroLeaderEl) heroLeaderEl.textContent = ranked.length > 0 ? `${ranked[0].displayName || ranked[0].login} (${ranked[0].likes.toLocaleString()} ❤️)` : 'Standby'; if (tableHeader) { if (likesRoleFilter === 'streamer') { tableHeader.innerHTML = ` Rank Streamer Status Spotlights Hearts Received Support Member `; } else { tableHeader.innerHTML = ` Rank Member Role Status Hearts Received Support Member `; } } // SECTION 3: HEARTS GIVEN (TOP SUPPORTERS - STREAMERS & VIEWERS) } else if (currentMode === 'heartsgiven') { ranked = StrixLikes.getHeartsGivenLeaderboard(cleanMembers, heartsRoleFilter); const roleLabel = heartsRoleFilter === 'streamer' ? 'Streamers' : (heartsRoleFilter === 'viewer' ? 'Viewers' : 'Streamers & Viewers'); if (podiumTitle) podiumTitle.textContent = `Top Supporters (Hearts Given) - ${roleLabel}`; if (podiumSubtitle) podiumSubtitle.textContent = `Community supporters who gave hearts to creators (+5 PTS earned per vote)`; if (tableTitle) tableTitle.innerHTML = `${roleLabel} Hearts Given Standings`; if (tableSubtitle) tableSubtitle.textContent = `Number of heart votes given to support creators (+5 PTS earned per vote)`; if (heroLeaderEl) heroLeaderEl.textContent = ranked.length > 0 ? `${ranked[0].displayName || ranked[0].login} (${(ranked[0].heartsGiven || 0).toLocaleString()} Given)` : 'Standby'; if (tableHeader) { if (heartsRoleFilter === 'streamer') { tableHeader.innerHTML = ` Rank Supporter Supporter Tier Spotlights Community Hearts Given Profile `; } else { tableHeader.innerHTML = ` Rank Supporter Role Supporter Tier Community Hearts Given Profile `; } } // SECTION 4: STRIX SPOTLIGHT (INDEPENDENT CATEGORY - QUEUE ROTATIONS) } else if (currentMode === 'strix') { let list = allStreamers; if (strixLiveOnly) { list = list.filter(s => s.isLive); } list = [...list].sort((a, b) => { const qA = a.timesFeatured || 0; const qB = b.timesFeatured || 0; if (qB !== qA) return qB - qA; return (b.allTimePoints || 0) - (a.allTimePoints || 0); }); ranked = list.map((s, idx) => ({ ...s, rank: idx + 1 })); if (podiumTitle) podiumTitle.textContent = 'Top Strix Spotlight Streamers'; if (podiumSubtitle) podiumSubtitle.textContent = 'Creators ranked strictly by number of times featured in the 30-minute homepage queue'; if (tableTitle) tableTitle.innerHTML = 'Strix Spotlight Standings'; if (tableSubtitle) tableSubtitle.textContent = 'Ranked independently by times featured in the 30-minute queue rotation'; if (heroLeaderEl) heroLeaderEl.textContent = ranked.length > 0 ? `${ranked[0].displayName || ranked[0].login} (${ranked[0].timesFeatured || 0}x)` : 'Standby'; if (tableHeader) { tableHeader.innerHTML = ` Rank Streamer Status Followers Strix Spotlight Support / Profile `; } // SECTION 5: COMMUNITY SPOTLIGHT (INDEPENDENT CATEGORY - SHOP BOOSTS) } else if (currentMode === 'community') { let list = allStreamers; if (communityLiveOnly) { list = list.filter(s => s.isLive); } list = [...list].sort((a, b) => { const vA = a.timesSpecialFeatured || 0; const vB = b.timesSpecialFeatured || 0; if (vB !== vA) return vB - vA; return (b.allTimePoints || 0) - (a.allTimePoints || 0); }); ranked = list.map((s, idx) => ({ ...s, rank: idx + 1 })); if (podiumTitle) podiumTitle.textContent = 'Top Community Spotlight Streamers'; if (podiumSubtitle) podiumSubtitle.textContent = 'Creators ranked strictly by Community Spotlight boosts (5,000 PTS) redeemed from the Points Shop'; if (tableTitle) tableTitle.innerHTML = 'Community Spotlight Standings'; if (tableSubtitle) tableSubtitle.textContent = 'Ranked independently by Community Spotlight redemptions from the Points Shop'; if (heroLeaderEl) heroLeaderEl.textContent = ranked.length > 0 ? `${ranked[0].displayName || ranked[0].login} (${ranked[0].timesSpecialFeatured || 0}x)` : 'Standby'; if (tableHeader) { tableHeader.innerHTML = ` Rank Streamer Status Followers Community Spotlight Support / Profile `; } } // Apply Real-Time Search Filter if active let displayRanked = ranked; if (searchQuery) { displayRanked = ranked.filter(m => { const dName = (m.displayName || '').toLowerCase(); const login = (m.login || '').toLowerCase(); const game = (m.game || '').toLowerCase(); const role = m.isStreamer ? 'streamer' : 'viewer'; return dName.includes(searchQuery) || login.includes(searchQuery) || game.includes(searchQuery) || role.includes(searchQuery); }); } const countSpan = document.getElementById('rankedCountSpan'); if (countSpan) countSpan.textContent = displayRanked.length; renderPodium(displayRanked, currentMode); renderTable(displayRanked, currentMode); if (window.lucide) lucide.createIcons(); } // Unified Modern Podium Renderer function renderPodium(ranked, mode) { const podiumEl = document.getElementById('podiumCardsGrid'); if (!podiumEl) return; if (!ranked || ranked.length === 0) { if (searchQuery) { podiumEl.innerHTML = renderEmptyPodium(`No community members matched "${searchQuery}". Clear your search to view all standings.`); } else if (mode === 'points') { podiumEl.innerHTML = renderEmptyPodium('Season 1 Points are live! Connect your Twitch account to start earning points and climb the podium.'); } else if (mode === 'likes') { podiumEl.innerHTML = renderEmptyPodium('No hearts have been received yet. Click Vote on any community member to send hearts and boost their ranking!'); } else if (mode === 'heartsgiven') { podiumEl.innerHTML = renderEmptyPodium('No hearts have been given yet! Click the heart on any creator to become our #1 supporter.'); } else if (mode === 'strix') { podiumEl.innerHTML = renderEmptyPodium('No streamers have held the Strix Spotlight yet. Streamers are automatically placed when broadcasting live on Twitch!'); } else if (mode === 'community') { podiumEl.innerHTML = renderEmptyPodium('No Community Spotlights have been redeemed yet. Visit the Points Shop to boost your favorite creator with 5,000 PTS!'); } else { podiumEl.innerHTML = renderEmptyPodium('No members in current standings.'); } return; } const top3 = ranked.slice(0, 3); // Build Podium Cards if (top3.length === 1) { // 1 Member: Centered Champion Card podiumEl.innerHTML = `
${renderPodiumCard(top3[0], mode, 1, 'order-1')}
`; } else if (top3.length === 2) { // 2 Members: Centered Gold & Silver podiumEl.innerHTML = `
${renderPodiumCard(top3[0], mode, 1, 'order-1 sm:order-1 sm:-translate-y-3 sm:scale-[1.02]')} ${renderPodiumCard(top3[1], mode, 2, 'order-2 sm:order-2')}
`; } else { // 3+ Members: Olympic Podium (Gold in middle elevated on desktop, Gold first on mobile) podiumEl.innerHTML = `
${renderPodiumCard(top3[1], mode, 2, 'order-2 md:order-1')} ${renderPodiumCard(top3[0], mode, 1, 'order-1 md:order-2 md:-translate-y-4 md:scale-[1.03] z-10')} ${renderPodiumCard(top3[2], mode, 3, 'order-3 md:order-3')}
`; } } function renderPodiumCard(s, mode, rank, orderClass = '') { if (!s) return ''; const isFirst = rank === 1; const isSecond = rank === 2; // Themed container borders and glows (Monochrome Theme) let cardStyle = ''; let rankPill = ''; let avatarRing = ''; let medalBadge = ''; if (isFirst) { cardStyle = 'bg-gradient-to-b from-white/15 via-[#141518] to-[#0a0b0d] border-2 border-white/80 shadow-[0_0_35px_rgba(255,255,255,0.12)] backdrop-blur-md'; rankPill = 'bg-white text-black font-black shadow-sm'; avatarRing = 'border-4 border-white ring-4 ring-white/20 shadow-2xl shadow-white/10'; medalBadge = 'bg-white text-black font-black shadow-white/30'; } else if (isSecond) { cardStyle = 'bg-gradient-to-b from-white/10 via-[#121316] to-[#0a0b0d] border border-white/40 shadow-[0_0_25px_rgba(255,255,255,0.08)] backdrop-blur-md'; rankPill = 'bg-zinc-700 text-white font-bold border border-white/20'; avatarRing = 'border-3 border-zinc-400 ring-2 ring-white/10 shadow-xl'; medalBadge = 'bg-zinc-300 text-black font-black shadow-black/40'; } else { cardStyle = 'bg-gradient-to-b from-white/5 via-[#101114] to-[#0a0b0d] border border-white/20 shadow-[0_0_20px_rgba(255,255,255,0.05)] backdrop-blur-md'; rankPill = 'bg-zinc-800 text-zinc-300 font-bold border border-white/10'; avatarRing = 'border-3 border-zinc-600 ring-2 ring-white/10 shadow-xl'; medalBadge = 'bg-zinc-600 text-white font-black shadow-black/40'; } const rankLabel = isFirst ? '👑 #1 CHAMPION' : (isSecond ? '🥈 #2 SILVER' : '🥉 #3 BRONZE'); const medalIcon = isFirst ? '👑' : (isSecond ? '🥈' : '🥉'); // Stat metric block based on mode let metricBlock = ''; if (mode === 'points') { const pts = parseInt(s.allTimePoints || 0, 10); metricBlock = `
${pts.toLocaleString()} ALL-TIME PTS
`; } else if (mode === 'likes') { const likes = parseInt(s.likes || 0, 10); metricBlock = `
${likes.toLocaleString()} HEARTS RECEIVED
`; } else if (mode === 'heartsgiven') { const given = parseInt(s.heartsGiven || 0, 10); metricBlock = `
${given.toLocaleString()} HEARTS GIVEN
`; } else if (mode === 'strix') { const qFeat = parseInt(s.timesFeatured || 0, 10); metricBlock = `
${qFeat.toLocaleString()} STRIX SPOTLIGHTS
30-Minute Queue Rotations
`; } else if (mode === 'community') { const vipFeat = parseInt(s.timesSpecialFeatured || 0, 10); metricBlock = `
${vipFeat.toLocaleString()} COMMUNITY SPOTLIGHTS
Shop Boost Redemptions
`; } // Action button area let cardAction = ''; if (mode === 'likes') { cardAction = `
`; } else if (mode === 'strix' || mode === 'community') { cardAction = `
${s.isLive ? 'Live Now' : 'Offline'}
`; } else { const tierName = s.tier ? s.tier.name : 'Bronze'; const tierIcon = s.tier ? s.tier.icon : '🥉'; cardAction = `
${tierIcon} ${tierName} Tier Profile →
`; } return `
${rankLabel} ${s.isStreamer ? 'STREAMER' : 'VIEWER'}
${s.displayName || s.login} ${medalIcon}

${s.displayName || s.login}

@${s.login} ${s.isLive ? ` LIVE ` : ''}
${s.isStreamer && mode !== 'strix' && mode !== 'community' ? `
⭐ ${s.timesFeatured || 0} Strix 👑 ${s.timesSpecialFeatured || 0} Community
` : ''}
${metricBlock}
${cardAction}
`; } // Unified Table Renderer function renderTable(ranked, mode) { const tableBody = document.getElementById('leaderboardTableBody'); if (!tableBody) return; if (!ranked || ranked.length === 0) { tableBody.innerHTML = `

No community members found matching criteria.

Log in with Twitch or cast heart votes to be listed here!

`; return; } tableBody.innerHTML = ranked.map(s => { // Rank Medal / Number let rankBadge = ''; if (s.rank === 1) { rankBadge = '👑 1'; } else if (s.rank === 2) { rankBadge = '🥈 2'; } else if (s.rank === 3) { rankBadge = '🥉 3'; } else { rankBadge = `#${s.rank}`; } // Role Pill const rolePill = s.isStreamer ? 'STREAMER' : 'VIEWER'; // Tier Pill const tierPill = s.tier ? `${s.tier.icon}${s.tier.name}` : 'Bronze 🥉'; const qFeat = parseInt(s.timesFeatured || 0, 10); const vipFeat = parseInt(s.timesSpecialFeatured || 0, 10); const totFeat = qFeat + vipFeat; // Feature Badge for table cells const featurePillBadge = `
⭐ ${qFeat} Strix 👑 ${vipFeat} Community
`; if (mode === 'points') { const pts = parseInt(s.allTimePoints || 0, 10); return ` ${rankBadge} ${s.displayName || s.login}
${s.displayName || s.login} @${s.login} ${(s.isStreamer && pointsRoleFilter !== 'streamer') ? `
⭐ ${qFeat} • 👑 ${vipFeat} Community
` : ''}
${pointsRoleFilter === 'streamer' ? ` ${tierPill} ${featurePillBadge} ` : ` ${rolePill} ${tierPill} `}
${pts.toLocaleString()} PTS
View `; } else if (mode === 'likes') { const likes = parseInt(s.likes || 0, 10); return ` ${rankBadge} ${s.displayName || s.login}
${s.displayName || s.login} ${s.isStreamer ? (s.game || 'Streamer') : '@' + s.login} ${(s.isStreamer && likesRoleFilter !== 'streamer') ? `
⭐ ${qFeat} • 👑 ${vipFeat} Community
` : ''}
${likesRoleFilter === 'streamer' ? ` ${s.isLive ? ` ${(s.viewers || 0).toLocaleString()} live ` : 'Offline'} ${featurePillBadge} ` : ` ${rolePill} ${s.isLive ? ` ${(s.viewers || 0).toLocaleString()} live ` : 'Offline'} `}
${likes.toLocaleString()}
`; } else if (mode === 'heartsgiven') { const given = parseInt(s.heartsGiven || 0, 10); return ` ${rankBadge} ${s.displayName || s.login}
${s.displayName || s.login} @${s.login} ${(s.isStreamer && heartsRoleFilter !== 'streamer') ? `
⭐ ${qFeat} • 👑 ${vipFeat} Community
` : ''}
${heartsRoleFilter === 'streamer' ? ` ${s.tier ? s.tier.icon : '🥉'} ${s.tier ? s.tier.name : 'Bronze'} ${featurePillBadge} ` : ` ${rolePill} ${s.tier ? s.tier.icon : '🥉'} ${s.tier ? s.tier.name : 'Bronze'} (+${(given * 5).toLocaleString()} PTS) `}
${given.toLocaleString()} Hearts
View `; } else if (mode === 'strix') { return ` ${rankBadge} ${s.displayName || s.login}
${s.displayName || s.login} ${s.game || 'Streamer'}
${s.isLive ? ` ${(s.viewers || 0).toLocaleString()} live ` : 'Offline'} ${(s.followers || 0).toLocaleString()}
⭐ ${qFeat.toLocaleString()}
View
`; } else if (mode === 'community') { return ` ${rankBadge} ${s.displayName || s.login}
${s.displayName || s.login} ${s.game || 'Streamer'}
${s.isLive ? ` ${(s.viewers || 0).toLocaleString()} live ` : 'Offline'} ${(s.followers || 0).toLocaleString()}
👑 ${vipFeat.toLocaleString()}
View
`; } }).join(''); } function renderEmptyPodium(message) { return `

Season 1 Leaderboard is Active

${message}

Browse Members
`; } document.addEventListener('DOMContentLoaded', function () { renderSecondaryControls(); renderLeaderboard(); if (typeof StrixLikes !== 'undefined') { StrixLikes.onUpdate(function () { renderLeaderboard(); }); } if (typeof StrixPoints !== 'undefined') { StrixPoints.onUpdate(function () { renderLeaderboard(); }); } });