Skip to content

Commit 249bfed

Browse files
authored
Merge pull request #31 from GYFX35/integrate-assistance-roles-6285518675758641852
Integrate official assistance roles and update README
2 parents ded6c20 + 8d0f61e commit 249bfed

4 files changed

Lines changed: 171 additions & 0 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ An immersive Augmented Reality (AR) training simulation built with Three.js and
2828
### 📦 Logistics Digital Twin
2929
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.
3030

31+
### 🛡️ Official Assistance Tools
32+
Integrated support modules for official entities:
33+
- **Police**: Emergency dispatch, secure incident reporting, and forensic analysis.
34+
- **Military**: Strategic dashboards, AI-driven reconnaissance, and tactical communications.
35+
- **Gendarmerie**: Territorial security management, traffic coordination, and specialized response units.
36+
3137
## Tech Stack
3238

3339
### Frontend

src/App.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import FakeContentAnalyzer from './FakeContentAnalyzer';
77
import FBIGame from './FBIGame';
88
import SupplyChainPlatform from './SupplyChainPlatform';
99
import Marketplace from './Marketplace';
10+
import OfficialAssistance from './OfficialAssistance';
1011

1112
function App() {
1213
const [view, setView] = useState('marketplace');
@@ -26,6 +27,7 @@ function App() {
2627
<button className={view === 'fake-content' ? 'active' : ''} onClick={() => setView('fake-content')}>Fake Content</button>
2728
<button className={view === 'fbi-game' ? 'active' : ''} onClick={() => setView('fbi-game')}>FBI Game</button>
2829
<button className={view === 'supply-chain' ? 'active' : ''} onClick={() => setView('supply-chain')}>Supply Chain</button>
30+
<button className={view === 'assistance' ? 'active' : ''} onClick={() => setView('assistance')}>Official Assistance</button>
2931
</nav>
3032
</header>
3133
<main>
@@ -36,6 +38,7 @@ function App() {
3638
{view === 'fake-content' && <FakeContentAnalyzer />}
3739
{view === 'fbi-game' && <FBIGame />}
3840
{view === 'supply-chain' && <SupplyChainPlatform />}
41+
{view === 'assistance' && <OfficialAssistance />}
3942
</main>
4043
<footer className="global-footer">
4144
<p>© 2024 Global Security Platform | Official Domain: <a href="https://global-security-platform.com">global-security-platform.com</a></p>

src/Marketplace.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ const tools = [
3636
name: 'Logistics Digital Twin',
3737
description: '3D warehouse simulation and blockchain-backed logistics tracking.',
3838
icon: '📦'
39+
},
40+
{
41+
id: 'assistance',
42+
name: 'Official Assistance',
43+
description: 'Integrated support tools for Police, Military, and Gendarmerie.',
44+
icon: '🛡️'
3945
}
4046
];
4147

src/OfficialAssistance.jsx

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
import React, { useState } from 'react';
2+
3+
const assistanceRoles = {
4+
police: {
5+
title: 'Police Assistance',
6+
icon: '👮',
7+
description: 'Civilian law enforcement and public safety services.',
8+
tools: [
9+
{ id: 'dispatch', name: 'Emergency Dispatch', icon: '📞', desc: 'Real-time coordination of emergency responses.' },
10+
{ id: 'reporting', name: 'Incident Reporting', icon: '📝', desc: 'Secure portal for filing and tracking crime reports.' },
11+
{ id: 'forensics', name: 'Forensic Analysis', icon: '🔬', desc: 'AI-assisted analysis of digital and physical evidence.' }
12+
]
13+
},
14+
military: {
15+
title: 'Military Assistance',
16+
icon: '🪖',
17+
description: 'National defense and strategic security operations.',
18+
tools: [
19+
{ id: 'dashboard', name: 'Strategic Dashboard', icon: '📊', desc: 'Global threat monitoring and resource allocation.' },
20+
{ id: 'recon', name: 'Reconnaissance AI', icon: '🛰️', desc: 'Satellite and drone data processing for situational awareness.' },
21+
{ id: 'comms', name: 'Tactical Comms', icon: '📡', desc: 'Encrypted communication channels for field operations.' }
22+
]
23+
},
24+
gendarmery: {
25+
title: 'Gendarmerie Assistance',
26+
icon: '🛡️',
27+
description: 'Military-force law enforcement for territorial and specialized security.',
28+
tools: [
29+
{ id: 'territory', name: 'Territorial Security', icon: '🗺️', desc: 'Regional patrol management and community safety.' },
30+
{ id: 'traffic', name: 'Traffic Management', icon: '🚦', desc: 'Coordination of road safety and major transit routes.' },
31+
{ id: 'response', name: 'Specialized Response', icon: '🚨', desc: 'Elite units for counter-terrorism and high-risk interventions.' }
32+
]
33+
}
34+
};
35+
36+
export default function OfficialAssistance() {
37+
const [activeRole, setActiveRole] = useState('police');
38+
39+
return (
40+
<div className="assistance-container">
41+
<div className="role-selector">
42+
{Object.entries(assistanceRoles).map(([id, role]) => (
43+
<button
44+
key={id}
45+
className={`role-tab ${activeRole === id ? 'active' : ''}`}
46+
onClick={() => setActiveRole(id)}
47+
>
48+
<span className="role-icon">{role.icon}</span>
49+
{role.title}
50+
</button>
51+
))}
52+
</div>
53+
54+
<div className="role-content">
55+
<h2>{assistanceRoles[activeRole].title}</h2>
56+
<p className="role-description">{assistanceRoles[activeRole].description}</p>
57+
58+
<div className="tool-list">
59+
{assistanceRoles[activeRole].tools.map((tool) => (
60+
<div key={tool.id} className="assistance-tool-card">
61+
<div className="tool-icon">{tool.icon}</div>
62+
<div className="tool-info">
63+
<h3>{tool.name}</h3>
64+
<p>{tool.desc}</p>
65+
</div>
66+
<button className="action-btn" onClick={() => alert(`Launching ${tool.name}...`)}>Launch</button>
67+
</div>
68+
))}
69+
</div>
70+
</div>
71+
72+
<style jsx>{`
73+
.assistance-container {
74+
padding: 20px;
75+
max-width: 1000px;
76+
margin: 0 auto;
77+
color: white;
78+
}
79+
.role-selector {
80+
display: flex;
81+
gap: 10px;
82+
margin-bottom: 30px;
83+
border-bottom: 1px solid #444;
84+
padding-bottom: 10px;
85+
}
86+
.role-tab {
87+
background: #333;
88+
border: 1px solid #555;
89+
color: white;
90+
padding: 10px 20px;
91+
border-radius: 8px 8px 0 0;
92+
cursor: pointer;
93+
display: flex;
94+
align-items: center;
95+
gap: 10px;
96+
font-weight: bold;
97+
transition: background 0.2s;
98+
}
99+
.role-tab.active {
100+
background: #61dafb;
101+
color: #282c34;
102+
border-color: #61dafb;
103+
}
104+
.role-content {
105+
background: #282c34;
106+
padding: 30px;
107+
border-radius: 0 0 12px 12px;
108+
border: 1px solid #444;
109+
border-top: none;
110+
}
111+
.role-description {
112+
color: #aaa;
113+
margin-bottom: 30px;
114+
font-style: italic;
115+
}
116+
.tool-list {
117+
display: grid;
118+
grid-template-columns: 1fr;
119+
gap: 15px;
120+
}
121+
.assistance-tool-card {
122+
display: flex;
123+
align-items: center;
124+
background: #333;
125+
padding: 20px;
126+
border-radius: 10px;
127+
gap: 20px;
128+
}
129+
.tool-icon {
130+
font-size: 2.5rem;
131+
}
132+
.tool-info {
133+
flex-grow: 1;
134+
}
135+
.tool-info h3 {
136+
margin: 0 0 5px 0;
137+
color: #61dafb;
138+
}
139+
.tool-info p {
140+
margin: 0;
141+
color: #ccc;
142+
font-size: 0.9rem;
143+
}
144+
.action-btn {
145+
background: #61dafb;
146+
color: #282c34;
147+
border: none;
148+
padding: 10px 20px;
149+
border-radius: 5px;
150+
font-weight: bold;
151+
cursor: pointer;
152+
}
153+
`}</style>
154+
</div>
155+
);
156+
}

0 commit comments

Comments
 (0)