Building an EV Charging Reimbursement App for Siemens
3 min read
Building an EV Charging Reimbursement App for Siemens
At Siemens, employees who drive electric work vehicles often charge them at home. The problem? Figuring out how much to get reimbursed shouldn't require a spreadsheet and a calculator every billing cycle.
I built the EV Reimbursement App to solve that. It's a client-side web app that handles kWh tracking, cost calculations, and professional report generation — all without touching a server.
The Problem
Employees need to log daily kWh usage, apply their utility's rate structure, and submit clean documentation for reimbursement. Most were doing this manually with spreadsheets. It was tedious, error-prone, and nobody enjoyed it.
How It Works
The app lets you enter daily charging data manually or import it from a CSV. It supports tiered billing — where the first N kWh are charged at one rate and the remaining at a higher tier — which matches how most utility companies actually bill.
From there, it calculates totals automatically and generates either an Excel breakdown or a formatted PDF report ready to submit.
A few features that made a real difference:
- Multi-profile support — multiple users on the same device can maintain separate datasets
- Tiered billing calculations — handles real-world utility rate structures
- CSV import with validation — pull in meter readings without manual entry
- PDF and Excel export — professional reports with one click
- Dashboard with charts — visual summary of usage and costs over time
Privacy First
One thing I was firm on: no data leaves the browser. Everything is stored in localStorage. No accounts, no servers, no tracking. Employees are entering personal utility data — keeping that local was non-negotiable.
Tech Stack
I kept this intentionally simple — vanilla HTML, CSS, and JavaScript with Bootstrap for layout. Chart.js handles the visualizations, and jsPDF plus XLSX.js power the exports. No build step, no framework overhead. Open index.html and it works.
// Tiered billing calculation
const tier1Cost = Math.min(kWh, tier1Threshold) * tier1Rate;
const tier2Cost = Math.max(0, kWh - tier1Threshold) * tier2Rate;
const totalCost = tier1Cost + tier2Cost;What I Learned
Sometimes the right tool is the simplest one. A static client-side app with no backend was the perfect fit here — easy to deploy, easy to maintain, and employees trust it because their data stays on their machine. The app is currently on version 1.10.0 and has gone through a lot of iteration based on real user feedback, from accessibility improvements to timezone bug fixes.
If you're solving a similar internal tooling problem, don't overthink the stack. Start with the user's actual workflow and build just enough to make it painless.