Advanced Distributed Energy Resource (DER) Management & Real-time Visualization
NordicPulse is a high-performance, Senior-level demonstration of a localized energy monitoring platform. It manages 1,000+ concurrent IoT devices (Solar Panels, EV Chargers, Heat Pumps) across Finland using a highly concurrent Rust backend and a modern, minimalist Next.js frontend.
Unlike simple random simulators, NordicPulse implements a stateful physics engine:
- Solar Panels: Accurate day/night cycles using Sine waves adjusted by cloud noise and seasonal efficiency.
- EV Chargers: Session-based state machine simulating real charging behaviors and idle states.
- Heat Pumps & Saunas: Thermal inertia logic with smoothing (Lerp) and Brownian motion for realistic temperature drifts.
Devices are distributed using Population-weighted Gaussian Clusters rather than uniform random boxes:
- Concentrated hubs in Helsinki, Tampere/Turku, and Oulu.
- Realistic "Rural North" spread for heating devices.
- Geofencing to prevent "Ocean spillover" in coordinates.
- Database Hardening: Optimized TimescaleDB schema with B-tree indexes on
device_idfor O(1) KPI retrieval. - Retention Policies: Native TimescaleDB background jobs to prune data older than 7 days, ensuring cost-efficiency and performance.
- Rust Unit Testing: Physics logic and state transitions verified with
cargo test. - Modern Aesthetics: Bespoke Nordic Minimalist theme (#f0eee6, #d97757, #141413) for a premium, specialized UI.
graph TD
subgraph "IoT Field Layer (Simulation)"
S["Simulator Service (Rust)"] -- "Tokio Spawns 1k+ Tasks" --> D["Stateful Devices"]
D -- "MQTT Telemetry" --> M["Mosquitto Broker"]
end
subgraph "Backend Ingestion"
M -- "Async Stream" --> I["Ingestor (Rust)"]
I -- "Buffered Batching" --> DB[("TimescaleDB")]
end
subgraph "Presentation Layer (Next.js 15)"
DB -- "Aggregated SQL" --> W["Sever Actions"]
W -- "SWR Polling" --> UI["Dashboard"]
UI -- "Deck.GL + Recharts" --> VISUALS["Live Map & Trends"]
end
- Rust (1.80+ / Edition 2024 ready)
- Docker & Docker Compose
- Node.js (LTS)
- Infrastructure:
docker-compose up -d
- Rust Backend:
cargo run --bin simulator cargo run --bin ingestor
- Frontend:
cd web && npm run dev
