A self-hosted platform for running EV charge points end to end — the operator dashboard, the driver's charging app, a portal for whoever hosts the charger, and roaming to other networks — all backed by one shared database and five focused services.
Each service fronts a different audience and protocol, but they all read and write the same MongoDB collections directly — no internal message bus, no duplicated state. A few calls cross service boundaries where one audience's action has to reach the charge point itself.
%%{init: {
"theme":"base",
"themeVariables": {
"background":"#11150f",
"primaryColor":"#12261c",
"primaryTextColor":"#eef1ea",
"primaryBorderColor":"#3fd694",
"secondaryColor":"#171b14",
"tertiaryColor":"#171b14",
"lineColor":"#aeb5a6",
"textColor":"#eef1ea",
"fontFamily":"IBM Plex Mono, monospace",
"fontSize":"15px"
},
"flowchart": { "htmlLabels": false, "curve": "basis", "nodeSpacing": 55, "rankSpacing": 90, "padding": 14 }
}}%%
flowchart LR
subgraph actors[ ]
direction TB
CP["⚡ Charge Points
physical hardware"]
BR["🌐 Browsers
admin · driver · owner"]
RP["🤝 Roaming Partners
other OCPI networks"]
end
subgraph services[ ]
direction TB
WS["ocpp_ws
WebSocket + control API"]
DB["dashboard
Flask + Jinja2"]
FA["fastapi
async REST + JWT"]
OC["ocpi
CPO + eMSP"]
end
Mongo[("MongoDB
shared by all 5 services")]
CP -- "OCPP 1.6 / 2.0.1" --> WS
BR -- "pages" --> DB
BR -- "driver actions" --> FA
RP <-- "OCPI 2.2.1" --> OC
DB -.->|control API| WS
OC -.->|control API| WS
FA -.->|roaming bridge| OC
WS --> Mongo
DB --> Mongo
FA --> Mongo
OC --> Mongo
classDef svc fill:#12261c,stroke:#3fd694,color:#eef1ea
classDef actor fill:#171b14,stroke:#232922,color:#eef1ea
classDef store fill:#171b14,stroke:#3fd694,color:#eef1ea
class WS,DB,FA,OC svc
class CP,BR,RP actor
class Mongo store
Live captures from a running instance — real sessions, real roaming partners, real charge points, not mockups.
Live revenue, active charging sessions, and fault counts on one screen — the first thing an operator checks each morning.
Scan-to-charge: station, connector type, live rate and electrical specs, before a driver ever taps Start.
When the home network has nothing close by, partner-network stations appear automatically, grouped by station.
Three live roaming networks connected via the OCPI 2.2.1 Credentials handshake — issue or redeem a token from one page.
A mobile dashboard for whoever hosts the charger — live status, per-connector pricing, and a one-tap password reset.
A public, no-login walkthrough that takes a charge point from unboxing to its first authenticated connection.
Open live →A standalone OCPP 1.6 charge-point simulator for testing against any target — local stack or production — no hardware required.
Most OCPP backends stop at "connect a charger." This one also covers who's charging, who owns the charger, and who else's network it can roam onto.
Tell us your site, your charger count, and your timeline — Simplico builds and operates platforms like this one for EV charging operators across Thailand and SEA.
Bangkok-based · Thai & English · 48-hour scoped proposal turnaround