ANDROIDANDROID APP

EVSmartCharge

Three charger databases. One privacy-first Android app. Your car's dashboard included.

AndroidKotlinJetpack ComposeFastAPIPostgreSQLRedisFirebase AuthAndroid AutoRailway
EVSmartCharge

Android · Kotlin · Jetpack Compose · FastAPI

0
GPS coords stored
0
Charger data sources
0
Android Auto screens
0
FastAPI backend

OVERVIEW

|

EV charging apps typically require transmitting raw GPS coordinates to a server for charger lookups, building a permanent location history on a third-party server. Existing apps were also single-platform, with no car dashboard integration for the Android Auto display.

|

An Android app backed by a FastAPI Python backend on Railway. GPS is resolved to a postal code on-device; only the postal code is transmitted. The FastAPI backend aggregates charger data concurrently from three independent sources (Open Charge Map, National Charge Point Registry, OpenStreetMap Overpass), scores chargers with a weighted algorithm, and returns an ordered list. Four Android Auto screens provide a glanceable car dashboard interface.

|

A GDPR-compliant EV charging assistant with zero GPS coordinates stored server-side, real-time vehicle data via Smartcar, Android Auto integration, and an HMRC mileage export for business journeys.

KEY FEATURES

Privacy-First Location Model

GPS is resolved to a UK postal code on-device using the Android Geocoder. Only the postal code is transmitted, raw coordinates are discarded immediately and never logged. GPS is used locally for navigation handoff only.

TECH STACK

Tap to see the reasoning

BUILD TIMELINE

Phase 01

Privacy Architecture & FastAPI Backend

Designed the postal-code-only data model and on-device GPS resolution flow. Built the FastAPI backend on Railway with PostgreSQL + Redis, implementing the three-source charger aggregation and scoring algorithm.

CHALLENGES & SOLUTIONS

Smartcar's OAuth redirect uses a custom URI scheme requiring correct AndroidManifest intent filters. Chrome Custom Tabs handles the OAuth step; a BroadcastReceiver captures the redirect URI. This keeps the flow within the app rather than dumping the user into a full browser window.

The entertainment screen (YouTube and Netflix launchers) is only shown when the app detects the vehicle is parked and plugged in via the Smartcar charging status. This prevents entertainment controls from appearing on the car display while driving.

LET'S BUILD SOMETHING TOGETHER

I'm always open to discussing new projects, partnerships, or just a good idea.