Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/logo.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>FBI Security Analyzer & AR Game</title>
<meta name="description" content="Official Global Security Platform - AI-powered scam detection, fake news analysis, and logistics digital twin." />
<title>Global Security Platform | Official Domain</title>
</head>
<body>
<div id="root"></div>
Expand Down
1 change: 1 addition & 0 deletions public/CNAME
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global-security-platform.com
1 change: 1 addition & 0 deletions social_media_analyzer/heuristics.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"bankofamerica.com", "chase.com", "wellsfargo.com", "citibank.com",
"hsbc.com", "barclays.com", "deutsche-bank.com", "santander.com"
],
"platform": ["global-security-platform.com"],
"general": ["google.com"],
"general_web": [
"wikipedia.org", "yahoo.com", "live.com", "microsoft.com",
Expand Down
56 changes: 49 additions & 7 deletions src/App.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,23 @@
.App-header {
background-color: #111;
padding: 20px;
border-bottom: 2px solid #00ff00;
border-bottom: 2px solid #61dafb;
}

.header-content {
display: flex;
align-items: center;
justify-content: center;
gap: 15px;
}

.official-badge {
background: #61dafb;
color: #111;
padding: 2px 8px;
border-radius: 4px;
font-size: 0.8rem;
font-weight: bold;
}

nav {
Expand All @@ -17,24 +33,50 @@ nav {

nav button {
padding: 10px 20px;
margin: 0 10px;
margin: 5px 10px;
background: transparent;
border: 1px solid #00ff00;
color: #00ff00;
border: 1px solid #61dafb;
color: #61dafb;
cursor: pointer;
font-family: 'Courier New', Courier, monospace;
font-family: 'Inter', system-ui, -apple-system, sans-serif;
text-transform: uppercase;
border-radius: 4px;
transition: all 0.3s ease;
}

nav button.active {
background: #00ff00;
background: #61dafb;
color: #000;
}

nav button:hover {
box-shadow: 0 0 10px #00ff00;
box-shadow: 0 0 10px rgba(97, 218, 251, 0.5);
background: rgba(97, 218, 251, 0.1);
}

main {
padding: 20px;
flex: 1;
}

.global-footer {
background: #111;
padding: 20px;
border-top: 1px solid #333;
margin-top: 40px;
}

.global-footer a {
color: #61dafb;
text-decoration: none;
}

.global-footer a:hover {
text-decoration: underline;
}

.App {
display: flex;
flex-direction: column;
min-height: 100vh;
}
17 changes: 13 additions & 4 deletions src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,40 @@ import AIContentDetector from './AIContentDetector';
import FakeContentAnalyzer from './FakeContentAnalyzer';
import FBIGame from './FBIGame';
import SupplyChainPlatform from './SupplyChainPlatform';
import Marketplace from './Marketplace';

function App() {
const [view, setView] = useState('scam');
const [view, setView] = useState('marketplace');

return (
<div className="App">
<header className="App-header">
<h1>Universal Security Analyzer</h1>
<div className="header-content" onClick={() => setView('marketplace')} style={{ cursor: 'pointer' }}>
<h1>Global Security Platform</h1>
<span className="official-badge">OFFICIAL</span>
</div>
<nav>
<button className={view === 'marketplace' ? 'active' : ''} onClick={() => setView('marketplace')}>Marketplace</button>
<button className={view === 'scam' ? 'active' : ''} onClick={() => setView('scam')}>Scam Analyzer</button>
<button className={view === 'fake-news' ? 'active' : ''} onClick={() => setView('fake-news')}>Fake News Analyzer</button>
<button className={view === 'fake-news' ? 'active' : ''} onClick={() => setView('fake-news')}>Fake News</button>
<button className={view === 'ai-content' ? 'active' : ''} onClick={() => setView('ai-content')}>AI Content</button>
<button className={view === 'fake-content' ? 'active' : ''} onClick={() => setView('fake-content')}>Fake Content</button>
<button className={view === 'fbi-game' ? 'active' : ''} onClick={() => setView('fbi-game')}>FBI AR Game</button>
<button className={view === 'fbi-game' ? 'active' : ''} onClick={() => setView('fbi-game')}>FBI Game</button>
<button className={view === 'supply-chain' ? 'active' : ''} onClick={() => setView('supply-chain')}>Supply Chain</button>
</nav>
</header>
<main>
{view === 'marketplace' && <Marketplace setView={setView} />}
{view === 'scam' && <ScamAnalyzer />}
{view === 'fake-news' && <FakeNewsAnalyzer />}
{view === 'ai-content' && <AIContentDetector />}
{view === 'fake-content' && <FakeContentAnalyzer />}
{view === 'fbi-game' && <FBIGame />}
{view === 'supply-chain' && <SupplyChainPlatform />}
</main>
<footer className="global-footer">
<p>© 2024 Global Security Platform | Official Domain: <a href="https://global-security-platform.com">global-security-platform.com</a></p>
</footer>
</div>
);
}
Expand Down
13 changes: 8 additions & 5 deletions src/App.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,23 @@ import { expect, test } from 'vitest';
import App from './App';
import React from 'react';

test('renders Universal Security Analyzer title', () => {
test('renders Global Security Platform title', () => {
render(<App />);
const titleElement = screen.getByText(/Universal Security Analyzer/i);
expect(titleElement).toBeDefined();
const titleElements = screen.getAllByText(/Global Security Platform/i);
expect(titleElements.length).toBeGreaterThan(0);
});

test('renders navigation buttons', () => {
render(<App />);
const marketplaceButtons = screen.getAllByText(/Marketplace/i);
expect(marketplaceButtons.length).toBeGreaterThan(0);

const scamButtons = screen.getAllByText(/Scam Analyzer/i);
expect(scamButtons.length).toBeGreaterThan(0);

const fakeNewsButtons = screen.getAllByText(/Fake News Analyzer/i);
const fakeNewsButtons = screen.getAllByText(/Fake News/i);
expect(fakeNewsButtons.length).toBeGreaterThan(0);

const fbiButtons = screen.getAllByText(/FBI AR Game/i);
const fbiButtons = screen.getAllByText(/FBI Game/i);
expect(fbiButtons.length).toBeGreaterThan(0);
});
128 changes: 128 additions & 0 deletions src/Marketplace.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import React from 'react';

const tools = [
{
id: 'scam',
name: 'Scam Analyzer',
description: 'Heuristic-based detection for phishing and fraudulent messages.',
icon: '🛡️'
},
{
id: 'fake-news',
name: 'Fake News Detector',
description: 'Analyze news articles for sensationalism and misinformation patterns.',
icon: '📰'
},
{
id: 'ai-content',
name: 'AI Content Detector',
description: 'Identify text generated by large language models.',
icon: '🤖'
},
{
id: 'fake-content',
name: 'Fake Content Verifier',
description: 'Verify the authenticity of digital media and profiles.',
icon: '🔍'
},
{
id: 'fbi-game',
name: 'FBI AR Game',
description: 'Immersive training for identifying security threats in AR.',
icon: '🕶️'
},
{
id: 'supply-chain',
name: 'Logistics Digital Twin',
description: '3D warehouse simulation and blockchain-backed logistics tracking.',
icon: '📦'
}
];

export default function Marketplace({ setView }) {
return (
<div className="marketplace-container">
<section className="hero">
<h1>Global Security Marketplace</h1>
<p className="official-domain">Official Domain: <strong>global-security-platform.com</strong></p>
<p>The centralized hub for your digital protection needs. Secure your communication, verify your data, and optimize your logistics with our AI-powered suite.</p>
</section>

<div className="tool-grid">
{tools.map((tool) => (
<div key={tool.id} className="tool-card" onClick={() => setView(tool.id)}>
<div className="tool-icon">{tool.icon}</div>
<h3>{tool.name}</h3>
<p>{tool.description}</p>
<button className="open-btn">Launch App</button>
</div>
))}
</div>

<style jsx>{`
.marketplace-container {
padding: 40px 20px;
max-width: 1200px;
margin: 0 auto;
}
.hero {
text-align: center;
margin-bottom: 50px;
padding: 40px;
Comment on lines +62 to +71
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Inline <style jsx> usage may be misleading and leads to globally scoped styles.

In this setup, the jsx attribute on <style> doesn’t provide scoping—these styles are applied globally. If you want scoped styles for Marketplace, this approach won’t achieve that. Either treat them as global (remove jsx and move to a shared stylesheet like App.css or a CSS module) or adopt a consistent scoping solution (e.g., CSS modules, styled-components) across the app.

Suggested implementation:

      </div>
  1. Create a src/Marketplace.css (or use an existing global stylesheet like App.css) and move all the styles that were inside <style jsx>{}</style> into that file, e.g.:
    .marketplace-container {
      padding: 40px 20px;
      max-width: 1200px;
      margin: 0 auto;
    }
    
    .hero {
      text-align: center;
      margin-bottom: 50px;
      padding: 40px;
      background: rgba(255, 255, 255, 0.05);
    }
    
    /* include the rest of the styles that were in the removed block */
  2. At the top of src/Marketplace.jsx, import this stylesheet so the styles are applied globally:
    import './Marketplace.css';
  3. Ensure any class names used in Marketplace.jsx (e.g. marketplace-container, hero, tool-card, open-btn, etc.) are fully defined in Marketplace.css so behavior matches the original inline styles.

background: rgba(255, 255, 255, 0.05);
border-radius: 15px;
}
.official-domain {
font-size: 1.2rem;
color: #61dafb;
margin: 10px 0;
}
.tool-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 25px;
}
.tool-card {
background: #282c34;
border: 1px solid #444;
border-radius: 12px;
padding: 25px;
text-align: left;
transition: transform 0.2s, box-shadow 0.2s;
cursor: pointer;
display: flex;
flex-direction: column;
}
.tool-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.3);
border-color: #61dafb;
}
.tool-icon {
font-size: 3rem;
margin-bottom: 15px;
}
.tool-card h3 {
margin: 0 0 10px 0;
color: #61dafb;
}
.tool-card p {
color: #ccc;
font-size: 0.95rem;
line-height: 1.5;
flex-grow: 1;
margin-bottom: 20px;
}
.open-btn {
background: #61dafb;
color: #282c34;
border: none;
padding: 10px;
border-radius: 6px;
font-weight: bold;
cursor: pointer;
}
`}</style>
</div>
);
}
Loading