My Photo
Hello
Waving Hand Emoji

I'm Peter Klingelhofer

A senior backend and data engineer.

At Energy Vault I build the platform and data pipelines that quantify grid-scale energy storage. Open-source work in solar simulation, grid carbon data and carbon-aware CI.

About Me

Senior software engineer focused on building the data infrastructure behind climate and clean-energy work. I care most about systems that hold up over time: clean architecture, durable data models, and observability over quick shortcuts.

At Energy Vault, where I'm a senior software engineer, I build the asset-management platform and the data pipelines behind grid-scale energy storage: a Node.js, Fastify and GraphQL backend on PostgreSQL, Python ETL orchestrated by Dagster on Kubernetes over S3 and Athena, real-time analytics over market, asset and financial data, and the accounting of carbon emissions avoided across the deployed portfolio.

Before software, I earned a Master's in Ecology & Evolutionary Biology and spent six years in environmental regulation, assessing the impact of operations on soil, water, and air. Environmental work has been the throughline of my whole career, and it is why I want to keep building for sustainability, renewable energy, and mission-driven organizations.

That path has also made me a strong communicator across audiences. From explaining findings to the public and operators in the field to translating between product, data, and engineering teams today, I am at my best bridging technical and non-technical stakeholders.

Outside of work, I've played saxophone for over two decades and have a long background in digital signal processing, including a piece that aired on NPR.

Me

Skills

Python logo Python
PostgreSQL database logo PostgreSQL
TypeScript programming language logo TypeScript
Node.js logo Node.js
Amazon Web Services logo Amazon Web Services
Amazon Web Services logo Amazon Bedrock
Model Context Protocol logo Model Context Protocol
Kubernetes logo Kubernetes
Dagster logo Dagster
FastAPI logo FastAPI
WebAssembly logo WebAssembly
Fastify logo Fastify

Projects

Climate / Simulation

Agrivoltaic Garden Planner

Plan a vegetable garden and the solar panels above it, together, for a real address. Simulates how much light an array leaves on the ground, then ranks crops against what it measures. The solar physics (SPA position, Perez transposition, DIRINT decomposition, sky-dome view factors, bifacial gain) is a dependency-free Rust crate compiled to WebAssembly, checked against NREL and pvlib, running over live Open-Meteo, PVGIS, NSRDB, NASA POWER and SoilGrids data. WebGPU, WebGL2 and CPU backends behind one interface. Every quantitative claim resolves to a source in a 345-source corpus that fails the build if a citekey is missing.

TypeScriptRustWebAssemblyReactthree.jsWebGPUWebGL2Web WorkersCloudflare WorkersPlaywright
Agrivoltaic Garden Planner: ten planted beds under three rows of panels in Amherst, Massachusetts, the whole-year light map on the ground beside the light step, which lists each bed's share of open sky and its daily light integral
Climate / Backend

Carbon Lens

Carbon-intensity data API: live gCO₂/kWh for cloud regions from eight grid-operator integrations (UK, EIA, OpenElectricity/AEMO, IESO/AESO, Taipower, GridStatus, ENTSO-E, Electricity Maps), each reading labeled with how it was produced. On top: carbon-aware region routing and scheduling, GHG-Protocol Scope 2 and 3 reporting for CSRD and ESG, and a 49-source citation corpus served over the API. A published audit traced fourteen of its own claims to primary sources and led to seven fixes, including one for a UK renewable estimate that ran 46.9 percentage points high. It also caught a hollow feed reporting 0 gCO₂/kWh, the best possible score, which was winning that zone every routing decision. Python and FastAPI backend, React dashboard, Docker and CI.

PythonFastAPIReactTypeScriptDockerCI/CD
Carbon Lens dashboard screenshot
Climate / DevOps

Carbon-Aware Dispatcher

Carbon-aware CI/CD: schedules pipeline runs for when the grid is cleanest. One drop-in workflow file, 16 grid-data providers, 196 zones (126 on live grid-operator feeds), templates for GitHub Actions, GitLab, Bitbucket, and CircleCI. Its validation report measures the tool against real grid data and finds that 14 to 18% of deferrals landed on a dirtier grid. A self-audit cut its CI job power assumption from 50 W, about four times too high, to a sourced 13 W with a 6 to 25 W error bar.

PythonGitHub ActionsGitLab CICircleCIBitbucket Pipelines
Carbon-Aware Dispatcher logo
Wellness / Desktop

Exhale App

Cross-platform breathwork screen-overlay app. Published on the Mac App Store, Microsoft Store, and Snap Store. Originally Swift (macOS), rewritten as a multi-platform Rust workspace with a custom wgpu/WGSL GPU renderer. Each overlay window gets its own render thread and wgpu device, so its frames don't wait on the main thread, and the frame rate drops from 24 to 1 fps when there's nothing to animate. In a live A/B against the Swift build, steady-state CPU fell 36%, from 4.95% to 3.19% of one core.

RustSwiftwgpu/WGSLmacOSWindowsLinuxMac App StoreMicrosoft StoreSnap Store
Exhale App: a translucent breathing circle overlaid on a macOS desktop
Music / Full stack

Mirlo

Open-source, artist-owned music platform: an Express, Prisma and PostgreSQL API with BullMQ jobs, a React client, and a React Native app. Contributor since 2024 with 68 merged pull requests across the web platform and the mobile app: the in-app Stripe subscription checkout, admin-configured Stripe keys and disconnected-account recovery, label roster and bulk pricing tools, and the app's Android build and App Store release. Much of Mirlo's code began in Resonate's API and UI, where this work started in 2022.

TypeScriptNode.jsExpressPrismaPostgreSQLStripeReactReact Native
Mirlo: the Constellation Records label page on mirlo.space, with its grid of releases
Security / Backend

uwebsockets.js-helmet

Zero-dependency security middleware for uWebSockets.js, bringing Helmet-style hardened HTTP headers to the high-performance uWebSockets server.

TypeScriptNode.jsuWebSockets.jsSecurity
uwebsockets.js-helmet logo
Music / DSP

Bebop

A learning tool for music theory: pitch and chord analysis with jazz-theory-backed suggestions for increasing harmonic complexity. Ensemble chord recognition (six sources, consensus vote), then tiered reharmonization (7ths, ii-Vs, tritone subs, Coltrane changes) derived from deterministic theory, with every substitution logged and its reason written out. Renders voiced MIDI, audio and a score view that marks each added note in red.

PythonRustPyO3C++SwiftAudio UnitMIDI
Bebop score view: a grand staff with the chart's chords in black and bebop's added notes in red, each change explained under the line
Games / Realtime

Exquisite Text

A collaborative writing game, based on the surrealist art game from the early 1900s. Lead contributor, with the most commits on the repo: the React Native mobile app, drawing mode, and the TypeScript, Vite and Express upgrades.

Progressive Web AppMobile AppReactReact NativeTypeScriptSocket.io
Exquisite Text: one player has finished a line and can pass the turn, while the other waits as a friend writes

Contact

My inbox is always open. Whether you have a question or just want to say hi, please don't hesitate to send me a message!