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
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ An immersive Augmented Reality (AR) training simulation built with Three.js and
### 📦 Logistics Digital Twin
A 3D warehouse simulation featuring blockchain-backed logistics tracking and IoT-driven anomaly detection. It includes an Incoterms 2020 navigator and AI route optimization tools.

### 🛡️ Official Assistance Tools
Integrated support modules for official entities:
- **Police**: Emergency dispatch, secure incident reporting, and forensic analysis.
- **Military**: Strategic dashboards, AI-driven reconnaissance, and tactical communications.
- **Gendarmerie**: Territorial security management, traffic coordination, and specialized response units.

## Tech Stack

### Frontend
Expand Down
3 changes: 3 additions & 0 deletions src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import FakeContentAnalyzer from './FakeContentAnalyzer';
import FBIGame from './FBIGame';
import SupplyChainPlatform from './SupplyChainPlatform';
import Marketplace from './Marketplace';
import OfficialAssistance from './OfficialAssistance';

function App() {
const [view, setView] = useState('marketplace');
Expand All @@ -26,6 +27,7 @@ function App() {
<button className={view === 'fake-content' ? 'active' : ''} onClick={() => setView('fake-content')}>Fake Content</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>
<button className={view === 'assistance' ? 'active' : ''} onClick={() => setView('assistance')}>Official Assistance</button>
</nav>
</header>
<main>
Expand All @@ -36,6 +38,7 @@ function App() {
{view === 'fake-content' && <FakeContentAnalyzer />}
{view === 'fbi-game' && <FBIGame />}
{view === 'supply-chain' && <SupplyChainPlatform />}
{view === 'assistance' && <OfficialAssistance />}
</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>
Expand Down
6 changes: 6 additions & 0 deletions src/Marketplace.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ const tools = [
name: 'Logistics Digital Twin',
description: '3D warehouse simulation and blockchain-backed logistics tracking.',
icon: '📦'
},
{
id: 'assistance',
name: 'Official Assistance',
description: 'Integrated support tools for Police, Military, and Gendarmerie.',
icon: '🛡️'
}
];

Expand Down
156 changes: 156 additions & 0 deletions src/OfficialAssistance.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
import React, { useState } from 'react';

const assistanceRoles = {
police: {
title: 'Police Assistance',
icon: '👮',
description: 'Civilian law enforcement and public safety services.',
tools: [
{ id: 'dispatch', name: 'Emergency Dispatch', icon: '📞', desc: 'Real-time coordination of emergency responses.' },
{ id: 'reporting', name: 'Incident Reporting', icon: '📝', desc: 'Secure portal for filing and tracking crime reports.' },
{ id: 'forensics', name: 'Forensic Analysis', icon: '🔬', desc: 'AI-assisted analysis of digital and physical evidence.' }
]
},
military: {
title: 'Military Assistance',
icon: '🪖',
description: 'National defense and strategic security operations.',
tools: [
{ id: 'dashboard', name: 'Strategic Dashboard', icon: '📊', desc: 'Global threat monitoring and resource allocation.' },
{ id: 'recon', name: 'Reconnaissance AI', icon: '🛰️', desc: 'Satellite and drone data processing for situational awareness.' },
{ id: 'comms', name: 'Tactical Comms', icon: '📡', desc: 'Encrypted communication channels for field operations.' }
]
},
gendarmery: {
Copy link

Choose a reason for hiding this comment

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

issue (typo): Consider correcting the gendarmery key spelling to gendarmerie for consistency.

This mismatch between the key and the displayed label could be confusing, especially if these IDs are reused or matched by string elsewhere. Please rename the key to gendarmerie and update all references for consistency.

Suggested implementation:

  gendarmerie: {

There may be other references to the gendarmery key elsewhere in the codebase (e.g., lookups like data.gendarmery, route params, tests, or analytics events). Please search the entire repository for gendarmery and rename all occurrences to gendarmerie to keep things consistent and avoid runtime bugs.

title: 'Gendarmerie Assistance',
icon: '🛡️',
description: 'Military-force law enforcement for territorial and specialized security.',
tools: [
{ id: 'territory', name: 'Territorial Security', icon: '🗺️', desc: 'Regional patrol management and community safety.' },
{ id: 'traffic', name: 'Traffic Management', icon: '🚦', desc: 'Coordination of road safety and major transit routes.' },
{ id: 'response', name: 'Specialized Response', icon: '🚨', desc: 'Elite units for counter-terrorism and high-risk interventions.' }
]
}
};

export default function OfficialAssistance() {
const [activeRole, setActiveRole] = useState('police');

return (
<div className="assistance-container">
<div className="role-selector">
{Object.entries(assistanceRoles).map(([id, role]) => (
<button
key={id}
className={`role-tab ${activeRole === id ? 'active' : ''}`}
onClick={() => setActiveRole(id)}
>
<span className="role-icon">{role.icon}</span>
{role.title}
</button>
))}
</div>

<div className="role-content">
<h2>{assistanceRoles[activeRole].title}</h2>
<p className="role-description">{assistanceRoles[activeRole].description}</p>

<div className="tool-list">
{assistanceRoles[activeRole].tools.map((tool) => (
<div key={tool.id} className="assistance-tool-card">
<div className="tool-icon">{tool.icon}</div>
<div className="tool-info">
<h3>{tool.name}</h3>
<p>{tool.desc}</p>
</div>
<button className="action-btn" onClick={() => alert(`Launching ${tool.name}...`)}>Launch</button>
</div>
))}
</div>
</div>

<style jsx>{`
.assistance-container {
padding: 20px;
max-width: 1000px;
margin: 0 auto;
color: white;
}
.role-selector {
display: flex;
gap: 10px;
margin-bottom: 30px;
border-bottom: 1px solid #444;
padding-bottom: 10px;
}
.role-tab {
background: #333;
border: 1px solid #555;
color: white;
padding: 10px 20px;
border-radius: 8px 8px 0 0;
cursor: pointer;
display: flex;
align-items: center;
gap: 10px;
font-weight: bold;
transition: background 0.2s;
}
.role-tab.active {
background: #61dafb;
color: #282c34;
border-color: #61dafb;
}
.role-content {
background: #282c34;
padding: 30px;
border-radius: 0 0 12px 12px;
border: 1px solid #444;
border-top: none;
}
.role-description {
color: #aaa;
margin-bottom: 30px;
font-style: italic;
}
.tool-list {
display: grid;
grid-template-columns: 1fr;
gap: 15px;
}
.assistance-tool-card {
display: flex;
align-items: center;
background: #333;
padding: 20px;
border-radius: 10px;
gap: 20px;
}
.tool-icon {
font-size: 2.5rem;
}
.tool-info {
flex-grow: 1;
}
.tool-info h3 {
margin: 0 0 5px 0;
color: #61dafb;
}
.tool-info p {
margin: 0;
color: #ccc;
font-size: 0.9rem;
}
.action-btn {
background: #61dafb;
color: #282c34;
border: none;
padding: 10px 20px;
border-radius: 5px;
font-weight: bold;
cursor: pointer;
}
`}</style>
</div>
);
}
Loading