System Architecture
ScannerSky uses a hub-and-spoke model.
- Hub: Django + PostgreSQL central server
- Spokes: node scanners that send scan events
Node Types
- Windows bridge node: local PC/SC reader to browser over WebSocket
- Raspberry Pi node: scanner service with optional admin API for remote actions
- ESP32 node: planned lightweight Wi-Fi scanner
Core Communication
- Scan submit: POST /api/scan/
- Card lookup:
GET /api/info/{card_number}/ - Device heartbeat: POST /api/devicelogs/
- Device status: GET /api/devices/status/
Server Responsibilities
- Persist people, devices, records, class and event attendance data
- Expose API endpoints for node and admin workflows
- Provide admin interface for records, attendance, and device operations
- Enforce role-based access controls, including custom global attendance visibility permissions
- Track user login events (via
user_logged_insignal) and user page visits (viaUserVisitationMiddleware) for audit trail
For permission and admin behavior details, see Admin and Commands and Database Schema.