Spaces:
Configuration error
Configuration error
File size: 8,145 Bytes
ac6f50a |
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 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
import React, { useState } from 'react';
import { Play, Pause, Camera, Monitor, Wifi, Database, Zap, Users, Shield, Brain, Eye, Layers, CheckCircle, ArrowRight, Code, Video, FileText, Sparkles, Wand2, Cpu } from 'lucide-react';
const MBTQVisualPlatform = () => {
const [activeTab, setActiveTab] = useState('overview');
const [isRecording, setIsRecording] = useState(false);
const [annotationMode, setAnnotationMode] = useState(false);
const [processingStage, setProcessingStage] = useState(0);
const tabs = [
{ id: 'overview', label: 'System Overview', icon: Eye },
{ id: 'equipment', label: 'Equipment Stack', icon: Camera },
{ id: 'workflow', label: 'PinkSync Workflow', icon: Zap },
{ id: 'prototype', label: 'Live Prototype', icon: Video },
{ id: 'architecture', label: 'Architecture', icon: Layers }
];
const equipmentTiers = [
{
tier: 'MVP Setup',
budget: '$300-500',
items: [
{ name: 'Tempered Glass Panel', cost: '$50', source: 'Hardware Store' },
{ name: 'LED Ring Light', cost: '$80', source: 'Amazon' },
{ name: 'Smartphone Tripod', cost: '$30', source: 'Amazon' },
{ name: 'Neon Markers', cost: '$15', source: 'Office Supply' },
{ name: 'DaVinci Resolve', cost: 'Free', source: 'BlackmagicDesign' }
]
},
{
tier: 'Professional Setup',
budget: '$2K-3K',
items: [
{ name: 'Transparent LED Display', cost: '$1200', source: 'Pro AV Supplier' },
{ name: 'Sony A7 III Camera', cost: '$1800', source: 'B&H Photo' },
{ name: 'Elgato Cam Link 4K', cost: '$130', source: 'Amazon' },
{ name: 'OBS Studio Pro', cost: 'Free', source: 'obsproject.com' },
{ name: 'Professional Lighting Kit', cost: '$300', source: 'B&H Photo' }
]
},
{
tier: 'Enterprise Setup',
budget: '$8K-12K',
items: [
{ name: 'Professional Lightboard', cost: '$5000', source: 'Lightboard.info' },
{ name: 'PTZ Camera System', cost: '$3000', source: 'Pro AV' },
{ name: 'vMix Pro License', cost: '$1200', source: 'vmix.com' },
{ name: 'Studio Lighting Grid', cost: '$2000', source: 'Pro AV' },
{ name: 'Audio Interface + Mics', cost: '$800', source: 'B&H Photo' }
]
}
];
const workflowStages = [
{
stage: 'Capture',
icon: Camera,
component: 'OBS Studio',
actions: ['Start recording', 'Overlay graphics', 'Real-time monitoring'],
output: 'Raw video + metadata'
},
{
stage: 'Upload',
icon: Wifi,
component: 'PinkSync',
actions: ['Auto-upload to Firebase', 'Generate thumbnails', 'Extract keyframes'],
output: 'Cloud-stored assets'
},
{
stage: 'Process',
icon: Brain,
component: '360 Magicians',
actions: ['OCR annotations', 'Vector tracing', 'Visual summarization'],
output: 'Structured annotation data'
},
{
stage: 'Validate',
icon: Shield,
component: 'Fibonrose',
actions: ['Quality scoring', 'Tag generation', 'Reputation assignment'],
output: 'Validated knowledge node'
},
{
stage: 'Serve',
icon: Monitor,
component: 'Vercel Edge',
actions: ['Deploy to CDN', 'Generate access tokens', 'Enable community feedback'],
output: 'Live educational content'
}
];
const architectureComponents = [
{
layer: 'Identity Layer',
component: 'DeafAUTH',
purpose: 'Access control & authentication',
tech: 'Firebase Auth + Custom JWT',
icon: Shield
},
{
layer: 'Execution Layer',
component: 'PinkSync',
purpose: 'Workflow automation & orchestration',
tech: 'Vercel Functions + GitHub Actions',
icon: Zap
},
{
layer: 'Trust Layer',
component: 'Fibonrose',
purpose: 'Quality validation & reputation',
tech: 'Smart contracts + IPFS',
icon: CheckCircle
},
{
layer: 'Intelligence Layer',
component: '360 Magicians',
purpose: 'AI-powered content processing',
tech: 'Claude API + Computer Vision',
icon: Wand2
},
{
layer: 'Storage Layer',
component: 'Firebase + IPFS',
purpose: 'Persistent data & media storage',
tech: 'Cloud Firestore + Distributed storage',
icon: Database
}
];
const simulateRecording = () => {
setIsRecording(!isRecording);
if (!isRecording) {
setProcessingStage(0);
const interval = setInterval(() => {
setProcessingStage(prev => {
if (prev >= 4) {
clearInterval(interval);
setIsRecording(false);
return 0;
}
return prev + 1;
});
}, 2000);
}
};
return (
<div className="min-h-screen bg-gradient-to-br from-purple-900 via-blue-900 to-indigo-900 text-white p-8">
<div className="max-w-7xl mx-auto">
{/* Header */}
<div className="text-center mb-12">
<div className="flex items-center justify-center gap-3 mb-4">
<Wand2 className="w-12 h-12 text-pink-400 animate-pulse" />
<h1 className="text-6xl font-bold bg-gradient-to-r from-pink-400 via-purple-400 to-blue-400 bg-clip-text text-transparent">
MBTQ Visual-First Education
</h1>
<Wand2 className="w-12 h-12 text-blue-400 animate-pulse" />
</div>
<p className="text-2xl text-blue-300 mb-2">Transparent Annotation System Architecture</p>
<p className="text-lg text-pink-300 italic">✨ Powered by Creative Magician ✨</p>
<div className="mt-6 flex items-center justify-center gap-4 text-sm">
<div className="flex items-center gap-2">
<Eye className="w-5 h-5 text-pink-400" />
<span>Deaf-First Design</span>
</div>
<div className="flex items-center gap-2">
<Brain className="w-5 h-5 text-purple-400" />
<span>AI-Powered Processing</span>
</div>
<div className="flex items-center gap-2">
<Shield className="w-5 h-5 text-blue-400" />
<span>Trust-Validated</span>
</div>
</div>
</div>
{/* Navigation */}
<div className="flex gap-2 mb-8 overflow-x-auto pb-2">
{tabs.map(tab => {
const Icon = tab.icon;
return (
<button
key={tab.id}
onClick={() => setActiveTab(tab.id)}
className={`flex items-center gap-2 px-6 py-3 rounded-lg font-semibold transition-all whitespace-nowrap ${
activeTab === tab.id
? 'bg-gradient-to-r from-pink-500 to-purple-500 shadow-lg scale-105'
: 'bg-white/10 hover:bg-white/20'
}`}
>
<Icon className="w-5 h-5" />
{tab.label}
</button>
);
})}
</div>
{/* Content Area */}
<div className="bg-white/10 backdrop-blur-lg rounded-2xl p-8 shadow-2xl">
{/* Overview Tab */}
{activeTab === 'overview' && (
<div className="space-y-8">
<h2 className="text-4xl font-bold mb-6">System Overview</h2>
<div className="grid md:grid-cols-2 gap-6">
<div className="bg-gradient-to-br from-pink-500/20 to-purple-500/20 rounded-xl p-6 border border-pink-500/30">
<h3 className="text-2xl font-bold mb-4 flex items-center gap-2">
<Eye className="w-6 h-6" />
The Visual Problem
</h3>
<p className="text-gray-200 leading-relaxed">
Traditional education relies on audio narration. Technical concepts are explained through voice
|