radardobeanco / index.html
Tiago520's picture
import requests
36ba451 verified
Raw
History Blame Contribute Delete
15.3 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blaze Roulette Analytics</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script src="https://unpkg.com/feather-icons"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
blazeRed: '#FF2D55',
blazeBlack: '#1E1E1E',
blazeWhite: '#F5F5F5',
}
}
}
}
</script>
<style>
.blaze-gradient-bg {
background: radial-gradient(circle at 10% 20%, rgba(255, 45, 85, 0.1) 0%, rgba(30, 30, 30, 0.9) 90%);
}
.blaze-spinner {
border-top-color: #FF2D55;
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
</style>
</head>
<body class="bg-blazeBlack text-white min-h-screen blaze-gradient-bg">
<div id="vanta-bg" class="fixed inset-0 -z-10"></div>
<div class="container mx-auto px-4 py-8">
<header class="mb-12 text-center" data-aos="fade-down">
<h1 class="text-4xl md:text-5xl font-bold mb-2 bg-clip-text text-transparent bg-gradient-to-r from-blazeRed to-white">
Blaze Roulette Analytics
</h1>
<p class="text-gray-300 max-w-2xl mx-auto">Real-time statistics and historical data visualization for Blaze roulette games</p>
</header>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-12">
<!-- Live Stats Card -->
<div class="bg-gray-900/60 backdrop-blur-sm rounded-xl p-6 border border-gray-800 shadow-lg" data-aos="fade-up" data-aos-delay="100">
<div class="flex items-center justify-between mb-4">
<h2 class="text-xl font-semibold">Live Statistics</h2>
<div class="flex items-center space-x-2">
<span class="relative flex h-3 w-3">
<span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-blazeRed opacity-75"></span>
<span class="relative inline-flex rounded-full h-3 w-3 bg-blazeRed"></span>
</span>
<span class="text-sm text-gray-300">Live</span>
</div>
</div>
<div class="space-y-4">
<div class="flex justify-between items-center">
<span class="text-gray-400">Last Update</span>
<span class="font-mono" id="last-update">--:--:--</span>
</div>
<div class="flex justify-between items-center">
<span class="text-gray-400">Games Tracked</span>
<span class="font-mono" id="total-games">0</span>
</div>
<div class="pt-4 border-t border-gray-800">
<div class="flex justify-between mb-2">
<span class="flex items-center">
<span class="w-3 h-3 rounded-full bg-blazeRed mr-2"></span>
<span>Red</span>
</span>
<span id="red-count" class="font-mono">0 (0%)</span>
</div>
<div class="flex justify-between mb-2">
<span class="flex items-center">
<span class="w-3 h-3 rounded-full bg-blazeBlack border border-white mr-2"></span>
<span>Black</span>
</span>
<span id="black-count" class="font-mono">0 (0%)</span>
</div>
<div class="flex justify-between">
<span class="flex items-center">
<span class="w-3 h-3 rounded-full bg-blazeWhite mr-2"></span>
<span>White</span>
</span>
<span id="white-count" class="font-mono">0 (0%)</span>
</div>
</div>
</div>
</div>
<!-- Recent Games Card -->
<div class="bg-gray-900/60 backdrop-blur-sm rounded-xl p-6 border border-gray-800 shadow-lg" data-aos="fade-up" data-aos-delay="200">
<h2 class="text-xl font-semibold mb-4">Recent Games</h2>
<div class="space-y-3 max-h-80 overflow-y-auto pr-2" id="recent-games">
<div class="flex items-center justify-center py-8" id="loading-recent">
<div class="blaze-spinner h-8 w-8 rounded-full border-2 border-gray-600"></div>
</div>
</div>
</div>
<!-- Chart Card -->
<div class="bg-gray-900/60 backdrop-blur-sm rounded-xl p-6 border border-gray-800 shadow-lg" data-aos="fade-up" data-aos-delay="300">
<h2 class="text-xl font-semibold mb-4">Distribution</h2>
<div class="h-64">
<canvas id="colorChart"></canvas>
</div>
</div>
</div>
<!-- Historical Trends -->
<div class="bg-gray-900/60 backdrop-blur-sm rounded-xl p-6 border border-gray-800 shadow-lg mb-12" data-aos="fade-up">
<h2 class="text-xl font-semibold mb-4">Historical Trends</h2>
<div class="h-80">
<canvas id="trendChart"></canvas>
</div>
</div>
<!-- API Status -->
<div class="bg-gray-900/60 backdrop-blur-sm rounded-xl p-6 border border-gray-800 shadow-lg">
<h2 class="text-xl font-semibold mb-4">System Status</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="bg-gray-800/50 rounded-lg p-4">
<div class="flex items-center justify-between">
<span class="text-gray-400">API Connection</span>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-900 text-green-200" id="api-status">
<i data-feather="circle" class="w-3 h-3 mr-1"></i> Connected
</span>
</div>
</div>
<div class="bg-gray-800/50 rounded-lg p-4">
<div class="flex items-center justify-between">
<span class="text-gray-400">Update Interval</span>
<span class="font-mono">30s</span>
</div>
</div>
<div class="bg-gray-800/50 rounded-lg p-4">
<div class="flex items-center justify-between">
<span class="text-gray-400">Data Points</span>
<span class="font-mono" id="data-points">0</span>
</div>
</div>
</div>
</div>
</div>
<footer class="py-6 text-center text-gray-500 text-sm">
<p>Blaze Roulette Analytics © 2023 | Not affiliated with Blaze.com</p>
</footer>
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.globe.min.js"></script>
<script>
// Initialize animations
AOS.init();
feather.replace();
// Vanta.js background
VANTA.GLOBE({
el: "#vanta-bg",
mouseControls: true,
touchControls: true,
gyroControls: false,
minHeight: 200.00,
minWidth: 200.00,
scale: 1.00,
scaleMobile: 1.00,
color: 0xff2d55,
backgroundColor: 0x1e1e1e,
size: 0.8
});
// Chart initialization
const colorCtx = document.getElementById('colorChart').getContext('2d');
const colorChart = new Chart(colorCtx, {
type: 'doughnut',
data: {
labels: ['Red', 'Black', 'White'],
datasets: [{
data: [0, 0, 0],
backgroundColor: ['#FF2D55', '#1E1E1E', '#F5F5F5'],
borderWidth: 0
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
cutout: '70%',
plugins: {
legend: {
position: 'bottom',
labels: {
color: '#FFFFFF',
font: {
family: 'Inter, sans-serif'
}
}
}
}
}
});
const trendCtx = document.getElementById('trendChart').getContext('2d');
const trendChart = new Chart(trendCtx, {
type: 'line',
data: {
labels: [],
datasets: [
{
label: 'Red',
data: [],
borderColor: '#FF2D55',
backgroundColor: 'rgba(255, 45, 85, 0.1)',
tension: 0.3,
fill: true
},
{
label: 'Black',
data: [],
borderColor: '#1E1E1E',
backgroundColor: 'rgba(30, 30, 30, 0.1)',
tension: 0.3,
fill: true
},
{
label: 'White',
data: [],
borderColor: '#F5F5F5',
backgroundColor: 'rgba(245, 245, 245, 0.1)',
tension: 0.3,
fill: true
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
color: '#FFFFFF'
}
},
tooltip: {
mode: 'index',
intersect: false
}
},
scales: {
x: {
grid: {
color: 'rgba(255, 255, 255, 0.1)'
},
ticks: {
color: '#FFFFFF'
}
},
y: {
grid: {
color: 'rgba(255, 255, 255, 0.1)'
},
ticks: {
color: '#FFFFFF'
}
}
}
}
});
// Mock data for demo
function updateMockData() {
const now = new Date();
document.getElementById('last-update').textContent = now.toLocaleTimeString();
// Generate random counts
const totalGames = Math.floor(Math.random() * 500) + 100;
const redCount = Math.floor(totalGames * (0.45 + Math.random() * 0.1));
const blackCount = Math.floor(totalGames * (0.45 + Math.random() * 0.1));
const whiteCount = totalGames - redCount - blackCount;
// Update counts
document.getElementById('total-games').textContent = totalGames;
document.getElementById('red-count').textContent = `${redCount} (${(redCount/totalGames*100).toFixed(1)}%)`;
document.getElementById('black-count').textContent = `${blackCount} (${(blackCount/totalGames*100).toFixed(1)}%)`;
document.getElementById('white-count').textContent = `${whiteCount} (${(whiteCount/totalGames*100).toFixed(1)}%)`;
document.getElementById('data-points').textContent = totalGames;
// Update pie chart
colorChart.data.datasets[0].data = [redCount, blackCount, whiteCount];
colorChart.update();
// Update recent games
const recentGamesContainer = document.getElementById('recent-games');
recentGamesContainer.innerHTML = '';
const colors = ['red', 'black', 'white'];
for (let i = 0; i < 10; i++) {
const randomColor = colors[Math.floor(Math.random() * colors.length)];
const gameTime = new Date(now.getTime() - i * 60000).toLocaleTimeString();
const gameElement = document.createElement('div');
gameElement.className = 'flex items-center justify-between py-2 border-b border-gray-800';
gameElement.innerHTML = `
<div class="flex items-center">
<span class="w-3 h-3 rounded-full mr-3 ${randomColor === 'red' ? 'bg-blazeRed' : randomColor === 'black' ? 'bg-blazeBlack border border-white' : 'bg-blazeWhite'}"></span>
<span>Game #${totalGames - i}</span>
</div>
<span class="text-gray-400 text-sm">${gameTime}</span>
`;
recentGamesContainer.appendChild(gameElement);
}
// Update trend chart
const labels = [];
const redData = [];
const blackData = [];
const whiteData = [];
for (let i = 0; i < 20; i++) {
labels.push(`${i+1}`);
redData.push(Math.floor(redCount * (0.8 + Math.random() * 0.4)));
blackData.push(Math.floor(blackCount * (0.8 + Math.random() * 0.4)));
whiteData.push(Math.floor(whiteCount * (0.8 + Math.random() * 0.4)));
}
trendChart.data.labels = labels;
trendChart.data.datasets[0].data = redData;
trendChart.data.datasets[1].data = blackData;
trendChart.data.datasets[2].data = whiteData;
trendChart.update();
}
// Initial load
updateMockData();
// Simulate live updates
setInterval(updateMockData, 30000);
// In a real implementation, you would connect to your Python backend API here
// fetch('/api/results')
// .then(response => response.json())
// .then(data => updateUI(data));
</script>
</body>
</html>