chaintagger / index.html
Tanmay0712's picture
Build a modern responsive web app frontend for a "Cryptocurrency Address Collection and Categorization System".
2f03301 verified
Raw History Blame Contribute Delete
17.3 kB
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ChainTagger | Crypto Address Intelligence</title>
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/feather-icons"></script>
<script src="https://unpkg.com/framer-motion@10.16.4/dist/framer-motion.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
tailwind.config = {
darkMode: 'class',
theme: {
extend: {
colors: {
primary: {
light: '#6366f1',
dark: '#8b5cf6'
},
secondary: {
light: '#10b981',
dark: '#06b6d4'
}
},
fontFamily: {
sans: ['Inter', 'sans-serif'],
mono: ['Fira Code', 'monospace']
}
}
}
}
</script>
</head>
<body class="bg-gray-50 dark:bg-gray-900 transition-colors duration-200 min-h-screen">
<div class="flex">
<!-- Sidebar -->
<aside class="w-64 bg-white dark:bg-gray-800 shadow-lg dark:shadow-gray-700/50 fixed h-screen transition-all duration-300 z-50">
<div class="p-4 border-b border-gray-200 dark:border-gray-700">
<div class="flex items-center space-x-3">
<div class="w-10 h-10 bg-gradient-to-r from-primary-light to-primary-dark rounded-lg flex items-center justify-center">
<i data-feather="link-2" class="text-white"></i>
</div>
<h1 class="text-xl font-bold text-gray-800 dark:text-white">ChainTagger</h1>
</div>
</div>
<nav class="p-4 space-y-2">
<a href="#" class="flex items-center space-x-3 p-3 rounded-lg bg-primary-light/10 dark:bg-primary-dark/10 text-primary-light dark:text-primary-dark font-medium">
<i data-feather="activity"></i>
<span>Dashboard</span>
</a>
<a href="#" class="flex items-center space-x-3 p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">
<i data-feather="search"></i>
<span>Search</span>
</a>
<a href="#" class="flex items-center space-x-3 p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">
<i data-feather="users"></i>
<span>Entities</span>
</a>
<a href="#" class="flex items-center space-x-3 p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">
<i data-feather="git-branch"></i>
<span>Graph View</span>
</a>
<a href="#" class="flex items-center space-x-3 p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">
<i data-feather="clock"></i>
<span>Timeline</span>
</a>
<a href="#" class="flex items-center space-x-3 p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">
<i data-feather="download"></i>
<span>Exports</span>
</a>
<a href="#" class="flex items-center space-x-3 p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">
<i data-feather="settings"></i>
<span>Settings</span>
</a>
</nav>
</aside>
<!-- Main Content -->
<div class="flex-1 ml-64 transition-all duration-300">
<!-- Header -->
<header class="bg-white dark:bg-gray-800 shadow-sm dark:shadow-gray-700/30 p-4 fixed w-full z-40">
<div class="flex justify-between items-center">
<div class="flex items-center space-x-4">
<button class="md:hidden text-gray-600 dark:text-gray-300">
<i data-feather="menu"></i>
</button>
</div>
<div class="flex items-center space-x-4">
<button id="theme-toggle" class="p-2 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300">
<i data-feather="moon" class="hidden dark:block"></i>
<i data-feather="sun" class="dark:hidden"></i>
</button>
<div class="w-10 h-10 rounded-full bg-gradient-to-r from-primary-light to-primary-dark"></div>
</div>
</div>
</header>
<!-- Dashboard Content -->
<main class="p-6 pt-24">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
<div class="bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-sm dark:shadow-gray-700/30 border border-gray-100 dark:border-gray-700 hover:shadow-md dark:hover:shadow-primary-dark/20 transition-all">
<div class="flex justify-between items-start">
<div>
<p class="text-gray-500 dark:text-gray-400 text-sm">Total Addresses</p>
<h3 class="text-2xl font-bold text-gray-800 dark:text-white mt-1">24,589</h3>
</div>
<div class="p-3 rounded-lg bg-primary-light/10 dark:bg-primary-dark/10 text-primary-light dark:text-primary-dark">
<i data-feather="hash"></i>
</div>
</div>
<div class="mt-4">
<div class="h-1 w-full bg-gray-100 dark:bg-gray-700 rounded-full">
<div class="h-1 bg-gradient-to-r from-primary-light to-primary-dark rounded-full" style="width: 65%"></div>
</div>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-2">+12% from last month</p>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-sm dark:shadow-gray-700/30 border border-gray-100 dark:border-gray-700 hover:shadow-md dark:hover:shadow-primary-dark/20 transition-all">
<div class="flex justify-between items-start">
<div>
<p class="text-gray-500 dark:text-gray-400 text-sm">Total Entities</p>
<h3 class="text-2xl font-bold text-gray-800 dark:text-white mt-1">1,842</h3>
</div>
<div class="p-3 rounded-lg bg-secondary-light/10 dark:bg-secondary-dark/10 text-secondary-light dark:text-secondary-dark">
<i data-feather="users"></i>
</div>
</div>
<div class="mt-4">
<div class="h-1 w-full bg-gray-100 dark:bg-gray-700 rounded-full">
<div class="h-1 bg-gradient-to-r from-secondary-light to-secondary-dark rounded-full" style="width: 45%"></div>
</div>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-2">+8% from last month</p>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-sm dark:shadow-gray-700/30 border border-gray-100 dark:border-gray-700 hover:shadow-md dark:hover:shadow-primary-dark/20 transition-all">
<div class="flex justify-between items-start">
<div>
<p class="text-gray-500 dark:text-gray-400 text-sm">Latest Scan</p>
<h3 class="text-2xl font-bold text-gray-800 dark:text-white mt-1">2 min ago</h3>
</div>
<div class="p-3 rounded-lg bg-yellow-500/10 text-yellow-500">
<i data-feather="clock"></i>
</div>
</div>
<div class="mt-4">
<div class="h-1 w-full bg-gray-100 dark:bg-gray-700 rounded-full">
<div class="h-1 bg-gradient-to-r from-yellow-400 to-yellow-600 rounded-full" style="width: 85%"></div>
</div>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-2">Next scan in 58 min</p>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-sm dark:shadow-gray-700/30 border border-gray-100 dark:border-gray-700 hover:shadow-md dark:hover:shadow-primary-dark/20 transition-all">
<div class="flex justify-between items-start">
<div>
<p class="text-gray-500 dark:text-gray-400 text-sm">Sources Tracked</p>
<h3 class="text-2xl font-bold text-gray-800 dark:text-white mt-1">18</h3>
</div>
<div class="p-3 rounded-lg bg-green-500/10 text-green-500">
<i data-feather="database"></i>
</div>
</div>
<div class="mt-4">
<div class="h-1 w-full bg-gray-100 dark:bg-gray-700 rounded-full">
<div class="h-1 bg-gradient-to-r from-green-400 to-green-600 rounded-full" style="width: 75%"></div>
</div>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-2">3 new sources last week</p>
</div>
</div>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<div class="lg:col-span-2 bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-sm dark:shadow-gray-700/30 border border-gray-100 dark:border-gray-700">
<div class="flex justify-between items-center mb-6">
<h2 class="text-lg font-semibold text-gray-800 dark:text-white">Address Collection Timeline</h2>
<select class="bg-gray-50 dark:bg-gray-700 border border-gray-200 dark:border-gray-600 text-gray-700 dark:text-gray-300 text-sm rounded-lg px-3 py-1 focus:ring-2 focus:ring-primary-light dark:focus:ring-primary-dark outline-none">
<option>Last 7 days</option>
<option>Last 30 days</option>
<option>Last 90 days</option>
<option selected>Last year</option>
</select>
</div>
<div class="relative h-80">
<canvas id="collectionChart"></canvas>
</div>
</div>
<div class="bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-sm dark:shadow-gray-700/30 border border-gray-100 dark:border-gray-700">
<h2 class="text-lg font-semibold text-gray-800 dark:text-white mb-6">Quick Actions</h2>
<div class="space-y-4">
<a href="#" class="flex items-center space-x-3 p-4 rounded-xl bg-gradient-to-r from-primary-light/5 to-primary-light/10 dark:from-primary-dark/5 dark:to-primary-dark/10 border border-primary-light/20 dark:border-primary-dark/20 group hover:border-primary-light dark:hover:border-primary-dark transition-all">
<div class="p-3 rounded-lg bg-primary-light/10 dark:bg-primary-dark/10 text-primary-light dark:text-primary-dark group-hover:bg-primary-light/20 dark:group-hover:bg-primary-dark/20">
<i data-feather="download"></i>
</div>
<div>
<h3 class="font-medium text-gray-800 dark:text-white">Export Data</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">CSV, JSON formats</p>
</div>
</a>
<a href="#" class="flex items-center space-x-3 p-4 rounded-xl bg-gradient-to-r from-secondary-light/5 to-secondary-light/10 dark:from-secondary-dark/5 dark:to-secondary-dark/10 border border-secondary-light/20 dark:border-secondary-dark/20 group hover:border-secondary-light dark:hover:border-secondary-dark transition-all">
<div class="p-3 rounded-lg bg-secondary-light/10 dark:bg-secondary-dark/10 text-secondary-light dark:text-secondary-dark group-hover:bg-secondary-light/20 dark:group-hover:bg-secondary-dark/20">
<i data-feather="search"></i>
</div>
<div>
<h3 class="font-medium text-gray-800 dark:text-white">New Search</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">Advanced filters</p>
</div>
</a>
<a href="#" class="flex items-center space-x-3 p-4 rounded-xl bg-gradient-to-r from-yellow-500/5 to-yellow-500/10 dark:from-yellow-500/5 dark:to-yellow-500/10 border border-yellow-500/20 group hover:border-yellow-500 transition-all">
<div class="p-3 rounded-lg bg-yellow-500/10 text-yellow-500 group-hover:bg-yellow-500/20">
<i data-feather="git-branch"></i>
</div>
<div>
<h3 class="font-medium text-gray-800 dark:text-white">Graph Explorer</h3>
<p class="text-sm text-gray-500 dark:text-gray-400">Entity relationships</p>
</div>
</a>
</div>
</div>
</div>
</main>
</div>
</div>
<script>
// Theme toggle
const themeToggle = document.getElementById('theme-toggle');
themeToggle.addEventListener('click', () => {
document.documentElement.classList.toggle('dark');
localStorage.setItem('theme', document.documentElement.classList.contains('dark') ? 'dark' : 'light');
});
// Mobile sidebar toggle
document.querySelector('button.md\\:hidden').addEventListener('click', () => {
document.querySelector('aside').classList.toggle('-translate-x-full');
document.querySelector('div.flex-1').classList.toggle('ml-0');
});
// Chart initialization
feather.replace();
document.addEventListener('DOMContentLoaded', function() {
const ctx = document.getElementById('collectionChart').getContext('2d');
new Chart(ctx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [{
label: 'Addresses Collected',
data: [1200, 1900, 1500, 1800, 2100, 2300, 2700, 2500, 3000, 2800, 3200, 3500],
borderColor: '#6366f1',
backgroundColor: 'rgba(99, 102, 241, 0.1)',
borderWidth: 2,
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false
}
},
scales: {
y: {
beginAtZero: true,
grid: {
color: 'rgba(0, 0, 0, 0.05)'
}
},
x: {
grid: {
display: false
}
}
}
}
});
});
</script>
</body>
</html>