Projects · Mobile
EV Şarj

Charging prices in Turkey are published by each operator separately. EV Şarj scrapes them, writes them once into Supabase, and lets a driver compare the station, the kWh price and the connector before they arrive. The current pull is 5,570 stations in 215 cities, of which 836 are 150 kW or faster.
Solutions
Three operators, one list
Eşarj, ZES and Trugo. Filter by operator, by 150 kW and above, by distance, and sort by price. Favorites stay on the device’s account rather than in a notes app.
Map, route, and the car you actually drive
Nearby stations and stations along a route are on the map. A garage holds the car and its battery capacity, and the fill cost is estimated from that capacity and the station’s kWh price.
Say something only when the price changes
The scraper does not write the same price again. When a tariff does move, the change is detected and a Telegram message goes out. The driver is not subscribed to a full refresh.
Process
01
Scrape the operator
A Python job reads Eşarj, ZES and Trugo. Each operator is its own scraper module, so a layout change on one site does not rewrite the other two.
02
Write only what changed
Stations and prices land in Supabase. An unchanged price is skipped. The diff is what the alert is built from.
03
The app reads the database
Flutter, on the phone and on the web, reads the list, the filters, the map and the garage. It does not scrape the operators itself.
04
Notify
A price change goes through the Telegram bot. The job can run as a daemon or in Docker on a schedule.
Technology
Python for the untrusted edge
The scrapers, the Supabase writer and the Telegram sender live in one backend package. main.py is the run. db_manager.py is the read and write. The bot is its own module.
Supabase as the only store the app knows
The mobile app never holds operator credentials. It reads stations and prices from Postgres through Supabase, including light and dark theme, the list, and the map.
Flutter for both screens
The same client is the phone app and the web app. The garage, the battery capacity and the fill estimate are client concerns on top of the station row.
- Flutter
- Python
- Supabase
- PostgreSQL
- Telegram Bot API