🛡️ Production-grade SIGINT forensics and wireless network analysis platform. Real-time threat detection, geospatial correlation via PostGIS, and interactive analysis dashboards.
- Dashboard: Real-time network environment overview with threat indicators
- Geospatial Analysis: Interactive Mapbox visualization with spatial correlation
- Network Analysis: Deep dive into individual network characteristics and behavior patterns
- Threat Detection: ML-powered identification of surveillance devices and anomalies
- Analytics: Advanced charts and graphs for network pattern analysis
- Address Enrichment: Multi-API venue and business identification (4 sources)
- Device Classification: Automatic identification of device types and behavioral profiling
- Trilateration: AP location calculation from multiple observations
Backend: Node.js/Express REST API with PostgreSQL + PostGIS
Frontend: Vanilla HTML5 with Tailwind CSS, Chart.js, Mapbox GL JS
Database: PostgreSQL 18 with PostGIS extension (566,400+ location records, 173,326+ unique networks)
- Node.js 18+
- PostgreSQL 18+ with PostGIS
git clone https://github.com/your-username/shadowcheck-static.git
cd shadowcheck-static
npm installCreate PostgreSQL database with PostGIS:
CREATE ROLE shadowcheck WITH LOGIN PASSWORD 'your_password';
CREATE DATABASE shadowcheck OWNER shadowcheck;
\c shadowcheck
CREATE EXTENSION postgis;Create .env in project root:
DB_USER=shadowcheck
DB_HOST=localhost
DB_NAME=shadowcheck
DB_PASSWORD=your_password
DB_PORT=5432
PORT=3001
See .env.example for all options.
psql -U shadowcheck -d shadowcheck -f sql/functions/create_scoring_function.sql
psql -U shadowcheck -d shadowcheck -f sql/functions/fix_kismet_functions.sql
psql -U shadowcheck -d shadowcheck -f sql/migrations/migrate_network_tags_v2.sqlnpm startServer runs on http://localhost:3001
- Dashboard:
/ - Geospatial:
/geospatial.html - Networks:
/networks.html - Analytics:
/analytics.html - Surveillance:
/surveillance.html
GET /api/networks- All networksGET /api/threats/quick- Quick threat detectionGET /api/analytics/*- Analytics dataGET /api/networks/observations/:bssid- Network observations
See server.js for full endpoint documentation.
ShadowCheck includes multi-algorithm threat detection with model training and hyperparameter optimization.
POST /api/ml/train
Trains logistic regression model on all tagged networks in database.
Request:
curl -X POST http://localhost:3001/api/ml/trainResponse:
{
"ok": true,
"model": {
"type": "logistic_regression",
"accuracy": 0.92,
"precision": 0.88,
"recall": 0.95,
"f1": 0.91,
"rocAuc": 0.94
},
"trainingData": {
"totalNetworks": 45,
"threats": 18,
"falsePositives": 27
},
"message": "Model trained successfully"
}Errors:
400: Fewer than 10 tagged networks (minimum required)503: ML model module unavailable
GET /api/ml/status
Check model training status and tag statistics.
Test multiple algorithms with grid search and cross-validation:
pip install -r scripts/ml/requirements.txt
python3 scripts/ml/ml-iterate.pyTests Logistic Regression, Random Forest, and Gradient Boosting with hyperparameter tuning.
- Observation count (network detections)
- Unique days seen
- Geographic distribution (location clustering)
- Signal strength (RSSI max)
- Distance range from home location
- Behavioral flags (seen at home vs. away)
shadowcheck-static/
├── server.js # Express API server
├── public/ # Frontend static files
│ ├── index.html
│ ├── geospatial.html
│ ├── networks.html
│ ├── analytics.html
│ └── surveillance.html
├── scripts/ # Utility scripts
│ ├── enrichment/ # Address enrichment
│ ├── geocoding/ # Reverse geocoding
│ └── ml/ # ML utilities
├── sql/ # Database
│ ├── migrations/ # Schema migrations
│ └── functions/ # SQL functions
├── docs/ # Documentation
│ ├── architecture/ # System design docs
│ ├── features/ # Feature documentation
│ ├── guides/ # User guides
│ └── security/ # Security policies
└── data/ # Data files (not in git)
See docs/DIRECTORY_STRUCTURE.md for complete details.
Run dev server:
npm run devRun tests:
npm testKey environment variables (see .env.example):
DB_*- PostgreSQL connectionPORT- Server port (default: 3001)NODE_ENV- development or production
- Use strong database credentials in production
- Enable HTTPS/TLS at reverse proxy layer
- Restrict API access via rate limiting (already enabled)
- See
SECURITY.mdfor detailed security guidelines
Additional documentation is available in the docs directory. See docs/INDEX.md for navigation.
See CONTRIBUTING.md for code standards and workflow.
See CODE_OF_CONDUCT.md.
MIT. See LICENSE for details.