Spaces:
Running
Running
File size: 5,740 Bytes
017bc0e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
import { useState, useEffect } from 'react'
import { Shield, EyeOff, Lock, Activity, AlertTriangle, CheckCircle } from 'lucide-react'
export default function PrivacyDashboard() {
const [securityMetrics, setSecurityMetrics] = useState({
encryptionLevel: 'AES-256',
threatsBlocked: 0,
dataProcessed: 0,
uptime: '100%'
})
const [recentActivities, setRecentActivities] = useState([])
useEffect(() => {
// Simulate real-time security updates
const interval = setInterval(() => {
setSecurityMetrics(prev => ({
...prev,
threatsBlocked: prev.threatsBlocked + Math.floor(Math.random() * 3),
dataProcessed: prev.dataProcessed + Math.floor(Math.random() * 10)
}))
setRecentActivities(prev => {
const newActivity = {
id: Date.now(),
action: ['Threat detected', 'Data encrypted', 'Access logged'][Math.floor(Math.random() * 3)],
timestamp: new Date().toLocaleTimeString(),
status: 'secured'
}
return [newActivity, ...prev.slice(0, 4)]
})
}, 5000)
return () => clearInterval(interval)
}, [])
return (
<div className="card">
<h2 className="text-2xl font-bold mb-6 flex items-center">
<Shield className="mr-2 h-6 w-6 text-primary-500" />
Privacy & Security
</h2>
<div className="grid grid-cols-2 gap-4 mb-6">
<div className="p-4 bg-green-50 dark:bg-green-900/20 rounded-lg border border-green-200 dark:border-green-800">
<div className="flex items-center justify-between mb-1">
<Lock className="h-4 w-4 text-green-600 dark:text-green-400" />
<span className="text-xs text-green-700 dark:text-green-300">ACTIVE</span>
</div>
<p className="text-lg font-semibold">{securityMetrics.encryptionLevel}</p>
<p className="text-xs text-green-700 dark:text-green-300">Encryption</p>
</div>
<div className="p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg border border-blue-200 dark:border-blue-800">
<div className="flex items-center justify-between mb-1">
<EyeOff className="h-4 w-4 text-blue-600 dark:text-blue-400" />
<span className="text-xs text-blue-700 dark:text-blue-300">LIVE</span>
</div>
<p className="text-lg font-semibold">{securityMetrics.uptime}</p>
<p className="text-xs text-blue-700 dark:text-blue-300">Uptime</p>
</div>
<div className="p-4 bg-orange-50 dark:bg-orange-900/20 rounded-lg border border-orange-200 dark:border-orange-800">
<div className="flex items-center justify-between mb-1">
<AlertTriangle className="h-4 w-4 text-orange-600 dark:text-orange-400" />
<span className="text-xs text-orange-700 dark:text-orange-300">BLOCKED</span>
</div>
<p className="text-lg font-semibold">{securityMetrics.threatsBlocked}</p>
<p className="text-xs text-orange-700 dark:text-orange-300">Threats</p>
</div>
<div className="p-4 bg-purple-50 dark:bg-purple-900/20 rounded-lg border border-purple-200 dark:border-purple-800">
<div className="flex items-center justify-between mb-1">
<Activity className="h-4 w-4 text-purple-600 dark:text-purple-400" />
<span className="text-xs text-purple-700 dark:text-purple-300">PROCESSED</span>
</div>
<p className="text-lg font-semibold">{securityMetrics.dataProcessed}</p>
<p className="text-xs text-purple-700 dark:text-purple-300">Data Units</p>
</div>
</div>
<div className="border-t border-dark-200 dark:border-dark-700 pt-4">
<h3 className="font-semibold mb-3 flex items-center">
<Activity className="h-4 w-4 mr-2" />
Security Activity
</h3>
<div className="space-y-2">
{recentActivities.length === 0 ? (
<p className="text-sm text-dark-500 dark:text-dark-400">No recent activity</p>
) : (
recentActivities.map((activity) => (
<div
key={activity.id}
className="flex items-center justify-between p-2 bg-dark-50 dark:bg-dark-800 rounded border border-dark-200 dark:border-dark-700"
>
<div className="flex items-center space-x-2">
<CheckCircle className="h-3 w-3 text-green-500" />
<span className="text-sm">{activity.action}</span>
</div>
<span className="text-xs text-dark-500 dark:text-dark-400">{activity.timestamp}</span>
</div>
))
)}
</div>
</div>
<div className="mt-6 p-4 bg-dark-50 dark:bg-dark-800 rounded-lg border border-dark-200 dark:border-dark-700">
<h3 className="font-semibold mb-2 text-sm">Privacy Guarantee</h3>
<ul className="space-y-1 text-xs text-dark-600 dark:text-dark-400">
<li className="flex items-center space-x-2">
<CheckCircle className="h-3 w-3 text-green-500" />
<span>End-to-end encryption</span>
</li>
<li className="flex items-center space-x-2">
<CheckCircle className="h-3 w-3 text-green-500" />
<span>Zero data retention</span>
</li>
<li className="flex items-center space-x-2">
<CheckCircle className="h-3 w-3 text-green-500" />
<span>Local processing priority</span>
</li>
<li className="flex items-center space-x-2">
<CheckCircle className="h-3 w-3 text-green-500" />
<span>Anonymous usage tracking</span>
</li>
</ul>
</div>
</div>
)
} |