Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>DeepSeek ECG Analysis System</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"> | |
| <style> | |
| @keyframes pulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.5; } | |
| } | |
| .animate-pulse { | |
| animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; | |
| } | |
| .ecg-line { | |
| position: relative; | |
| height: 200px; | |
| background-color: #f3f4f6; | |
| overflow: hidden; | |
| } | |
| .ecg-line::before { | |
| content: ""; | |
| position: absolute; | |
| top: 50%; | |
| left: 0; | |
| right: 0; | |
| height: 1px; | |
| background-color: #e5e7eb; | |
| transform: translateY(-50%); | |
| } | |
| .ecg-wave { | |
| position: absolute; | |
| top: 50%; | |
| left: 0; | |
| width: 100%; | |
| height: 2px; | |
| background-color: #3b82f6; | |
| transform: translateY(-50%); | |
| } | |
| .ecg-wave::after { | |
| content: ""; | |
| position: absolute; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient(90deg, rgba(59, 130, 246, 1) 0%, rgba(59, 130, 246, 0) 100%); | |
| animation: ecgMove 8s linear infinite; | |
| } | |
| @keyframes ecgMove { | |
| 0% { transform: translateX(-100%); } | |
| 100% { transform: translateX(100%); } | |
| } | |
| .risk-low { background-color: #10b981; } | |
| .risk-medium { background-color: #f59e0b; } | |
| .risk-high { background-color: #ef4444; } | |
| </style> | |
| </head> | |
| <body class="bg-gray-50 font-sans"> | |
| <div class="min-h-screen flex flex-col"> | |
| <!-- Header --> | |
| <header class="bg-white shadow-sm"> | |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4 flex items-center justify-between"> | |
| <div class="flex items-center space-x-3"> | |
| <div class="w-10 h-10 rounded-full bg-blue-600 flex items-center justify-center"> | |
| <i class="fas fa-heartbeat text-white text-xl"></i> | |
| </div> | |
| <h1 class="text-xl font-bold text-gray-800">DeepSeek ECG Analysis</h1> | |
| </div> | |
| <nav class="hidden md:flex space-x-8"> | |
| <a href="#" class="text-blue-600 font-medium">Dashboard</a> | |
| <a href="#" class="text-gray-600 hover:text-blue-600">Patients</a> | |
| <a href="#" class="text-gray-600 hover:text-blue-600">History</a> | |
| <a href="#" class="text-gray-600 hover:text-blue-600">Settings</a> | |
| </nav> | |
| <div class="flex items-center space-x-4"> | |
| <button class="p-2 rounded-full hover:bg-gray-100"> | |
| <i class="fas fa-bell text-gray-600"></i> | |
| </button> | |
| <div class="w-8 h-8 rounded-full bg-gray-300"></div> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- Main Content --> | |
| <main class="flex-grow"> | |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"> | |
| <div class="grid grid-cols-1 lg:grid-cols-3 gap-8"> | |
| <!-- Left Column --> | |
| <div class="lg:col-span-2 space-y-6"> | |
| <!-- Patient Info --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-gray-800">Patient Information</h2> | |
| <span class="px-3 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800">Active</span> | |
| </div> | |
| <div class="grid grid-cols-2 md:grid-cols-4 gap-4"> | |
| <div> | |
| <p class="text-sm text-gray-500">Name</p> | |
| <p class="font-medium">John Doe</p> | |
| </div> | |
| <div> | |
| <p class="text-sm text-gray-500">Age</p> | |
| <p class="font-medium">45 years</p> | |
| </div> | |
| <div> | |
| <p class="text-sm text-gray-500">Gender</p> | |
| <p class="font-medium">Male</p> | |
| </div> | |
| <div> | |
| <p class="text-sm text-gray-500">ID</p> | |
| <p class="font-medium">#ECG-2023-0042</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- ECG Graph --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-gray-800">ECG Waveform Analysis</h2> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 text-sm bg-blue-50 text-blue-600 rounded-md">Lead II</button> | |
| <button class="px-3 py-1 text-sm bg-gray-50 text-gray-600 rounded-md">Lead V1</button> | |
| <button class="px-3 py-1 text-sm bg-gray-50 text-gray-600 rounded-md">Lead V5</button> | |
| </div> | |
| </div> | |
| <div class="ecg-line rounded-lg overflow-hidden mb-4"> | |
| <div class="ecg-wave"></div> | |
| </div> | |
| <div class="flex justify-between text-xs text-gray-500"> | |
| <span>0 sec</span> | |
| <span>2.5 sec</span> | |
| <span>5 sec</span> | |
| <span>7.5 sec</span> | |
| <span>10 sec</span> | |
| </div> | |
| </div> | |
| <!-- Analysis Controls --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <div class="flex flex-col md:flex-row md:items-center md:justify-between space-y-4 md:space-y-0"> | |
| <div> | |
| <h3 class="font-medium text-gray-800">ECG Analysis Controls</h3> | |
| <p class="text-sm text-gray-500">Upload or capture new ECG data</p> | |
| </div> | |
| <div class="flex space-x-3"> | |
| <button class="px-4 py-2 bg-blue-600 text-white rounded-md flex items-center space-x-2 hover:bg-blue-700 transition"> | |
| <i class="fas fa-upload"></i> | |
| <span>Upload ECG</span> | |
| </button> | |
| <button class="px-4 py-2 border border-gray-300 rounded-md flex items-center space-x-2 hover:bg-gray-50 transition"> | |
| <i class="fas fa-camera"></i> | |
| <span>Capture Live</span> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Right Column --> | |
| <div class="space-y-6"> | |
| <!-- Quick Analysis --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <h2 class="text-lg font-semibold text-gray-800 mb-4">Quick Analysis</h2> | |
| <div class="space-y-4"> | |
| <div class="flex items-center justify-between"> | |
| <div class="flex items-center space-x-3"> | |
| <div class="w-10 h-10 rounded-full bg-blue-100 flex items-center justify-center"> | |
| <i class="fas fa-heart text-blue-600"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium">Heart Rate</p> | |
| <p class="text-sm text-gray-500">Beats per minute</p> | |
| </div> | |
| </div> | |
| <span class="text-xl font-bold">72 <span class="text-sm font-normal text-gray-500">bpm</span></span> | |
| </div> | |
| <div class="flex items-center justify-between"> | |
| <div class="flex items-center space-x-3"> | |
| <div class="w-10 h-10 rounded-full bg-green-100 flex items-center justify-center"> | |
| <i class="fas fa-wave-square text-green-600"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium">PR Interval</p> | |
| <p class="text-sm text-gray-500">Atrial depolarization</p> | |
| </div> | |
| </div> | |
| <span class="text-xl font-bold">160 <span class="text-sm font-normal text-gray-500">ms</span></span> | |
| </div> | |
| <div class="flex items-center justify-between"> | |
| <div class="flex items-center space-x-3"> | |
| <div class="w-10 h-10 rounded-full bg-purple-100 flex items-center justify-center"> | |
| <i class="fas fa-project-diagram text-purple-600"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium">QRS Duration</p> | |
| <p class="text-sm text-gray-500">Ventricular depolarization</p> | |
| </div> | |
| </div> | |
| <span class="text-xl font-bold">88 <span class="text-sm font-normal text-gray-500">ms</span></span> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Risk Assessment --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <h2 class="text-lg font-semibold text-gray-800 mb-4">Risk Assessment</h2> | |
| <div class="space-y-3"> | |
| <div> | |
| <div class="flex justify-between mb-1"> | |
| <span class="font-medium">Arrhythmia</span> | |
| <span class="text-sm font-medium text-yellow-600">Medium Risk</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2"> | |
| <div class="bg-yellow-500 h-2 rounded-full" style="width: 60%"></div> | |
| </div> | |
| </div> | |
| <div> | |
| <div class="flex justify-between mb-1"> | |
| <span class="font-medium">Ischemia</span> | |
| <span class="text-sm font-medium text-green-600">Low Risk</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2"> | |
| <div class="bg-green-500 h-2 rounded-full" style="width: 20%"></div> | |
| </div> | |
| </div> | |
| <div> | |
| <div class="flex justify-between mb-1"> | |
| <span class="font-medium">Hypertrophy</span> | |
| <span class="text-sm font-medium text-red-600">High Risk</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2"> | |
| <div class="bg-red-500 h-2 rounded-full" style="width: 85%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Alerts --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-gray-800">Critical Alerts</h2> | |
| <span class="px-2 py-1 rounded-full text-xs font-medium bg-red-100 text-red-800">2 New</span> | |
| </div> | |
| <div class="space-y-4"> | |
| <div class="flex items-start space-x-3 p-3 rounded-lg bg-red-50 border border-red-100"> | |
| <div class="mt-1"> | |
| <i class="fas fa-exclamation-triangle text-red-500"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium text-red-800">Possible Left Ventricular Hypertrophy</p> | |
| <p class="text-sm text-red-600">Sokolow-Lyon criteria positive (SV1 + RV5 > 3.5mV)</p> | |
| </div> | |
| </div> | |
| <div class="flex items-start space-x-3 p-3 rounded-lg bg-yellow-50 border border-yellow-100"> | |
| <div class="mt-1"> | |
| <i class="fas fa-exclamation-circle text-yellow-500"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium text-yellow-800">Mild ST Depression</p> | |
| <p class="text-sm text-yellow-600">0.5mm depression in leads II, III, aVF</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Actions --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <h2 class="text-lg font-semibold text-gray-800 mb-4">Recommended Actions</h2> | |
| <div class="space-y-3"> | |
| <button class="w-full px-4 py-3 bg-blue-600 text-white rounded-md flex items-center justify-between hover:bg-blue-700 transition"> | |
| <span>Generate Full Report</span> | |
| <i class="fas fa-chevron-right"></i> | |
| </button> | |
| <button class="w-full px-4 py-3 bg-white border border-gray-300 rounded-md flex items-center justify-between hover:bg-gray-50 transition"> | |
| <span>Consult Cardiologist</span> | |
| <i class="fas fa-chevron-right"></i> | |
| </button> | |
| <button class="w-full px-4 py-3 bg-white border border-gray-300 rounded-md flex items-center justify-between hover:bg-gray-50 transition"> | |
| <span>Schedule Follow-up</span> | |
| <i class="fas fa-chevron-right"></i> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <!-- Footer --> | |
| <footer class="bg-white border-t border-gray-200"> | |
| <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6"> | |
| <div class="md:flex md:items-center md:justify-between"> | |
| <div class="flex justify-center md:justify-start space-x-6"> | |
| <a href="#" class="text-gray-400 hover:text-gray-500"> | |
| <i class="fab fa-facebook-f"></i> | |
| </a> | |
| <a href="#" class="text-gray-400 hover:text-gray-500"> | |
| <i class="fab fa-twitter"></i> | |
| </a> | |
| <a href="#" class="text-gray-400 hover:text-gray-500"> | |
| <i class="fab fa-linkedin-in"></i> | |
| </a> | |
| </div> | |
| <div class="mt-8 md:mt-0 text-center md:text-right"> | |
| <p class="text-sm text-gray-500">© 2023 DeepSeek ECG Analysis System. All rights reserved.</p> | |
| </div> | |
| </div> | |
| </div> | |
| </footer> | |
| </div> | |
| <script> | |
| // Simulate ECG analysis | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Simulate analysis progress | |
| const simulateAnalysis = () => { | |
| const analysisItems = document.querySelectorAll('.ecg-wave, .risk-low, .risk-medium, .risk-high'); | |
| analysisItems.forEach(item => { | |
| item.classList.add('animate-pulse'); | |
| }); | |
| setTimeout(() => { | |
| analysisItems.forEach(item => { | |
| item.classList.remove('animate-pulse'); | |
| }); | |
| // Show completion message | |
| const alertDiv = document.createElement('div'); | |
| alertDiv.className = 'fixed bottom-4 right-4 px-6 py-3 bg-green-100 border border-green-200 text-green-800 rounded-lg shadow-lg flex items-center space-x-2'; | |
| alertDiv.innerHTML = ` | |
| <i class="fas fa-check-circle text-green-600"></i> | |
| <span>ECG analysis completed successfully!</span> | |
| `; | |
| document.body.appendChild(alertDiv); | |
| setTimeout(() => { | |
| alertDiv.remove(); | |
| }, 5000); | |
| }, 3000); | |
| }; | |
| // Trigger analysis when upload or capture buttons are clicked | |
| const analysisButtons = document.querySelectorAll('button'); | |
| analysisButtons.forEach(button => { | |
| button.addEventListener('click', simulateAnalysis); | |
| }); | |
| // ECG wave animation | |
| const ecgWave = document.querySelector('.ecg-wave'); | |
| if (ecgWave) { | |
| setInterval(() => { | |
| // Randomly add abnormalities to the ECG wave | |
| if (Math.random() > 0.7) { | |
| ecgWave.style.height = '4px'; | |
| ecgWave.style.backgroundColor = '#ef4444'; | |
| setTimeout(() => { | |
| ecgWave.style.height = '2px'; | |
| ecgWave.style.backgroundColor = '#3b82f6'; | |
| }, 300); | |
| } | |
| }, 2000); | |
| } | |
| }); | |
| </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=echo3700/deepseek-ecg-analysis" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |