Skip to content
Case study · CHARGE TECH · In production since Jan 2025

We built and run the OCPP brain behind 40+ EV chargers

PlugEV, branded CHARGE TECH, is a production OCPP 1.6-J charging management system for an Indian operator. One system for multi-brand hardware, UPI payments, GST invoicing, and billing that holds up at 2 AM.

40+
chargers live
2
Indian cities
99.7%
uptime in production
16 wks
to first build

The problem

An EV charging operator needed one system to run a network built from different hardware brands, each of which implements OCPP a little differently. The chargers had to take Indian payments over UPI, issue GST invoices, and price in INR. None of that mattered without the part that is easy to say and hard to do: a car charging at 2 AM still has to bill correctly.

Off-the-shelf platforms either assumed one vendor's hardware or skipped the Indian payment and tax reality entirely. So we built the whole thing, and we still operate it.

What we built

NestJS WebSocket gateway

A NestJS gateway handling connection routing, heartbeats, and OCPP 1.6-J over WebSocket. A per-vendor quirks file sat in the repo from day one, because every hardware brand implements the spec a little differently.

NestJS admin + billing

The NestJS modules behind the operator admin, pricing rules, invoicing, and the account model. Only the gateway talks to chargers, so billing never touches a raw charger socket.

RFID lifecycle manager

A custom card manager with an offline-capable fallback. Per-card limits and per-station permissions mean a charger still authenticates a driver even when the API gateway is unreachable.

Metered billing in paise

Per-session, time-based, and per-kWh pricing rated continuously into paise and invoiced at cycle close. GST invoices generate automatically, priced in INR.

Operator dashboard

A real-time charger map, live session telemetry, revenue analytics, and a fleet sub-account hierarchy so an operator can manage business customers under one roof.

WhatsApp notifications

Session start and stop alerts and low-balance warnings go out over the WhatsApp Business API, which is where Indian drivers actually read their messages.

How the architecture fits together

Chargers speak OCPP 1.6-J, JSON over WebSocket, to a NestJS gateway. That gateway routes connections, keeps heartbeats alive, and smooths over each vendor's quirks before anything reaches the rest of the system, so the admin and billing modules, also in NestJS and TypeScript, never deal with the raw socket.

Postgres holds the data, and Redis carries session state and idempotency keys so a retried request never double-bills. Razorpay handles UPI, cards, and Autopay. The whole stack runs on CloudNX, our own India-region cloud platform.

NestJS (OCPP WebSocket gateway)NestJS (admin + billing)TypeScriptPostgreSQLRedisOCPP 1.6-JRazorpay (UPI, cards, Autopay)WhatsApp Business APICloudNX Mumbai

The billing has to be right

Sessions are rated continuously into paise across three models: per-session, time-based, and per-kWh metered. At cycle close the system invoices what was actually used and generates a GST invoice automatically. Idempotency keys in Redis mean a network retry or a reconnecting charger never charges a driver twice, which is exactly the failure you cannot afford on an unattended overnight session.

Results

PlugEV was built over 16 weeks and has run in production since January 2025. In that time it has held 99.7% uptime. The one rough patch, a week at 99.1%, came from a Razorpay outage in Q1 2026 rather than our own stack. The network now covers 40+ chargers across 2 Indian cities.

Not every week was clean. Early on, a charger time-sync bug took a full week to track down. It is the kind of problem you only find in production, and finding it is part of why we still run the system rather than handing it over and walking away.

What it costs to build and run

We are honest about numbers because operators need them to plan. These are ours, from this build.

16 weeks
build time
Rs 11.5 L
all-in build cost
Rs 18k/mo
hosting
Rs 80k/mo
maintenance

Rolled together, the network runs at roughly Rs 26,000 per charger per year all-in.

Where it goes next

OCPP 2.0.1 with certificate-based security is mapped as the next step: GetCertificateStatus behind an OCSP proxy, signed firmware updates, and the SignCertificate, CertificateSigned, and InstallCertificate flows. Because only the gateway talks to chargers, the admin and billing side stays insulated from that added complexity as it lands.

Frequently asked questions

Which OCPP version does PlugEV run?

PlugEV runs on OCPP 1.6-J, the JSON-over-WebSocket variant that almost every charger deployed in India speaks today. OCPP 2.0.1 with certificate-based security is mapped as the next step, and we treat it as a separate piece of work rather than something you get by accident.

How does it handle chargers from different hardware brands?

The gateway normalises each vendor's OCPP behaviour through a per-vendor quirks file that has been in the repo since day one. Real chargers rarely implement the spec cleanly, so when we onboard a new brand we validate its quirks against that layer before it goes live.

How do Indian payments and GST invoicing work?

Payments run through Razorpay for UPI, cards, and Autopay. Sessions are rated continuously into paise across per-session, time-based, and per-kWh pricing, then invoiced at cycle close with GST invoices generated automatically in INR.

What is the uptime like in production?

In production the system has held 99.7% uptime. The worst week dropped to 99.1% during a Razorpay outage in Q1 2026, which sat outside our own stack. A car charging at 2 AM still needs to bill correctly, and that reliability bar shaped a lot of the design.

Can you build one for another EV charging operator?

Yes. We built and operate PlugEV ourselves, so the OCPP integration, billing logic, and RFID lifecycle are patterns we can carry into a new network. New charger brands add validation time, and we scope hardware and billing needs on a short discovery call before quoting.

OCPP 1.6-J or 2.0.1, which should we start on?

For a network of chargers shipping today, 1.6-J is almost always the right starting point because that is what the hardware speaks. 2.0.1 brings certificate-based security like SignCertificate, CertificateSigned, InstallCertificate, and GetCertificateStatus through an OCSP proxy, plus signed firmware updates. We add it when the hardware and the threat model justify it.

What this project demonstrates

The services below cite this build as proof. If you need one of them, this is what it looks like when we deliver it.

Running an EV charging network in India?

We have already solved the messy OCPP, payments, and billing problems on PlugEV. See the product page, or talk to us about building your own CSMS.

Get a Fixed-Price Proposal