diff --git a/src/App.tsx b/src/App.tsx
index 7812554..e36a495 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -12,6 +12,7 @@ import { PlansView } from './components/PlansView';
import { AdminDashboard } from './components/AdminDashboard';
import { LandingPage } from './components/LandingPage';
import { ProfileView } from './components/ProfileView';
+import { NotificationManager } from './components/NotificationManager';
import { TrendingUp, ShieldAlert, Ghost, Mail, Lock, UserPlus, LogIn, Loader2, ArrowLeft, User as UserIcon, Eye, EyeOff } from 'lucide-react';
import { motion, AnimatePresence } from 'motion/react';
import { onAuthStateChanged, signInWithEmailAndPassword, createUserWithEmailAndPassword, updateProfile, signOut, sendEmailVerification, sendPasswordResetEmail, User, setPersistence, browserLocalPersistence, browserSessionPersistence } from 'firebase/auth';
@@ -538,6 +539,7 @@ export default function App() {
return (
+
{/* Background Image for App */}
= ({ userData }) => {
strokeDashoffset={283 - (283 * result.score) / 100}
className={cn(
"transition-all duration-1000 ease-out",
- result.decision === SignalType.BUY ? "text-green-500" : "text-brand-red"
+ result.decision === SignalType.BUY ? "text-green-500" : (result.decision === SignalType.SELL ? "text-brand-red" : "text-zinc-500")
)}
strokeLinecap="round"
transform="rotate(-90 50 50)"
@@ -285,7 +285,7 @@ export const AnalysisView: React.FC<{ userData?: any }> = ({ userData }) => {
{result.score}%
@@ -319,6 +319,11 @@ export const AnalysisView: React.FC<{ userData?: any }> = ({ userData }) => {
{/* Trading Decision */}
+
+
+ {result.pair}
+
+
= ({ onGetStarted, onViewPl
-
82%
+
90%
Precisão média
@@ -231,6 +231,44 @@ export const LandingPage: React.FC = ({ onGetStarted, onViewPl
+ {/* Info Section - IA QuantScanner */}
+
+
+
+
+ IA QuantScanner : O Futuro do Mercado.
+
+
+ O **IA QuantScanner** é uma ferramenta avançada baseada em Inteligência Artificial desenvolvida
+ para analisar o mercado financeiro em tempo real, com foco especial em **Forex, índices e criptomoedas**.
+
+
+
+
+
+
📊 ANÁLISE
+
Técnica automatizada que identifica padrões, suportes e resistências.
+
+
+
🤖 IA
+
Aprende continuamente com dados históricos e comportamento do mercado.
+
+
+
⏱️ MONITORAMENTO
+
Escaneia múltiplos ativos 24/7 para detectar oportunidades instantâneas.
+
+
+
+
+
Testemunhos
+
+
"Desde que comecei a usar o IA QuantScanner, minhas entradas ficaram muito mais precisas. Reduzi minhas perdas e aumentei meus lucros em poucas semanas." – **Carlos M.**
+
"A velocidade com que o sistema identifica oportunidades é impressionante. É como ter um analista profissional trabalhando para mim 24h." – **João D.**
+
+
+
+
+
{/* Footer */}
diff --git a/src/components/NotificationManager.tsx b/src/components/NotificationManager.tsx
new file mode 100644
index 0000000..a6125c7
--- /dev/null
+++ b/src/components/NotificationManager.tsx
@@ -0,0 +1,48 @@
+import React, { useEffect } from 'react';
+import { collection, query, where, onSnapshot } from 'firebase/firestore';
+import { db, auth } from '../lib/firebase';
+import { Signal, SignalType } from '../types';
+
+export const NotificationManager: React.FC = () => {
+
+ useEffect(() => {
+ if (!auth.currentUser) return;
+
+ // Check notification support and permission
+ if (!('Notification' in window)) {
+ console.log('Browser does not support notifications');
+ return;
+ }
+
+ if (Notification.permission !== 'granted') {
+ Notification.requestPermission();
+ }
+
+ const startTime = Date.now();
+ const q = query(
+ collection(db, 'signals'),
+ where('userId', '==', auth.currentUser.uid)
+ );
+
+ const unsubscribe = onSnapshot(q, (snapshot) => {
+ snapshot.docChanges().forEach((change) => {
+ if (change.type === 'added') {
+ const signal = { id: change.doc.id, ...change.doc.data() } as Signal;
+
+ if (signal.timestamp > startTime) {
+ if (Notification.permission === 'granted') {
+ new Notification('Novo Sinal de Trading!', {
+ body: `${signal.type} em ${signal.pair} - Score: ${signal.score}%`,
+ icon: 'https://i.ibb.co/9BwbV3M/FXBROS-WORLD-3.png'
+ });
+ }
+ }
+ }
+ });
+ });
+
+ return () => unsubscribe();
+ }, [auth.currentUser]);
+
+ return null;
+};