Real-time global cyber threat intelligence and hands-on cybersecurity learning in one platform.
- 1. Project Name & Tagline
- 2. Table of Contents
- 3. Project Overview
- 4. Quick Start
- 5. Usage
- 6. Configuration
- 7. Project Structure
- 8. Development
- 9. Deployment
- 10. FAQ
- 11. Contributing
- 12. License
Cyber fraud, phishing, ransomware, and social engineering evolve quickly. Teams need understandable threat visibility and practical training tools in the same place.
- CesiumJS-powered Global Cyber Threat Intelligence globe:
- Rotatable, zoomable, tiltable 3D Earth.
- Dynamic attack flow lines (source -> destination).
- Severity markers (red = high, yellow = medium, blue = low).
- 3D regional attack bars (incident counts).
- Global risk heat layer.
- Click panel with IPs, threat type, confidence, and timestamp.
- Real-time event updates:
- WebSocket stream (
/ws/events) for local Node runtime. - SSE fallback (
/api/events/stream) for environments without WebSocket support.
- WebSocket stream (
- Threat/news fusion backend:
- Multi-source ingestion (official feeds, RSS, snapshots).
- Event normalization, confidence scoring, and export (GeoJSON/CSV).
- Security analysis tools:
- URL scanner, image forensics, text verifier, phone inspector, WiFi scanner, QR scanner, email analyzer.
- Bilingual UI:
- English and Traditional Chinese language switching with persistent preference.
- Security operations demos and briefings.
- Threat landscape storytelling for security awareness.
- Interactive cybersecurity training for beginners to intermediate users.
- Lightweight threat intelligence visualization prototype for teams.
- Frontend: HTML, CSS, JavaScript, Chart.js, Leaflet, CesiumJS
- Backend: Node.js, Express
- Realtime: WebSocket (
ws) + Server-Sent Events fallback - Deployment: Vercel (HTTP/SSE), GitHub CLI workflow support
- Testing: Jest + Supertest
- Operating Systems:
- Windows
- macOS
- Linux
- Runtime:
- Node.js 18+
- Tools:
- Git
- npm
- Vercel CLI (
vercel) - GitHub CLI (
gh)
-
Clone the repository.
git clone https://github.com/Brian-code-123/NeoTrace.git cd NeoTrace -
Install dependencies.
npm install
-
Configure environment variables.
cp .env.example .env
Then set the required keys in
.env(see Configuration). -
Start the project.
npm start
-
Open the app.
- Default:
http://localhost:3000 - If port 3000 is busy:
PORT=3010 node server.js
- Default:
- Open the Dashboard to view:
- Global 3D threat globe
- News fusion cards
- Threat trend charts
- Use filters to narrow events by category, confidence, and time window.
- Click markers for event details (source IP, target IP, threat type, time).
npm start
npm run dev
npm test
npm run test:coverageGet normalized events:
curl 'http://localhost:3000/api/events?format=json&minConfidence=60'Export events as GeoJSON:
curl 'http://localhost:3000/api/events/export?format=geojson' -o events.geojsonExport events as CSV:
curl 'http://localhost:3000/api/events/export?format=csv' -o events.csv- Language toggle: top-right
EN/中 - View switch:
3D Globe/2D Map - Export:
Export GeoJSON/Export CSV
Create .env in project root:
PORT=3000
NODE_ENV=development
API_KEY=your_internal_api_key
ASI_API_KEY=your_asi_api_key
NUMVERIFY_KEY=your_numverify_key
ALLOWED_ORIGINS=https://your-domain.com,https://another-domain.comAPI_KEYis used for sensitive endpoints (viaX-API-Key).ASI_API_KEYenables AI-assisted summaries/stats.NUMVERIFY_KEYenables live phone intelligence enrichment.ALLOWED_ORIGINSextends CORS allowlist.
- Rate limits are set in
server.js. - Security headers and CSP are configured via
helmetinserver.js. - Cache TTLs for news/events are defined in
server.jsconstants.
NeoTrace/
public/
css/
style.css # Main styling
js/
globe-3d.js # Cesium 3D globe threat visualization
dashboard.js # Dashboard logic, map/news/charts, realtime listeners
i18n.js # Translation dictionary and language switcher
... # Tool-specific scripts
index.html # Main dashboard page
... # Other feature pages
test/
api.smoke.test.js # API smoke tests
server.js # Express API + event pipeline + realtime streaming
package.json # Scripts and dependencies
vercel.json # Vercel routing/runtime config
README.md # Project documentation
- Use clear, explicit naming.
- Keep functions focused and composable.
- Avoid leaking sensitive values in logs.
Recommended format:
feat: add Cesium realtime globe flowsfix: handle websocket fallback on verceldocs: rewrite readme structure
main: stable production branchdev: integration branchfeature/*: feature branches
vercelvercel --prodVercel:
vercel ls
vercel inspect <deployment-url>GitHub:
gh repo view --web
gh run list
gh run view <run-id> --logCheck GitHub repository secrets:
gh secret listCheck Vercel environment variables:
vercel env lsIf a secret is exposed:
- Revoke and rotate it immediately at provider side.
- Remove leaked value from code/history and force a clean redeploy.
- Re-add the new secret via
gh secret setorvercel env add. - Audit logs and access history.
- Docker and Nginx configs are not included by default in this repository.
- Add them only when self-hosting outside Vercel.
Vercel serverless functions do not provide long-lived Node WebSocket servers in this setup. NeoTrace automatically falls back to SSE (/api/events/stream) and polling.
- Check feed/API network access.
- Verify
ASI_API_KEYfor AI-enhanced stats. - Confirm CORS allowlist includes your origin.
Ensure the page text uses data-i18n/data-i18n-placeholder and that keys exist in both en and zh in public/js/i18n.js.
- Confirm
X-API-Keyfor protected endpoints. - Check rate limiting thresholds in
server.js.
- Use clear reproduction steps.
- Include expected vs actual behavior.
- Attach screenshots/logs when possible.
- Fork the repo and create
feature/*branch. - Add focused commits with clear messages.
- Run tests locally.
- Submit PR with summary and test evidence.
- Security and correctness first.
- Include tests for behavior changes.
- Keep docs updated for public API/UX changes.
This project is licensed under the MIT License.