quantumvpn / index.html
docto41's picture
Add 3 files
e8a8065 verified
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QuantumVPN - VPN Intelligent Automatique</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script src="https://cdn.jsdelivr.net/npm/qrcode-generator@1.4.4/qrcode.min.js"></script>
<style>
.gradient-bg {
background: linear-gradient(135deg, #6e8efb, #a777e3);
}
.server-card {
transition: all 0.3s ease;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.server-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
}
.connection-animation {
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { opacity: 0.7; }
50% { opacity: 1; }
100% { opacity: 0.7; }
}
.progress-bar {
height: 6px;
border-radius: 3px;
background-color: #e0e0e0;
}
.progress-fill {
height: 100%;
border-radius: 3px;
background: linear-gradient(90deg, #4facfe 0%, #00f2fe 100%);
transition: width 0.5s ease;
}
#qrcode-container {
width: 160px;
height: 160px;
margin: 0 auto;
padding: 10px;
background: white;
border-radius: 8px;
border: 1px solid #e0e0e0;
}
</style>
</head>
<body class="bg-gray-100 font-sans">
<div class="min-h-screen flex flex-col">
<!-- Header -->
<header class="gradient-bg text-white py-6 px-4 shadow-lg">
<div class="container mx-auto flex justify-between items-center">
<div class="flex items-center space-x-2">
<i class="fas fa-shield-alt text-2xl"></i>
<h1 class="text-2xl font-bold">QuantumVPN</h1>
</div>
<div class="flex items-center space-x-4">
<span class="hidden md:inline-block px-3 py-1 bg-white bg-opacity-20 rounded-full text-sm">
<i class="fas fa-brain mr-1"></i> 500 IA en réseau
</span>
<button class="px-4 py-2 bg-white bg-opacity-20 hover:bg-opacity-30 rounded-full transition">
<i class="fas fa-user mr-1"></i> Mon compte
</button>
</div>
</div>
</header>
<!-- Main Content -->
<main class="flex-grow container mx-auto px-4 py-8">
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
<!-- Left Panel -->
<div class="lg:col-span-2 space-y-6">
<!-- Connection Status -->
<div class="bg-white rounded-xl shadow-md p-6">
<div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-semibold">Statut de connexion</h2>
<div class="flex items-center space-x-2">
<span class="text-sm text-gray-500">Rotation serveur:</span>
<span id="rotation-timer" class="font-medium">10:00</span>
</div>
</div>
<div class="flex flex-col md:flex-row items-center justify-between">
<div class="flex items-center mb-4 md:mb-0">
<div id="connection-indicator" class="w-4 h-4 rounded-full bg-gray-400 mr-3"></div>
<span id="connection-status" class="text-lg">Déconnecté</span>
</div>
<button id="connect-btn" class="px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white rounded-full font-medium transition flex items-center">
<i class="fas fa-power-off mr-2"></i> Se connecter
</button>
</div>
<div class="mt-6">
<div class="flex justify-between text-sm text-gray-600 mb-1">
<span>Sécurité</span>
<span id="security-level">Optimale</span>
</div>
<div class="progress-bar">
<div id="security-progress" class="progress-fill" style="width: 95%"></div>
</div>
</div>
</div>
<!-- Current Server -->
<div id="current-server" class="bg-white rounded-xl shadow-md p-6 hidden">
<h2 class="text-xl font-semibold mb-4">Serveur actuel</h2>
<div class="flex flex-col md:flex-row items-center">
<div class="w-16 h-16 rounded-full gradient-bg flex items-center justify-center text-white text-2xl mb-4 md:mb-0 md:mr-6">
<i class="fas fa-server"></i>
</div>
<div class="flex-grow">
<h3 id="server-name" class="text-lg font-medium">Chargement...</h3>
<div class="flex flex-wrap items-center mt-2 text-sm text-gray-600">
<span class="flex items-center mr-4">
<i class="fas fa-map-marker-alt mr-1"></i>
<span id="server-location">Localisation</span>
</span>
<span class="flex items-center mr-4">
<i class="fas fa-tachometer-alt mr-1"></i>
<span id="server-speed">Vitesse</span>
</span>
<span class="flex items-center">
<i class="fas fa-shield-alt mr-1"></i>
<span id="server-security">Sécurité</span>
</span>
</div>
</div>
<div class="mt-4 md:mt-0">
<div class="text-right">
<div class="text-xs text-gray-500 mb-1">Prochaine rotation</div>
<div id="next-rotation" class="text-xl font-bold">10:00</div>
</div>
</div>
</div>
</div>
<!-- Server Network -->
<div class="bg-white rounded-xl shadow-md p-6">
<div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-semibold">Réseau Quantum</h2>
<div class="flex items-center space-x-2 text-sm">
<i class="fas fa-sync-alt text-blue-500"></i>
<span>Mise à jour en temps réel</span>
</div>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
<!-- Server cards will be added here by JavaScript -->
</div>
<div class="mt-6 text-center">
<button class="px-4 py-2 border border-blue-500 text-blue-500 hover:bg-blue-50 rounded-full transition">
<i class="fas fa-plus mr-1"></i> Afficher plus de serveurs
</button>
</div>
</div>
</div>
<!-- Right Panel -->
<div class="space-y-6">
<!-- AI Optimization -->
<div class="bg-white rounded-xl shadow-md p-6">
<h2 class="text-xl font-semibold mb-4">Optimisation IA</h2>
<div class="space-y-4">
<div>
<div class="flex justify-between text-sm mb-1">
<span>Analyse du trafic</span>
<span id="traffic-analysis">Active</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 87%"></div>
</div>
</div>
<div>
<div class="flex justify-between text-sm mb-1">
<span>Protection contre les menaces</span>
<span id="threat-protection">Active</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 92%"></div>
</div>
</div>
<div>
<div class="flex justify-between text-sm mb-1">
<span>Sélection intelligente des serveurs</span>
<span id="server-selection">Active</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 95%"></div>
</div>
</div>
</div>
<div class="mt-6">
<button class="w-full px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-full transition">
<i class="fas fa-cog mr-1"></i> Paramètres avancés
</button>
</div>
</div>
<!-- Download App -->
<div class="bg-white rounded-xl shadow-md p-6">
<h2 class="text-xl font-semibold mb-4">Télécharger l'application</h2>
<p class="text-gray-600 mb-4">Scannez le QR code pour installer QuantumVPN sur votre mobile</p>
<div class="flex flex-col items-center">
<div id="qrcode-container"></div>
<div class="text-center mt-4">
<p class="text-sm text-gray-500 mb-2">Disponible sur</p>
<div class="flex justify-center space-x-3">
<i class="fab fa-apple text-2xl text-gray-700"></i>
<i class="fab fa-android text-2xl text-gray-700"></i>
<i class="fab fa-windows text-2xl text-gray-700"></i>
</div>
</div>
</div>
</div>
<!-- Statistics -->
<div class="bg-white rounded-xl shadow-md p-6">
<h2 class="text-xl font-semibold mb-4">Statistiques</h2>
<div class="space-y-3">
<div class="flex justify-between">
<span class="text-gray-600">Données protégées</span>
<span class="font-medium">4.7 GB</span>
</div>
<div class="flex justify-between">
<span class="text-gray-600">Menaces bloquées</span>
<span class="font-medium">128</span>
</div>
<div class="flex justify-between">
<span class="text-gray-600">Serveurs disponibles</span>
<span class="font-medium">500+</span>
</div>
<div class="flex justify-between">
<span class="text-gray-600">Latence moyenne</span>
<span class="font-medium">28 ms</span>
</div>
</div>
</div>
</div>
</div>
</main>
<!-- Footer -->
<footer class="bg-gray-800 text-white py-6 px-4">
<div class="container mx-auto">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="mb-4 md:mb-0">
<div class="flex items-center space-x-2">
<i class="fas fa-shield-alt"></i>
<span class="font-medium">QuantumVPN</span>
</div>
<p class="text-sm text-gray-400 mt-1">Protection intelligente par IA</p>
</div>
<div class="flex space-x-6">
<a href="#" class="hover:text-blue-300 transition">Confidentialité</a>
<a href="#" class="hover:text-blue-300 transition">Conditions</a>
<a href="#" class="hover:text-blue-300 transition">Support</a>
</div>
</div>
<div class="mt-6 pt-6 border-t border-gray-700 text-center text-sm text-gray-400">
<p>© 2023 QuantumVPN. Tous droits réservés. Rotation automatique des serveurs gérée par 500 IA.</p>
</div>
</div>
</footer>
</div>
<script>
// Sample server data
const servers = [
{ id: 1, name: "Quantum-Node-1", location: "Paris, France", speed: "Ultra Rapide", security: "Maximale", ping: 12, load: 35, premium: false },
{ id: 2, name: "Quantum-Node-2", location: "New York, USA", speed: "Rapide", security: "Élevée", ping: 28, load: 62, premium: false },
{ id: 3, name: "Quantum-Node-3", location: "Tokyo, Japon", speed: "Moyenne", security: "Maximale", ping: 45, load: 41, premium: true },
{ id: 4, name: "Quantum-Node-4", location: "Sydney, Australie", speed: "Rapide", security: "Élevée", ping: 38, load: 57, premium: false },
{ id: 5, name: "Quantum-Node-5", location: "Londres, UK", speed: "Ultra Rapide", security: "Maximale", ping: 9, load: 29, premium: true },
{ id: 6, name: "Quantum-Node-6", location: "Singapour", speed: "Moyenne", security: "Élevée", ping: 52, load: 68, premium: false }
];
// Current connection state
let isConnected = false;
let currentServer = null;
let rotationInterval;
let rotationTime = 600; // 10 minutes in seconds
// DOM elements
const connectBtn = document.getElementById('connect-btn');
const connectionIndicator = document.getElementById('connection-indicator');
const connectionStatus = document.getElementById('connection-status');
const currentServerSection = document.getElementById('current-server');
const serverName = document.getElementById('server-name');
const serverLocation = document.getElementById('server-location');
const serverSpeed = document.getElementById('server-speed');
const serverSecurity = document.getElementById('server-security');
const nextRotation = document.getElementById('next-rotation');
const rotationTimer = document.getElementById('rotation-timer');
const serverNetwork = document.querySelector('.grid.gap-4');
const securityLevel = document.getElementById('security-level');
const securityProgress = document.getElementById('security-progress');
// Generate QR Code
function generateQRCode() {
const qr = qrcode(0, 'L');
qr.addData('https://quantumvpn.com/download');
qr.make();
const qrContainer = document.getElementById('qrcode-container');
qrContainer.innerHTML = qr.createImgTag(4, 0);
// Style the generated image
const qrImg = qrContainer.querySelector('img');
qrImg.style.width = '100%';
qrImg.style.height = '100%';
}
// Render server cards
function renderServers() {
serverNetwork.innerHTML = '';
servers.forEach(server => {
const serverCard = document.createElement('div');
serverCard.className = 'server-card bg-white rounded-lg p-4 border border-gray-200 hover:border-blue-300 cursor-pointer';
serverCard.innerHTML = `
<div class="flex justify-between items-start mb-2">
<h3 class="font-medium">${server.name}</h3>
${server.premium ? '<span class="text-xs bg-yellow-100 text-yellow-800 px-2 py-1 rounded-full">Premium</span>' : ''}
</div>
<div class="text-sm text-gray-600 mb-3">
<div class="flex items-center mb-1">
<i class="fas fa-map-marker-alt text-xs mr-2"></i>
<span>${server.location}</span>
</div>
<div class="flex items-center">
<i class="fas fa-tachometer-alt text-xs mr-2"></i>
<span>${server.speed} (${server.ping}ms)</span>
</div>
</div>
<div class="flex justify-between items-center text-xs">
<div>
<div class="h-2 w-16 bg-gray-200 rounded-full overflow-hidden">
<div class="h-full bg-green-500" style="width: ${100 - server.load}%"></div>
</div>
<span>Charge: ${server.load}%</span>
</div>
<span class="flex items-center text-blue-600">
<i class="fas fa-shield-alt mr-1"></i>
${server.security}
</span>
</div>
`;
serverCard.addEventListener('click', () => selectServer(server));
serverNetwork.appendChild(serverCard);
});
}
// Select a server
function selectServer(server) {
currentServer = server;
serverName.textContent = server.name;
serverLocation.textContent = server.location;
serverSpeed.textContent = server.speed;
serverSecurity.textContent = server.security;
if (isConnected) {
// If already connected, just update the current server display
currentServerSection.classList.remove('hidden');
}
}
// Connect/disconnect function
function toggleConnection() {
if (!isConnected) {
// If no server selected, choose a random one
if (!currentServer) {
const randomServer = servers[Math.floor(Math.random() * servers.length)];
selectServer(randomServer);
}
// Connect
isConnected = true;
connectBtn.innerHTML = '<i class="fas fa-power-off mr-2"></i> Se déconnecter';
connectionIndicator.className = 'w-4 h-4 rounded-full bg-green-500 mr-3 connection-animation';
connectionStatus.textContent = 'Connecté';
currentServerSection.classList.remove('hidden');
securityLevel.textContent = 'Optimale';
securityProgress.style.width = '95%';
// Start server rotation countdown
startRotationTimer();
// Simulate AI optimization
simulateAIOptimization();
} else {
// Disconnect
isConnected = false;
connectBtn.innerHTML = '<i class="fas fa-power-off mr-2"></i> Se connecter';
connectionIndicator.className = 'w-4 h-4 rounded-full bg-gray-400 mr-3';
connectionStatus.textContent = 'Déconnecté';
securityLevel.textContent = 'Non protégé';
securityProgress.style.width = '0%';
// Stop rotation timer
clearInterval(rotationInterval);
rotationTimer.textContent = '10:00';
// Hide current server section
currentServerSection.classList.add('hidden');
}
}
// Start rotation timer
function startRotationTimer() {
rotationTime = 600; // Reset to 10 minutes
updateRotationDisplay();
rotationInterval = setInterval(() => {
rotationTime--;
updateRotationDisplay();
if (rotationTime <= 0) {
// Rotate to a new server
const otherServers = servers.filter(s => s.id !== currentServer.id);
const newServer = otherServers[Math.floor(Math.random() * otherServers.length)];
selectServer(newServer);
// Reset timer
rotationTime = 600;
// Show notification
showRotationNotification(newServer);
}
}, 1000);
}
// Update rotation display
function updateRotationDisplay() {
const minutes = Math.floor(rotationTime / 60);
const seconds = rotationTime % 60;
rotationTimer.textContent = `${minutes}:${seconds < 10 ? '0' + seconds : seconds}`;
nextRotation.textContent = `${minutes}:${seconds < 10 ? '0' + seconds : seconds}`;
}
// Show rotation notification
function showRotationNotification(server) {
// In a real app, this would be a more elegant notification
alert(`Le serveur a été automatiquement changé pour ${server.name} (${server.location}) pour optimiser votre connexion.`);
}
// Simulate AI optimization
function simulateAIOptimization() {
const aiFeatures = ['traffic-analysis', 'threat-protection', 'server-selection'];
setInterval(() => {
if (!isConnected) return;
// Randomly adjust values to simulate AI working
aiFeatures.forEach(feature => {
const element = document.getElementById(feature);
if (element) {
const currentValue = parseInt(element.textContent === 'Active' ? 85 : element.textContent);
const newValue = Math.min(100, Math.max(80, currentValue + (Math.random() * 10 - 5)));
element.textContent = newValue > 85 ? 'Active' : Math.round(newValue) + '%';
}
});
// Randomly adjust security level slightly
const currentSecurity = parseInt(securityProgress.style.width);
const newSecurity = Math.min(95, Math.max(90, currentSecurity + (Math.random() * 4 - 2)));
securityProgress.style.width = `${newSecurity}%`;
}, 3000);
}
// Event listeners
connectBtn.addEventListener('click', toggleConnection);
// Initialize
document.addEventListener('DOMContentLoaded', () => {
renderServers();
generateQRCode();
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=docto41/quantumvpn" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>