admin08077 commited on
Commit
24c58d8
·
verified ·
1 Parent(s): bb0f10e

Upload 26 files

Browse files
Files changed (4) hide show
  1. views/Advisor.tsx +81 -31
  2. views/Landing.tsx +320 -130
  3. views/Simulation.tsx +3 -2
  4. views/routes.ts +25 -30
views/Advisor.tsx CHANGED
@@ -17,53 +17,78 @@ const Advisor: React.FC = () => {
17
  const [messages, setMessages] = useState<Message[]>([]);
18
  const [input, setInput] = useState('');
19
  const [loading, setLoading] = useState(false);
20
- const [voiceEnabled, setVoiceEnabled] = useState(false);
21
  const scrollRef = useRef<HTMLDivElement>(null);
22
 
23
  useEffect(() => {
24
  const initMemory = async () => {
25
- const history = await apiClient.chat.getHistory();
26
- if (history.length > 0) {
27
- setMessages(history.map((h: any) => ({ ...h, id: h.id.toString() })));
28
- } else {
29
- setMessages([{ id: '1', role: 'assistant', content: "Neural Core online. Standing by for institutional instructions.", timestamp: new Date().toISOString() }]);
 
 
 
 
30
  }
31
  };
32
  initMemory();
33
  }, []);
34
 
35
  useEffect(() => {
36
- if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
 
 
37
  }, [messages]);
38
 
39
  const handleSend = async (forcedInput?: string) => {
40
  const query = (forcedInput || input).trim();
41
  if (!query || loading) return;
42
 
43
- setMessages(prev => [...prev, { id: Date.now().toString(), role: 'user', content: query, timestamp: new Date().toISOString() }]);
 
 
 
 
 
 
 
44
  setInput('');
45
  setLoading(true);
46
 
47
  const assistantMsgId = (Date.now() + 1).toString();
48
- setMessages(prev => [...prev, { id: assistantMsgId, role: 'assistant', content: '', timestamp: new Date().toISOString(), isStreaming: true }]);
 
 
 
 
 
 
49
 
50
  try {
51
- const context = { system: "LUMINA_ADVISORY_NODE" };
52
- const responseArray = await getFinancialAdviceStream(query, context);
53
 
54
- let fullContent = '';
55
- for (const chunk of responseArray) {
56
- fullContent += chunk.text || '';
57
- setMessages(prev => prev.map(m => m.id === assistantMsgId ? { ...m, content: fullContent } : m));
58
- }
59
 
60
- setMessages(prev => prev.map(m => m.id === assistantMsgId ? { ...m, isStreaming: false } : m));
61
  await apiClient.chat.saveMessage('user', query);
62
- await apiClient.chat.saveMessage('assistant', fullContent);
63
 
64
- if (voiceEnabled) speakText(fullContent);
65
  } catch (error) {
66
- setMessages(prev => prev.map(m => m.id === assistantMsgId ? { ...m, content: "Neural signal lost. Connection refused by proxy.", isStreaming: false } : m));
 
 
 
 
 
 
 
67
  } finally {
68
  setLoading(false);
69
  }
@@ -79,13 +104,18 @@ const Advisor: React.FC = () => {
79
  </div>
80
  <div>
81
  <h3 className="text-white font-black italic tracking-tighter uppercase text-xl">Nexus_Core</h3>
82
- <p className="text-[10px] text-zinc-500 font-black uppercase tracking-widest">Protocol: Proxy</p>
83
  </div>
84
  </div>
85
  <div className="space-y-4 flex-1 overflow-y-auto pr-3 custom-scrollbar relative z-10">
86
  <p className="text-[10px] font-black text-zinc-600 uppercase tracking-widest px-2 mb-4">Command Presets</p>
87
- {["Analyze Q2 Liquidity Drift", "Portfolio Resilience Stress-Test", "Explain FDX v6.2 Handshakes"].map((text, i) => (
88
- <button key={i} onClick={() => handleSend(text)} disabled={loading} className="w-full text-left p-6 rounded-2xl bg-black border border-zinc-900 hover:border-blue-500/50 hover:bg-blue-500/5 transition-all group flex items-start justify-between disabled:opacity-30">
 
 
 
 
 
89
  <span className="text-[10px] font-black uppercase tracking-widest text-zinc-500 group-hover:text-blue-400 leading-relaxed">{text}</span>
90
  <ChevronRight size={16} className="text-zinc-800 group-hover:text-blue-500 transition-colors" />
91
  </button>
@@ -97,10 +127,13 @@ const Advisor: React.FC = () => {
97
  <div className="flex-1 flex flex-col bg-zinc-950 border border-zinc-900 rounded-[3rem] overflow-hidden shadow-2xl relative">
98
  <div className="h-20 border-b border-zinc-900 px-10 flex items-center justify-between bg-black/40 backdrop-blur-xl z-20">
99
  <div className="flex items-center space-x-6">
100
- <div className={`w-3 h-3 rounded-full shadow-[0_0_15px_#10b981] ${loading ? 'bg-amber-500' : 'bg-emerald-500'}`}></div>
101
  <span className="font-black text-white text-sm uppercase tracking-[0.4em] italic">Quantum_Advisory_Node</span>
102
  </div>
103
- <button onClick={() => setVoiceEnabled(!voiceEnabled)} className={`p-4 rounded-2xl border transition-all ${voiceEnabled ? 'bg-blue-600/10 border-blue-500/20 text-blue-500' : 'bg-zinc-900 border-zinc-800 text-zinc-600'}`}>
 
 
 
104
  {voiceEnabled ? <Volume2 size={20} /> : <VolumeX size={20} />}
105
  </button>
106
  </div>
@@ -114,7 +147,12 @@ const Advisor: React.FC = () => {
114
  </div>
115
  <div className={`p-8 rounded-[2.5rem] ${m.role === 'user' ? 'bg-zinc-900 text-zinc-100 rounded-tr-none border border-zinc-800' : 'bg-black border border-zinc-800 text-zinc-300 rounded-tl-none shadow-2xl'}`}>
116
  <div className="text-base font-medium leading-relaxed tracking-tight whitespace-pre-wrap">
117
- {m.content || (m.isStreaming ? "Connecting to Proxy..." : "Establishing link...")}
 
 
 
 
 
118
  </div>
119
  </div>
120
  </div>
@@ -123,12 +161,24 @@ const Advisor: React.FC = () => {
123
  </div>
124
 
125
  <div className="p-10 bg-black/20 border-t border-zinc-900 backdrop-blur-2xl z-20">
126
- <div className="relative group max-w-5xl mx-auto flex gap-4">
127
- <input value={input} onChange={(e) => setInput(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSend()} placeholder="Input instructions for the LQI Core..." className="flex-1 bg-black border border-zinc-800 focus:border-blue-500 rounded-[2rem] py-7 px-10 text-white text-base outline-none transition-all placeholder:text-zinc-800 font-bold" />
128
- <button onClick={() => handleSend()} disabled={loading || !input.trim()} className="px-8 bg-blue-600 hover:bg-blue-500 text-white rounded-[1.5rem] font-black uppercase flex items-center gap-3">
129
- {loading ? <Loader2 className="animate-spin" /> : <Send size={20} />}
 
 
 
 
 
 
 
 
 
 
 
 
130
  </button>
131
- </div>
132
  </div>
133
  </div>
134
  </div>
 
17
  const [messages, setMessages] = useState<Message[]>([]);
18
  const [input, setInput] = useState('');
19
  const [loading, setLoading] = useState(false);
20
+ const [voiceEnabled, setVoiceEnabled] = useState(true);
21
  const scrollRef = useRef<HTMLDivElement>(null);
22
 
23
  useEffect(() => {
24
  const initMemory = async () => {
25
+ try {
26
+ const history = await apiClient.chat.getHistory();
27
+ if (history && history.length > 0) {
28
+ setMessages(history.map((h: any) => ({ ...h, id: h.id.toString() })));
29
+ } else {
30
+ setMessages([{ id: '1', role: 'assistant', content: "Neural Core online. Standing by for institutional instructions.", timestamp: new Date().toISOString() }]);
31
+ }
32
+ } catch (err) {
33
+ setMessages([{ id: '1', role: 'assistant', content: "Neural Core online. Safe mode registry active.", timestamp: new Date().toISOString() }]);
34
  }
35
  };
36
  initMemory();
37
  }, []);
38
 
39
  useEffect(() => {
40
+ if (scrollRef.current) {
41
+ scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
42
+ }
43
  }, [messages]);
44
 
45
  const handleSend = async (forcedInput?: string) => {
46
  const query = (forcedInput || input).trim();
47
  if (!query || loading) return;
48
 
49
+ const userMsgId = Date.now().toString();
50
+ setMessages(prev => [...prev, {
51
+ id: userMsgId,
52
+ role: 'user',
53
+ content: query,
54
+ timestamp: new Date().toISOString()
55
+ }]);
56
+
57
  setInput('');
58
  setLoading(true);
59
 
60
  const assistantMsgId = (Date.now() + 1).toString();
61
+ setMessages(prev => [...prev, {
62
+ id: assistantMsgId,
63
+ role: 'assistant',
64
+ content: '',
65
+ timestamp: new Date().toISOString(),
66
+ isStreaming: true
67
+ }]);
68
 
69
  try {
70
+ const context = { system: "LUMINA_ADVISORY_NODE", mode: "Institutional_Treasury" };
71
+ const response = await getFinancialAdviceStream(query, context);
72
 
73
+ const finalContent = response?.[0]?.text || "Signal interrupted. No data received from Gemini Node.";
74
+
75
+ setMessages(prev => prev.map(m =>
76
+ m.id === assistantMsgId ? { ...m, content: finalContent, isStreaming: false } : m
77
+ ));
78
 
 
79
  await apiClient.chat.saveMessage('user', query);
80
+ await apiClient.chat.saveMessage('assistant', finalContent);
81
 
82
+ if (voiceEnabled) speakText(finalContent);
83
  } catch (error) {
84
+ console.error("Advisor Link Failure:", error);
85
+ setMessages(prev => prev.map(m =>
86
+ m.id === assistantMsgId ? {
87
+ ...m,
88
+ content: "Neural link lost. Ensure process.env.API_KEY is properly configured and model quota is available.",
89
+ isStreaming: false
90
+ } : m
91
+ ));
92
  } finally {
93
  setLoading(false);
94
  }
 
104
  </div>
105
  <div>
106
  <h3 className="text-white font-black italic tracking-tighter uppercase text-xl">Nexus_Core</h3>
107
+ <p className="text-[10px] text-zinc-500 font-black uppercase tracking-widest">Protocol: Advisory</p>
108
  </div>
109
  </div>
110
  <div className="space-y-4 flex-1 overflow-y-auto pr-3 custom-scrollbar relative z-10">
111
  <p className="text-[10px] font-black text-zinc-600 uppercase tracking-widest px-2 mb-4">Command Presets</p>
112
+ {["Analyze Liquidity Drift", "Stress-test Commercial Portfolio", "Model Inflation Spike impact"].map((text, i) => (
113
+ <button
114
+ key={i}
115
+ onClick={() => handleSend(text)}
116
+ disabled={loading}
117
+ className="w-full text-left p-6 rounded-2xl bg-black border border-zinc-900 hover:border-blue-500/50 hover:bg-blue-500/5 transition-all group flex items-start justify-between disabled:opacity-30"
118
+ >
119
  <span className="text-[10px] font-black uppercase tracking-widest text-zinc-500 group-hover:text-blue-400 leading-relaxed">{text}</span>
120
  <ChevronRight size={16} className="text-zinc-800 group-hover:text-blue-500 transition-colors" />
121
  </button>
 
127
  <div className="flex-1 flex flex-col bg-zinc-950 border border-zinc-900 rounded-[3rem] overflow-hidden shadow-2xl relative">
128
  <div className="h-20 border-b border-zinc-900 px-10 flex items-center justify-between bg-black/40 backdrop-blur-xl z-20">
129
  <div className="flex items-center space-x-6">
130
+ <div className={`w-3 h-3 rounded-full shadow-[0_0_15px_#10b981] ${loading ? 'bg-amber-500 animate-pulse' : 'bg-emerald-500'}`}></div>
131
  <span className="font-black text-white text-sm uppercase tracking-[0.4em] italic">Quantum_Advisory_Node</span>
132
  </div>
133
+ <button
134
+ onClick={() => setVoiceEnabled(!voiceEnabled)}
135
+ className={`p-4 rounded-2xl border transition-all ${voiceEnabled ? 'bg-blue-600/10 border-blue-500/20 text-blue-500' : 'bg-zinc-900 border-zinc-800 text-zinc-600'}`}
136
+ >
137
  {voiceEnabled ? <Volume2 size={20} /> : <VolumeX size={20} />}
138
  </button>
139
  </div>
 
147
  </div>
148
  <div className={`p-8 rounded-[2.5rem] ${m.role === 'user' ? 'bg-zinc-900 text-zinc-100 rounded-tr-none border border-zinc-800' : 'bg-black border border-zinc-800 text-zinc-300 rounded-tl-none shadow-2xl'}`}>
149
  <div className="text-base font-medium leading-relaxed tracking-tight whitespace-pre-wrap">
150
+ {m.content || (m.isStreaming ? (
151
+ <div className="flex items-center gap-3">
152
+ <Loader2 className="animate-spin text-blue-500" size={18} />
153
+ <span className="text-[10px] font-black uppercase tracking-[0.3em] animate-pulse">Computing Alpha...</span>
154
+ </div>
155
+ ) : "Handshaking...")}
156
  </div>
157
  </div>
158
  </div>
 
161
  </div>
162
 
163
  <div className="p-10 bg-black/20 border-t border-zinc-900 backdrop-blur-2xl z-20">
164
+ <form
165
+ onSubmit={(e) => { e.preventDefault(); handleSend(); }}
166
+ className="relative group max-w-5xl mx-auto flex gap-4"
167
+ >
168
+ <input
169
+ value={input}
170
+ onChange={(e) => setInput(e.target.value)}
171
+ placeholder="Input treasury instructions for the Quantum Core..."
172
+ className="flex-1 bg-black border border-zinc-800 focus:border-blue-500 rounded-[2rem] py-7 px-10 text-white text-base outline-none transition-all placeholder:text-zinc-800 font-bold"
173
+ />
174
+ <button
175
+ type="submit"
176
+ disabled={loading || !input.trim()}
177
+ className="px-8 bg-blue-600 hover:bg-blue-500 text-white rounded-[1.5rem] font-black uppercase flex items-center gap-3 disabled:opacity-50 shadow-xl transition-all"
178
+ >
179
+ {loading ? <Loader2 className="animate-spin" size={20} /> : <Send size={20} />}
180
  </button>
181
+ </form>
182
  </div>
183
  </div>
184
  </div>
views/Landing.tsx CHANGED
@@ -1,32 +1,37 @@
1
-
2
- import React, { useState } from 'react';
3
  import { useNavigate } from 'react-router-dom';
4
  import {
5
  Cpu, Sparkles, ArrowRight, Loader2, X, Terminal, Mic, Zap, MessageSquare, ChevronDown,
6
- ShieldCheck, Globe, Activity
 
 
 
 
7
  } from 'lucide-react';
8
- import { speakText, processVoiceCommand } from '../services/geminiService';
9
  import { apiClient } from '../services/api';
10
 
11
- // Powerhouse Component Imports
12
- import NexusNode from './landing/NexusNode';
13
- import IntelligenceAlpha from './landing/IntelligenceAlpha';
14
- import SystemFabric from './landing/SystemFabric';
15
- import RegistryVault from './landing/RegistryVault';
16
- import PrivacyManifesto from './landing/PrivacyManifesto';
17
- import AssetFoundry from './landing/AssetFoundry';
18
- import QuantumCompute from './landing/QuantumCompute';
19
- import LiquidityMesh from './landing/LiquidityMesh';
20
- import EncryptionProtocol from './landing/EncryptionProtocol';
21
- import OracleAuthority from './landing/OracleAuthority';
22
 
23
  const Landing: React.FC = () => {
24
  const navigate = useNavigate();
25
- const [isVoiceOpen, setIsVoiceOpen] = useState(false);
26
- const [voiceInput, setVoiceInput] = useState('');
27
- const [isProcessing, setIsProcessing] = useState(false);
28
  const [isDemoLoading, setIsDemoLoading] = useState(false);
29
- const [voiceStatus, setVoiceStatus] = useState('Standby for Neural Input...');
 
 
 
 
 
 
 
 
 
30
 
31
  const handleDemoAccess = async () => {
32
  if (isDemoLoading) return;
@@ -35,147 +40,332 @@ const Landing: React.FC = () => {
35
  const { success } = await apiClient.auth.login('alex', 'password123');
36
  if (success) {
37
  window.dispatchEvent(new Event('auth-update'));
38
- navigate('/');
39
  }
40
  } catch (err) {
41
- console.error("Demo handshake failed", err);
42
  } finally {
43
  setIsDemoLoading(false);
44
  }
45
  };
46
 
47
- const handleVoiceAction = async () => {
48
- if (!voiceInput.trim()) return;
49
- setIsProcessing(true);
50
- setVoiceStatus('Synchronizing Subspace Signals...');
51
-
52
- const result = await processVoiceCommand(voiceInput);
53
-
54
- if (result.action === 'SEND_MONEY') {
55
- const localPayments = JSON.parse(localStorage.getItem('lumina_payments') || '[]');
56
- const newPayment = {
57
- transactionId: `TX-${Math.floor(1000 + Math.random() * 9000)}`,
58
- baseCurrencyTransactionAmount: -result.amount,
59
- transactionDescription: `VOICE_AUTHORIZED: ${result.recipient.toUpperCase()}`,
60
- transactionType: 'Outgoing',
61
- transactionStatus: 'Completed',
62
- transactionDateTime: new Date().toISOString(),
63
- transactionReferenceNumber: `REF-${Math.floor(1000 + Math.random() * 9000)}`,
64
- category: result.category,
65
- recipient: result.recipient,
66
- amount: result.amount
67
- };
68
- localStorage.setItem('lumina_payments', JSON.stringify([newPayment, ...localPayments]));
69
- setVoiceStatus(result.narration);
70
- await speakText(result.narration);
71
- setTimeout(() => {
72
- setIsVoiceOpen(false);
73
- setVoiceInput('');
74
- setVoiceStatus('Standby for Neural Input...');
75
- navigate('/payments');
76
- }, 3000);
77
- } else {
78
- setVoiceStatus(result.narration);
79
- await speakText(result.narration);
80
- }
81
- setIsProcessing(false);
82
- };
83
 
84
  return (
85
- <div className="min-h-screen bg-[#020202] text-white font-sans overflow-x-hidden relative selection:bg-blue-500/30 selection:text-blue-200">
86
- <div className="fixed inset-0 z-0 pointer-events-none opacity-20">
87
- <div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_50%_50%,_#1e1b4b_0%,_transparent_70%)]"></div>
88
- <div className="absolute inset-0 bg-[linear-gradient(to_right,#80808012_1px,transparent_1px),linear-gradient(to_bottom,#80808012_1px,transparent_1px)] bg-[size:60px_60px]"></div>
 
89
  </div>
90
 
91
- <nav className="fixed top-0 left-0 w-full z-[100] px-10 py-6 flex justify-between items-center backdrop-blur-md bg-black/10 border-b border-white/5">
92
- <div className="flex items-center gap-4">
93
- <div className="w-10 h-10 bg-white rounded-xl flex items-center justify-center">
94
- <Cpu size={20} className="text-black" />
 
 
 
 
 
 
 
95
  </div>
96
- <div>
97
- <h1 className="text-sm font-black italic tracking-tighter text-white uppercase leading-none">Lumina <span className="text-blue-500 not-italic">Quantum</span></h1>
98
- <p className="text-[8px] uppercase tracking-[0.4em] font-bold text-zinc-600">Institutional Ledger</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  </div>
100
  </div>
101
- <div className="hidden md:flex items-center gap-10">
102
- <button onClick={handleDemoAccess} className="px-6 py-3 bg-blue-600 text-white rounded-full font-black text-[9px] uppercase tracking-widest hover:bg-blue-500 transition-all flex items-center gap-2">
103
- {isDemoLoading ? <Loader2 size={12} className="animate-spin" /> : <Sparkles size={12} />}
104
- Test Drive
 
 
105
  </button>
106
- <button onClick={() => navigate('/login')} className="px-8 py-3 bg-white text-black rounded-full font-black text-[9px] uppercase tracking-widest hover:bg-zinc-200 transition-all shadow-xl">Terminal</button>
107
  </div>
108
  </nav>
109
 
110
- <section className="relative z-10 min-h-screen flex flex-col justify-center items-center max-w-7xl mx-auto px-10 pt-32 pb-20 text-center">
111
- <div className="inline-flex items-center gap-3 px-6 py-2 bg-blue-500/10 border border-blue-500/20 rounded-full animate-in zoom-in-95 duration-700 mb-10">
112
- <Sparkles size={14} className="text-blue-500" />
113
- <span className="text-[10px] font-black uppercase tracking-[0.4em] text-blue-500">Node Architecture Verified • v6.2.0</span>
114
  </div>
115
- <h1 className="text-[8rem] lg:text-[11rem] font-black italic tracking-tighter uppercase leading-[0.75] mb-10">Quantum <br /><span className="text-blue-600 not-italic">Ledger</span></h1>
116
- <p className="text-zinc-500 text-xl lg:text-2xl font-medium italic max-w-2xl mx-auto mb-10">"The definitive interface for high-velocity institutional assets. Route neural signals through the mesh with zero-latency parity."</p>
117
- <div className="flex flex-wrap justify-center gap-8 pt-8">
118
- <button onClick={handleDemoAccess} className="px-12 py-7 bg-white text-black rounded-[2.5rem] font-black text-xs uppercase tracking-[0.5em] flex items-center gap-6 hover:bg-blue-500 hover:text-white transition-all shadow-[0_30px_60px_rgba(255,255,255,0.1)] group">
119
- {isDemoLoading ? <Loader2 size={20} className="animate-spin" /> : <span>Start Test Drive</span>}
120
- <ArrowRight size={20} className="group-hover:translate-x-3 transition-transform" />
121
- </button>
122
- <button onClick={() => setIsVoiceOpen(true)} className="px-12 py-7 bg-zinc-950 border border-zinc-800 text-white rounded-[2.5rem] font-black text-xs uppercase tracking-[0.5em] flex items-center gap-6 hover:border-blue-500 transition-all shadow-2xl group">
123
- <Mic size={20} className="text-blue-500" />
124
- Neural Command
125
- </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  </div>
127
- <div className="mt-20 animate-bounce opacity-20"><ChevronDown size={32} /></div>
128
  </section>
129
 
130
- <NexusNode />
131
- <IntelligenceAlpha />
132
- <SystemFabric />
133
- <RegistryVault />
134
- <PrivacyManifesto />
135
- <AssetFoundry />
136
- <QuantumCompute />
137
- <LiquidityMesh />
138
- <EncryptionProtocol />
139
- <OracleAuthority />
140
-
141
- <footer className="relative z-10 py-40 max-w-7xl mx-auto px-10 text-center space-y-24">
142
- <div className="pt-20 border-t border-white/5 space-y-12">
143
- <div className="flex justify-center gap-16 opacity-30 grayscale hover:grayscale-0 hover:opacity-100 transition-all duration-700">
144
- <ShieldCheck size={48} /><Globe size={48} /><Activity size={48} /><Zap size={48} />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  </div>
146
- <p className="text-[9px] font-black uppercase tracking-[1em] text-zinc-800">Lumina Quantum Systems • Citibank Demo Business Inc • 527 Org Protocol • 2025</p>
147
  </div>
148
- </footer>
149
 
150
- {isVoiceOpen && (
151
- <div className="fixed inset-0 z-[200] flex items-center justify-center p-6 backdrop-blur-xl bg-black/90">
152
- <div className="bg-zinc-950 border border-zinc-900 w-full max-w-2xl rounded-[4rem] p-16 shadow-2xl animate-in zoom-in-95 relative overflow-hidden">
153
- <div className="relative z-10 space-y-12">
154
- <div className="flex justify-between items-start">
155
- <div className="flex items-center gap-6">
156
- <div className={`p-5 rounded-3xl ${isProcessing ? 'bg-blue-600 animate-pulse' : 'bg-blue-600/10'} text-blue-500 border border-blue-500/20 shadow-2xl shadow-blue-500/5`}>
157
- <Mic size={32} />
158
- </div>
159
- <div>
160
- <h3 className="text-2xl font-black text-white italic tracking-tighter uppercase">Neural <span className="text-blue-500 not-italic">Command</span></h3>
161
- <p className="text-[10px] text-zinc-500 font-black uppercase tracking-widest mt-2">Natural Language Treasury Interface</p>
162
- </div>
163
- </div>
164
- <button onClick={() => setIsVoiceOpen(false)} className="p-4 text-zinc-600 hover:text-white transition-colors bg-zinc-900 rounded-2xl"><X size={24} /></button>
165
- </div>
166
- <div className="space-y-6">
167
- <textarea value={voiceInput} onChange={(e) => setVoiceInput(e.target.value)} placeholder="e.g. Send $2,500 to AWS..." className="w-full bg-black border-2 border-zinc-900 focus:border-blue-500/50 rounded-[2.5rem] p-10 text-white text-xl font-bold leading-relaxed tracking-tight h-48 outline-none transition-all resize-none placeholder:text-zinc-800" />
168
- <div className="flex items-center justify-between px-2">
169
- <div className="flex items-center gap-3"><div className={`w-2 h-2 rounded-full ${isProcessing ? 'bg-blue-500 animate-ping' : 'bg-emerald-500'}`}></div><span className="text-[10px] font-black text-zinc-500 uppercase tracking-widest">{voiceStatus}</span></div>
170
- <button onClick={handleVoiceAction} disabled={isProcessing || !voiceInput.trim()} className="px-10 py-5 bg-blue-600 hover:bg-blue-500 disabled:bg-zinc-900 disabled:text-zinc-700 text-white rounded-[2rem] font-black text-[10px] uppercase tracking-widest transition-all shadow-xl shadow-blue-900/40 flex items-center gap-4">{isProcessing ? <Loader2 className="animate-spin" size={20} /> : <Zap size={20} />}Execute Signal</button>
171
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  </div>
173
  </div>
174
  </div>
175
  </div>
176
- )}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  </div>
178
  );
179
  };
180
 
181
- export default Landing;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useState, useEffect, useMemo } from 'react';
 
2
  import { useNavigate } from 'react-router-dom';
3
  import {
4
  Cpu, Sparkles, ArrowRight, Loader2, X, Terminal, Mic, Zap, MessageSquare, ChevronDown,
5
+ ShieldCheck, Globe, Activity, Layers, Database, Lock, Eye, Building2, BarChart3, Radio, RefreshCw,
6
+ BrainCircuit, Network, Server, Fingerprint, Key, Wallet, Briefcase, FileText, Smartphone,
7
+ Shield, Infinity, Waves, Thermometer, FlaskConical, Gavel, Scale, Hammer, UserPlus, Heart,
8
+ // Added missing imports Code and ChevronRight
9
+ ShieldAlert, Repeat, ChevronLeft, GitPullRequest, Box, Code, ChevronRight
10
  } from 'lucide-react';
 
11
  import { apiClient } from '../services/api';
12
 
13
+ const FEATURE_CARDS = [
14
+ { id: 1, title: "Neural Parity", desc: "Real-time ledger consensus across 1,200 nodes with zero-drift synchronization.", icon: Fingerprint, color: "blue", img: "https://images.unsplash.com/photo-1639762681485-074b7f938ba0?q=80&w=2832&auto=format&fit=crop" },
15
+ { id: 2, title: "Quantum Oracle", desc: "Predictive treasury drift detection using qubit-stabilized neural forecasting models.", icon: Cpu, color: "purple", img: "https://images.unsplash.com/photo-1451187580459-43490279c0fa?q=80&w=2872&auto=format&fit=crop" },
16
+ { id: 3, title: "Liquidity Mesh", desc: "High-velocity disbursement fabrics optimized for sub-millisecond M2M settlement.", icon: Waves, color: "emerald", img: "https://images.unsplash.com/photo-1614850523296-d8c1af93d400?q=80&w=2570&auto=format&fit=crop" },
17
+ { id: 4, title: "Sovereign ID", desc: "Encapsulated identity vault utilizing RSA-OAEP-4096 and rotating high-entropy seeds.", icon: Lock, color: "rose", img: "https://images.unsplash.com/photo-1558494949-ef010cbdcc51?q=80&w=2546&auto=format&fit=crop" },
18
+ { id: 5, title: "Forge Foundry", desc: "Synthesis of high-fidelity digital relics from transaction heat-maps and block-states.", icon: Hammer, color: "amber", img: "https://images.unsplash.com/photo-1639322537228-f710d846310a?q=80&w=2560&auto=format&fit=crop" },
19
+ { id: 2, title: "Edge Routing", desc: "Global distribution node Map with proximity-optimized gateway handshakes.", icon: Globe, color: "cyan", img: "https://images.unsplash.com/photo-1484417894907-623942c8ee29?q=80&w=2832&auto=format&fit=crop" }
20
+ ];
 
 
 
21
 
22
  const Landing: React.FC = () => {
23
  const navigate = useNavigate();
 
 
 
24
  const [isDemoLoading, setIsDemoLoading] = useState(false);
25
+ const [scrollY, setScrollY] = useState(0);
26
+
27
+ // Feature Shuffle State
28
+ const [activeFeatureIndex, setActiveFeatureIndex] = useState(0);
29
+
30
+ useEffect(() => {
31
+ const handleScroll = () => setScrollY(window.scrollY);
32
+ window.addEventListener('scroll', handleScroll);
33
+ return () => window.removeEventListener('scroll', handleScroll);
34
+ }, []);
35
 
36
  const handleDemoAccess = async () => {
37
  if (isDemoLoading) return;
 
40
  const { success } = await apiClient.auth.login('alex', 'password123');
41
  if (success) {
42
  window.dispatchEvent(new Event('auth-update'));
43
+ navigate('/overview');
44
  }
45
  } catch (err) {
46
+ console.error("Handshake failed.");
47
  } finally {
48
  setIsDemoLoading(false);
49
  }
50
  };
51
 
52
+ const nextFeature = () => setActiveFeatureIndex(p => (p + 1) % FEATURE_CARDS.length);
53
+ const prevFeature = () => setActiveFeatureIndex(p => (p - 1 + FEATURE_CARDS.length) % FEATURE_CARDS.length);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  return (
56
+ <div className="min-h-screen bg-[#020202] text-white font-sans overflow-x-hidden relative selection:bg-blue-600/30 selection:text-white">
57
+ {/* Dynamic Backgrounds */}
58
+ <div className="fixed inset-0 z-0 pointer-events-none">
59
+ <div className="absolute inset-0 bg-[radial-gradient(circle_at_50%_0%,_#1e1b4b_0%,_transparent_60%)] opacity-40"></div>
60
+ <div className="absolute inset-0 bg-[linear-gradient(to_right,#80808008_1px,transparent_1px),linear-gradient(to_bottom,#80808008_1px,transparent_1px)] bg-[size:60px_60px]"></div>
61
  </div>
62
 
63
+ {/* FORTUNE 1200 MEGA HEADER */}
64
+ <nav className={`fixed top-0 left-0 w-full z-[100] px-10 py-8 flex justify-between items-center transition-all duration-700 ${scrollY > 50 ? 'backdrop-blur-3xl bg-black/80 border-b border-white/5 py-6' : 'bg-transparent'}`}>
65
+ <div className="flex items-center gap-12">
66
+ <div className="flex items-center gap-6 group cursor-pointer" onClick={() => window.scrollTo({top: 0, behavior: 'smooth'})}>
67
+ <div className="w-14 h-14 bg-white rounded-[1.8rem] flex items-center justify-center group-hover:rotate-12 transition-transform duration-700 shadow-2xl border-2 border-zinc-900">
68
+ <Cpu size={32} className="text-black" />
69
+ </div>
70
+ <div>
71
+ <h1 className="text-2xl font-black italic tracking-tighter text-white uppercase leading-none">AIBanking<span className="text-blue-500 not-italic">.dev</span></h1>
72
+ <p className="text-[10px] uppercase tracking-[0.8em] font-black text-zinc-600 mt-1.5">Consensus Registry</p>
73
+ </div>
74
  </div>
75
+
76
+ <div className="hidden xl:flex items-center gap-10">
77
+ <div className="group relative py-4">
78
+ <button className="text-[11px] font-black uppercase tracking-[0.4em] text-zinc-400 group-hover:text-white transition-colors flex items-center gap-2">Protocol Tiers <ChevronDown size={10} /></button>
79
+ <div className="absolute top-full left-0 w-[700px] bg-zinc-950 border border-zinc-900 rounded-[3.5rem] p-12 opacity-0 pointer-events-none group-hover:opacity-100 group-hover:translate-y-2 transition-all shadow-[0_40px_80px_rgba(0,0,0,0.8)] grid grid-cols-2 gap-10">
80
+ <MegaLink icon={Zap} title="Enterprise Core" desc="Authenticated via paid Google API nodes. 100% SLA." />
81
+ <MegaLink icon={Globe} title="Regular Mesh" desc="Public access tier for regional node exploration." />
82
+ <MegaLink icon={Code} title="SDK Import" desc="NPM-ready modules for M2M treasury automation." />
83
+ <MegaLink icon={ShieldCheck} title="Compliance Hub" desc="FDX v6.5 verified long-term archival registry." />
84
+ </div>
85
+ </div>
86
+ <div className="group relative py-4">
87
+ <button className="text-[11px] font-black uppercase tracking-[0.4em] text-zinc-400 group-hover:text-white transition-colors flex items-center gap-2">Resources <ChevronDown size={10} /></button>
88
+ <div className="absolute top-full left-0 w-[500px] bg-zinc-950 border border-zinc-900 rounded-[3rem] p-10 opacity-0 pointer-events-none group-hover:opacity-100 group-hover:translate-y-2 transition-all shadow-2xl space-y-6">
89
+ <MegaLink icon={FileText} title="Whitepaper Genesis" desc="The mathematical proof of neural banking." />
90
+ <MegaLink icon={Fingerprint} title="Security Manifesto" desc="Zero-persistence shredding protocol v1.2." />
91
+ </div>
92
+ </div>
93
+ <a href="#developers" className="text-[11px] font-black uppercase tracking-[0.4em] text-zinc-400 hover:text-white transition-colors">Developer Core</a>
94
  </div>
95
  </div>
96
+
97
+ <div className="flex items-center gap-10">
98
+ <button onClick={() => navigate('/documentation')} className="hidden md:block text-[11px] font-black uppercase tracking-[0.4em] text-zinc-500 hover:text-white transition-colors">Manual Registry</button>
99
+ <button onClick={handleDemoAccess} className="px-12 py-5 bg-blue-600 text-white rounded-full font-black text-[11px] uppercase tracking-[0.5em] hover:bg-blue-500 transition-all flex items-center gap-4 shadow-[0_0_40px_rgba(37,99,235,0.4)] group">
100
+ {isDemoLoading ? <Loader2 size={16} className="animate-spin" /> : <Sparkles size={16} className="group-hover:scale-125 transition-transform" />}
101
+ Initialize Handshake
102
  </button>
 
103
  </div>
104
  </nav>
105
 
106
+ {/* HERO HERO SECTION */}
107
+ <section className="relative z-10 min-h-screen flex flex-col justify-center items-center px-10 pt-40 pb-20 text-center overflow-hidden">
108
+ <div className="absolute inset-0 z-0 opacity-30">
109
+ <img src="https://images.unsplash.com/photo-1639322537228-f710d846310a?q=80&w=2832&auto=format&fit=crop" className="w-full h-full object-cover blur-[140px] scale-110" alt="Liquid Space" />
110
  </div>
111
+
112
+ <div className="relative z-10 space-y-16">
113
+ <div className="inline-flex items-center gap-4 px-10 py-4 bg-blue-600/10 border border-blue-600/20 rounded-full animate-in zoom-in-95 duration-1000 relative overflow-hidden group">
114
+ <div className="absolute inset-0 bg-gradient-to-r from-transparent via-white/5 to-transparent animate-[shimmer_2s_infinite]"></div>
115
+ <Activity size={18} className="text-blue-500" />
116
+ <span className="text-[12px] font-black uppercase tracking-[0.8em] text-blue-500">Subspace_Handshake_Stabilized</span>
117
+ </div>
118
+
119
+ <h1 className="text-[10rem] lg:text-[16rem] font-black italic tracking-tighter uppercase leading-[0.7] mb-12 drop-shadow-2xl">
120
+ Global <br /><span className="text-blue-600 not-italic decoration-blue-900/40 underline-offset-[40px] underline decoration-[30px]">Standard</span>
121
+ </h1>
122
+
123
+ <p className="text-zinc-500 text-3xl lg:text-4xl font-bold italic max-w-6xl mx-auto mb-16 leading-relaxed">
124
+ "The definitive interface for <span className="text-white">high-velocity institutional assets</span>. Route neural signals through the mesh with absolute parity."
125
+ </p>
126
+
127
+ <div className="flex flex-wrap justify-center gap-12 pt-10">
128
+ <button
129
+ onClick={handleDemoAccess}
130
+ className="px-20 py-10 bg-white text-black rounded-[3rem] font-black text-sm uppercase tracking-[0.8em] flex items-center gap-10 hover:bg-blue-600 hover:text-white transition-all shadow-[0_50px_100px_rgba(255,255,255,0.1)] group active:scale-95"
131
+ >
132
+ {isDemoLoading ? <Loader2 size={32} className="animate-spin" /> : <span>Start Session</span>}
133
+ <ArrowRight size={32} className="group-hover:translate-x-6 transition-transform duration-700" />
134
+ </button>
135
+ <button className="px-20 py-10 bg-zinc-950 border-2 border-zinc-900 text-white rounded-[3rem] font-black text-sm uppercase tracking-[0.8em] flex items-center gap-10 hover:border-blue-600 transition-all shadow-2xl group active:scale-95">
136
+ <Database size={32} className="text-blue-500" />
137
+ Whitepaper Genesis
138
+ </button>
139
+ </div>
140
  </div>
141
+ <div className="mt-40 animate-bounce opacity-20"><ChevronDown size={64} /></div>
142
  </section>
143
 
144
+ {/* ENDLESS TINDER SHUFFLE SECTION */}
145
+ <section className="relative z-10 py-60 px-10 bg-zinc-950/20">
146
+ <div className="max-w-[1400px] mx-auto grid grid-cols-1 lg:grid-cols-2 gap-32 items-center">
147
+ <div className="space-y-16">
148
+ <div className="space-y-6">
149
+ <h3 className="text-blue-500 font-black text-xs uppercase tracking-[0.8em]">Deep Feature Stack</h3>
150
+ <h2 className="text-8xl lg:text-[10rem] font-black italic text-white tracking-tighter uppercase leading-[0.85]">Endless <br /> <span className="text-blue-600 not-italic">Optimization</span></h2>
151
+ </div>
152
+ <p className="text-zinc-500 text-2xl font-bold leading-relaxed italic max-w-2xl">
153
+ "Our architectural layers are infinite. Swipe through the core protocols that define the future of sovereign digital wealth management."
154
+ </p>
155
+ <div className="flex gap-8">
156
+ <button onClick={prevFeature} className="p-8 bg-zinc-900 border border-zinc-800 rounded-3xl hover:bg-zinc-800 text-zinc-500 hover:text-white transition-all"><ChevronLeft size={32} /></button>
157
+ <button onClick={nextFeature} className="p-8 bg-zinc-900 border border-zinc-800 rounded-3xl hover:bg-zinc-800 text-zinc-500 hover:text-white transition-all"><ChevronRight size={32} /></button>
158
+ </div>
159
+ </div>
160
+
161
+ <div className="relative h-[800px] flex items-center justify-center">
162
+ {FEATURE_CARDS.map((card, i) => {
163
+ const isActive = activeFeatureIndex === i;
164
+ const isPrev = (activeFeatureIndex - 1 + FEATURE_CARDS.length) % FEATURE_CARDS.length === i;
165
+ const isNext = (activeFeatureIndex + 1) % FEATURE_CARDS.length === i;
166
+
167
+ let offset = 0;
168
+ let opacity = 0;
169
+ let scale = 0.8;
170
+ let rotate = 0;
171
+ let zIndex = 0;
172
+
173
+ if (isActive) { offset = 0; opacity = 1; scale = 1; rotate = 0; zIndex = 50; }
174
+ else if (isNext) { offset = 60; opacity = 0.4; scale = 0.9; rotate = 5; zIndex = 40; }
175
+ else if (isPrev) { offset = -60; opacity = 0; scale = 0.9; rotate = -5; zIndex = 30; }
176
+ else { opacity = 0; offset = 100; scale = 0.7; zIndex = 0; }
177
+
178
+ return (
179
+ <div
180
+ key={card.id}
181
+ className="absolute inset-0 transition-all duration-1000 ease-[cubic-bezier(0.23,1,0.32,1)]"
182
+ style={{
183
+ transform: `translateX(${offset}px) scale(${scale}) rotate(${rotate}deg)`,
184
+ opacity,
185
+ zIndex
186
+ }}
187
+ >
188
+ <div className="w-full h-full bg-zinc-950 border border-zinc-900 rounded-[5rem] overflow-hidden shadow-[0_100px_200px_rgba(0,0,0,0.8)] relative group">
189
+ <img src={card.img} className="absolute inset-0 w-full h-full object-cover opacity-40 group-hover:opacity-60 group-hover:scale-110 transition-all duration-[3s]" alt={card.title} />
190
+ <div className="absolute inset-0 bg-gradient-to-t from-black via-black/20 to-transparent"></div>
191
+ <div className="absolute bottom-16 left-16 right-16 space-y-8">
192
+ <div className={`w-20 h-20 bg-${card.color}-600/20 text-${card.color}-500 rounded-[2rem] flex items-center justify-center border border-${card.color}-500/30 shadow-2xl backdrop-blur-xl`}>
193
+ <card.icon size={40} />
194
+ </div>
195
+ <div className="space-y-4">
196
+ <h4 className="text-6xl font-black italic uppercase tracking-tighter text-white leading-none">{card.title}</h4>
197
+ <p className="text-zinc-400 text-xl font-bold leading-relaxed italic pr-10">"{card.desc}"</p>
198
+ </div>
199
+ <button className="flex items-center gap-4 text-[11px] font-black uppercase tracking-[0.5em] text-blue-500 hover:text-white transition-colors group/link">
200
+ Deploy Protocol <ArrowRight size={16} className="group-hover/link:translate-x-3 transition-transform" />
201
+ </button>
202
+ </div>
203
+ </div>
204
+ </div>
205
+ );
206
+ })}
207
  </div>
 
208
  </div>
209
+ </section>
210
 
211
+ {/* DEVELOPER CORE SECTION (REGULAR API) */}
212
+ <section id="developers" className="relative z-10 py-60 px-10 border-y border-white/5 bg-black">
213
+ <div className="max-w-7xl mx-auto grid grid-cols-1 lg:grid-cols-2 gap-40 items-center">
214
+ <div className="space-y-16">
215
+ <div className="space-y-6">
216
+ <h3 className="text-emerald-500 font-black text-xs uppercase tracking-[0.8em]">Open Source Registry</h3>
217
+ <h2 className="text-8xl lg:text-[10rem] font-black italic text-white tracking-tighter uppercase leading-[0.85]">The Free <br /> <span className="text-emerald-500 not-italic">Import</span></h2>
218
+ </div>
219
+ <p className="text-zinc-500 text-2xl font-bold leading-relaxed italic">
220
+ "Our Regular Tier API is accessible to any verified node globally. Initialize your treasury mesh with a single command line. Zero friction, total parity."
221
+ </p>
222
+ <div className="grid grid-cols-2 gap-10">
223
+ <div className="space-y-3">
224
+ <p className="text-[10px] font-black text-emerald-500 uppercase tracking-widest">Rate Limit</p>
225
+ <p className="text-xl font-black italic uppercase text-white">100 Req / Sec</p>
226
+ </div>
227
+ <div className="space-y-3">
228
+ <p className="text-[10px] font-black text-emerald-500 uppercase tracking-widest">Latency Hub</p>
229
+ <p className="text-xl font-black italic uppercase text-white">Global Nodes</p>
230
+ </div>
231
+ </div>
232
+ </div>
233
+
234
+ <div className="bg-zinc-950 border border-zinc-900 rounded-[4rem] p-12 shadow-2xl relative overflow-hidden group">
235
+ <div className="absolute top-0 right-0 p-10 opacity-5">
236
+ <Code size={120} className="text-emerald-500" />
237
+ </div>
238
+ <div className="flex items-center gap-6 mb-12">
239
+ <div className="w-4 h-4 bg-emerald-500 rounded-full animate-pulse shadow-[0_0_12px_#10b981]"></div>
240
+ <span className="text-[11px] font-black uppercase text-zinc-500 tracking-[0.5em]">Terminal Instance Active</span>
241
+ </div>
242
+ <div className="bg-black/80 rounded-[2.5rem] border border-zinc-900 p-10 font-mono text-sm space-y-6">
243
+ <p className="text-zinc-600 italic">// Initialize Lumina Regular Mesh</p>
244
+ <p className="text-emerald-500">npm install @aibanking/core</p>
245
+ <div className="text-zinc-400 space-y-2">
246
+ <p><span className="text-blue-500">import</span> &#123; <span className="text-amber-500">LuminaNode</span> &#125; <span className="text-blue-500">from</span> <span className="text-emerald-400">'@aibanking/core'</span>;</p>
247
+ <p><span className="text-zinc-500 italic">// Establish regular node handshake</span></p>
248
+ <p><span className="text-blue-500">const</span> node = <span className="text-blue-500">await</span> <span className="text-amber-500">LuminaNode</span>.<span className="text-white">initialize</span>(&#123;</p>
249
+ <p className="pl-6">tier: <span className="text-emerald-400">'regular'</span>,</p>
250
+ <p className="pl-6">region: <span className="text-emerald-400">'US-EAST'</span></p>
251
+ <p>&#125;);</p>
252
+ </div>
253
+ <button className="flex items-center gap-3 text-zinc-500 hover:text-white transition-colors group/copy">
254
+ <Smartphone size={16} />
255
+ <span className="text-[10px] font-black uppercase tracking-widest">Copy Connection String</span>
256
+ </button>
257
+ </div>
258
+ </div>
259
+ </div>
260
+ </section>
261
+
262
+ {/* MASSIVE CONTENT SLAM SECTIONS */}
263
+ <section className="relative z-10 py-60 px-10 border-t border-white/5">
264
+ <div className="max-w-7xl mx-auto space-y-40">
265
+ <div className="grid grid-cols-1 lg:grid-cols-2 gap-40 items-center">
266
+ <div className="relative aspect-square rounded-[6rem] overflow-hidden shadow-2xl border border-zinc-900 group">
267
+ <img src="https://images.unsplash.com/photo-1639762681485-074b7f938ba0?q=80&w=2832&auto=format&fit=crop" className="w-full h-full object-cover opacity-50 group-hover:opacity-100 group-hover:scale-110 transition-all duration-[3s]" alt="Neural Fabric" />
268
+ </div>
269
+ <div className="space-y-10">
270
+ <h2 className="text-8xl font-black italic text-white uppercase tracking-tighter leading-[0.9]">The Neural <br /> <span className="text-blue-500">Subspace</span></h2>
271
+ <p className="text-zinc-500 text-2xl font-bold italic leading-relaxed">
272
+ "Interconnecting 80+ financial protocols through a singular, high-entropy neural gateway. We don't just route; we synthesize consensus."
273
+ </p>
274
+ <div className="grid grid-cols-2 gap-8">
275
+ <HeritageCard icon={GitPullRequest} title="Requests" val="1.4M / sec" />
276
+ <HeritageCard icon={Box} title="Parity Blocks" val="Synced" />
277
  </div>
278
  </div>
279
  </div>
280
  </div>
281
+ </section>
282
+
283
+ {/* JAM-PACKED FAT FOOTER */}
284
+ <footer className="relative z-10 bg-black pt-80 pb-40 px-10 border-t border-zinc-900">
285
+ <div className="max-w-[1600px] mx-auto">
286
+ <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-20 mb-60">
287
+ <div className="col-span-2 space-y-12">
288
+ <div className="flex items-center gap-6">
289
+ <div className="w-16 h-16 bg-white rounded-3xl flex items-center justify-center border-4 border-zinc-900 shadow-2xl">
290
+ <Cpu size={40} className="text-black" />
291
+ </div>
292
+ <h2 className="text-4xl font-black italic tracking-tighter uppercase leading-none">AIBanking<span className="text-blue-500 not-italic">.dev</span></h2>
293
+ </div>
294
+ <p className="text-zinc-500 text-xl font-bold italic leading-relaxed max-w-md">
295
+ "The undisputed leader in neural treasury automation and institutional mesh fabrics. Building the future of sovereign digital assets."
296
+ </p>
297
+ <div className="flex gap-8">
298
+ <SocialIcon icon={Globe} /><SocialIcon icon={Shield} /><SocialIcon icon={Zap} /><SocialIcon icon={MessageSquare} />
299
+ </div>
300
+ </div>
301
+
302
+ <FooterColumn title="Protocols" links={['FDX v6.5 Registry', 'RSA-OAEP-4096', 'Subspace Handshake', 'M2M Consensus', 'SHA-256 Shredding', 'Neural Entanglement', 'Zero-Knowledge Vaults', 'Layer 2 Settlement', 'Cross-Node Parity', 'Entropy Rotation']} />
303
+ <FooterColumn title="Intelligence" links={['Lumina Oracle', 'Predictive Alpha', 'Drift Detection', 'Machine Sentiment', 'HFT Neural Pathing', 'Simulation Core', 'Risk Analysis v4', 'Treasury Logic', 'Sentiment Polling', 'Market Biasing']} />
304
+ <FooterColumn title="Network" links={['Global Node Map', 'US-EAST Cluster', 'EU-WEST Parity', 'APAC Dispersal', 'Latency Hubs', 'Bare Metal Clusters', 'Sub-millisecond Routing', 'Edge Distribution', 'Sub-Space Tunneling', 'Node Health Polling']} />
305
+ <FooterColumn title="Institutional" links={['Vault Registry', 'Disbursements', 'Collections', 'Registry Settlement', 'Partner CRM', 'KYC Handshake', 'Compliance Node', 'Audit Trail Genesis', 'Asset Custody', 'Corporate Ledger']} />
306
+ </div>
307
+
308
+ <div className="pt-20 border-t border-zinc-900 flex flex-col md:flex-row justify-between items-center gap-12">
309
+ <div className="flex flex-wrap justify-center md:justify-start gap-12">
310
+ <FooterPolicyLink to="/manifesto" label="Honest Manifesto" />
311
+ <FooterPolicyLink to="/documentation" label="System Manual" />
312
+ <FooterPolicyLink to="/documentation" label="API Registry" />
313
+ <FooterPolicyLink to="/airdrop" label="Genesis Airdrop" />
314
+ <FooterPolicyLink to="/documentation" label="Cookie Protocol" />
315
+ <FooterPolicyLink to="/documentation" label="SLA Standard" />
316
+ </div>
317
+ <p className="text-[11px] font-black uppercase tracking-[1em] text-zinc-800">Verified 2025 • Citibank Demo Business Inc • aibanking.dev Protocol</p>
318
+ </div>
319
+ </div>
320
+ </footer>
321
  </div>
322
  );
323
  };
324
 
325
+ const MegaLink = ({ icon: Icon, title, desc }: any) => (
326
+ <div className="group/mega flex gap-8 cursor-pointer hover:translate-x-2 transition-transform">
327
+ <div className="p-5 bg-zinc-900 rounded-[2rem] text-zinc-600 group-hover/mega:text-blue-500 transition-colors border border-zinc-800 shadow-xl group-hover/mega:border-blue-500/20">
328
+ <Icon size={32} />
329
+ </div>
330
+ <div>
331
+ <h4 className="text-base font-black text-white uppercase italic tracking-widest mb-1">{title}</h4>
332
+ <p className="text-xs text-zinc-500 font-bold leading-relaxed">{desc}</p>
333
+ </div>
334
+ </div>
335
+ );
336
+
337
+ const HeritageCard = ({ icon: Icon, title, val }: any) => (
338
+ <div className="p-10 bg-zinc-900/30 border border-zinc-800 rounded-[3rem] hover:border-blue-500/20 transition-all shadow-xl group">
339
+ <Icon size={36} className="text-blue-500 mb-8 group-hover:scale-110 transition-transform" />
340
+ <p className="text-[11px] font-black text-zinc-600 uppercase tracking-widest mb-2">{title}</p>
341
+ <p className="text-3xl font-black italic uppercase tracking-tighter text-white leading-none">{val}</p>
342
+ </div>
343
+ );
344
+
345
+ const FooterColumn = ({ title, links }: any) => (
346
+ <div className="space-y-12">
347
+ <h4 className="text-[12px] font-black uppercase tracking-[0.6em] text-white italic">{title}</h4>
348
+ <ul className="space-y-6">
349
+ {links.map((link: string, i: number) => (
350
+ <li key={i}>
351
+ <a href="#" className="text-[10px] font-bold text-zinc-600 hover:text-blue-400 transition-colors uppercase tracking-widest">{link}</a>
352
+ </li>
353
+ ))}
354
+ </ul>
355
+ </div>
356
+ );
357
+
358
+ const SocialIcon = ({ icon: Icon }: any) => (
359
+ <div className="p-6 bg-zinc-900 border border-zinc-800 rounded-3xl text-zinc-500 hover:text-white hover:border-blue-500 transition-all cursor-pointer shadow-xl">
360
+ <Icon size={32} />
361
+ </div>
362
+ );
363
+
364
+ const FooterPolicyLink = ({ to, label }: any) => {
365
+ const navigate = useNavigate();
366
+ return (
367
+ <button onClick={() => navigate(to)} className="text-[10px] font-black uppercase tracking-[0.4em] text-zinc-600 hover:text-white transition-colors">{label}</button>
368
+ );
369
+ };
370
+
371
+ export default Landing;
views/Simulation.tsx CHANGED
@@ -1,8 +1,9 @@
1
 
2
  import React, { useState } from 'react';
3
  import { Play, Sparkles, AlertCircle, CheckCircle2, ChevronRight, Loader2 } from 'lucide-react';
4
- import { runSimulationForecast } from '../services/geminiService.ts';
5
- import { SimulationResult } from '../types/index.ts';
 
6
 
7
  const ScenarioButton = ({ label, description, onClick }: any) => (
8
  <button
 
1
 
2
  import React, { useState } from 'react';
3
  import { Play, Sparkles, AlertCircle, CheckCircle2, ChevronRight, Loader2 } from 'lucide-react';
4
+ // fix: removed .ts extension from imports to follow project pattern and resolved missing member error
5
+ import { runSimulationForecast } from '../services/geminiService';
6
+ import { SimulationResult } from '../types/index';
7
 
8
  const ScenarioButton = ({ label, description, onClick }: any) => (
9
  <button
views/routes.ts CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import React from 'react';
3
  import {
4
  LayoutDashboard,
@@ -29,29 +28,29 @@ import {
29
  Radio
30
  } from 'lucide-react';
31
 
32
- import Overview from './Overview.tsx';
33
- import InternalAccounts from './InternalAccounts.tsx';
34
- import Counterparties from './Counterparties.tsx';
35
- import Connectivity from './Connectivity.tsx';
36
- import Documents from './Documents.tsx';
37
- import Simulation from './Simulation.tsx';
38
- import DCRManagement from './DCRManagement.tsx';
39
- import Payments from './Payments.tsx';
40
- import Cards from './Cards.tsx';
41
- import AnalyticsReport from './AnalyticsReport.tsx';
42
- import Sustainability from './Sustainability.tsx';
43
- import Advisor from './Advisor.tsx';
44
- import Settings from './Settings.tsx';
45
- import LineItems from './LineItems.tsx';
46
- import VirtualAccounts from './VirtualAccounts.tsx';
47
- import Flows from './Flows.tsx';
48
- import Validations from './Validations.tsx';
49
- import CryptoTerminal from './CryptoTerminal.tsx';
50
- import CryptView from './CryptView.tsx';
51
- import PrivacyPolicy from './PrivacyPolicy.tsx';
52
- import Documentation from './Documentation.tsx';
53
- import Airdrop from './Airdrop.tsx';
54
- import Broadcast from './Broadcast.tsx';
55
 
56
  export interface RouteConfig {
57
  path: string;
@@ -63,7 +62,7 @@ export interface RouteConfig {
63
  }
64
 
65
  export const routes: RouteConfig[] = [
66
- { path: '/', component: Overview, label: 'Overview', icon: LayoutDashboard, showInSidebar: true, category: 'core' },
67
  { path: '/broadcast', component: Broadcast, label: 'Global Node', icon: Radio, showInSidebar: true, category: 'core' },
68
  { path: '/registry', component: InternalAccounts, label: 'Bank Registry', icon: Building2, showInSidebar: true, category: 'registry' },
69
  { path: '/virtual-nodes', component: VirtualAccounts, label: 'Virtual Nodes', icon: Network, showInSidebar: true, category: 'registry' },
@@ -77,16 +76,12 @@ export const routes: RouteConfig[] = [
77
  { path: '/dcr', component: DCRManagement, label: 'DCR Registry', icon: Key, showInSidebar: true, category: 'intelligence' },
78
  { path: '/validator', component: Validations, label: 'Registry Validator', icon: ShieldAlert, showInSidebar: true, category: 'intelligence' },
79
  { path: '/payments', component: Payments, label: 'Disbursements', icon: ArrowLeftRight, showInSidebar: true, category: 'finance' },
80
- { path: '/line-items/:type/:id', component: LineItems, label: 'Line Ledger', icon: ListTree, showInSidebar: false, category: 'finance' },
81
  { path: '/cards', component: Cards, label: 'Elite Cards', icon: CreditCard, showInSidebar: true, category: 'finance' },
82
  { path: '/analytics', component: AnalyticsReport, label: 'Statements', icon: FileText, showInSidebar: true, category: 'finance' },
83
  { path: '/sustainability', component: Sustainability, label: 'Carbon Audit', icon: Leaf, showInSidebar: true, category: 'finance' },
84
  { path: '/advisor', component: Advisor, label: 'AI Terminal', icon: MessageSquare, showInSidebar: true, category: 'intelligence' },
85
  { path: '/airdrop', component: Airdrop, label: 'jocall3 Airdrop', icon: Gift, showInSidebar: true, category: 'finance' },
86
-
87
- // New Epic Pages
88
  { path: '/manifesto', component: PrivacyPolicy, label: 'Privacy Manifesto', icon: FileLock2, showInSidebar: true, category: 'admin' },
89
  { path: '/documentation', component: Documentation, label: 'Documentation Core', icon: BookOpen, showInSidebar: true, category: 'admin' },
90
-
91
  { path: '/settings', component: Settings, label: 'System Config', icon: SettingsIcon, showInSidebar: false, category: 'admin' },
92
- ];
 
 
1
  import React from 'react';
2
  import {
3
  LayoutDashboard,
 
28
  Radio
29
  } from 'lucide-react';
30
 
31
+ import Overview from './Overview';
32
+ import InternalAccounts from './InternalAccounts';
33
+ import Counterparties from './Counterparties';
34
+ import Connectivity from './Connectivity';
35
+ import Documents from './Documents';
36
+ import Simulation from './Simulation';
37
+ import DCRManagement from './DCRManagement';
38
+ import Payments from './Payments';
39
+ import Cards from './Cards';
40
+ import AnalyticsReport from './AnalyticsReport';
41
+ import Sustainability from './Sustainability';
42
+ import Advisor from './Advisor';
43
+ import Settings from './Settings';
44
+ import LineItems from './LineItems';
45
+ import VirtualAccounts from './VirtualAccounts';
46
+ import Flows from './Flows';
47
+ import Validations from './Validations';
48
+ import CryptoTerminal from './CryptoTerminal';
49
+ import CryptView from './CryptView';
50
+ import PrivacyPolicy from './PrivacyPolicy';
51
+ import Documentation from './Documentation';
52
+ import Airdrop from './Airdrop';
53
+ import Broadcast from './Broadcast';
54
 
55
  export interface RouteConfig {
56
  path: string;
 
62
  }
63
 
64
  export const routes: RouteConfig[] = [
65
+ { path: '/overview', component: Overview, label: 'Overview', icon: LayoutDashboard, showInSidebar: true, category: 'core' },
66
  { path: '/broadcast', component: Broadcast, label: 'Global Node', icon: Radio, showInSidebar: true, category: 'core' },
67
  { path: '/registry', component: InternalAccounts, label: 'Bank Registry', icon: Building2, showInSidebar: true, category: 'registry' },
68
  { path: '/virtual-nodes', component: VirtualAccounts, label: 'Virtual Nodes', icon: Network, showInSidebar: true, category: 'registry' },
 
76
  { path: '/dcr', component: DCRManagement, label: 'DCR Registry', icon: Key, showInSidebar: true, category: 'intelligence' },
77
  { path: '/validator', component: Validations, label: 'Registry Validator', icon: ShieldAlert, showInSidebar: true, category: 'intelligence' },
78
  { path: '/payments', component: Payments, label: 'Disbursements', icon: ArrowLeftRight, showInSidebar: true, category: 'finance' },
 
79
  { path: '/cards', component: Cards, label: 'Elite Cards', icon: CreditCard, showInSidebar: true, category: 'finance' },
80
  { path: '/analytics', component: AnalyticsReport, label: 'Statements', icon: FileText, showInSidebar: true, category: 'finance' },
81
  { path: '/sustainability', component: Sustainability, label: 'Carbon Audit', icon: Leaf, showInSidebar: true, category: 'finance' },
82
  { path: '/advisor', component: Advisor, label: 'AI Terminal', icon: MessageSquare, showInSidebar: true, category: 'intelligence' },
83
  { path: '/airdrop', component: Airdrop, label: 'jocall3 Airdrop', icon: Gift, showInSidebar: true, category: 'finance' },
 
 
84
  { path: '/manifesto', component: PrivacyPolicy, label: 'Privacy Manifesto', icon: FileLock2, showInSidebar: true, category: 'admin' },
85
  { path: '/documentation', component: Documentation, label: 'Documentation Core', icon: BookOpen, showInSidebar: true, category: 'admin' },
 
86
  { path: '/settings', component: Settings, label: 'System Config', icon: SettingsIcon, showInSidebar: false, category: 'admin' },
87
+ ];