Inspiration

Years in the Tesla ecosystem — diagnostics, charging, road trips — taught me the one thing Tesla got right: the car, battery, and trip planner are one system. Every other EV driver juggles apps that don't know their car. The fix isn't another route planner; it's making the vehicle itself something an AI can use.

What it does

Type "Get me to Nashville, keep me above 15%, minimize charging time." Gemini calls EVLink's tools — get_vehicle_state, then plan_ev_trip — reading the connected vehicle (simulated for this demo, disclosed on screen). A deterministic engine pulls the live OSRM route and live US DOE AFDC charger data, then computes the plan: 246.5 mi, one stop at Flying J Resaca (16%→80%, 30 min, +49.6 kWh), arrive Nashville at 16%. Gemini explains the itinerary; it never invents a number.

How we built it

Python/FastAPI + one static page with a Leaflet route map. Gemini 3.6 Flash with genuine function calling — exactly two tools; every call the model makes executes against the backend and is shown live in the UI. Chargers from the US DOE Alternative Fuels Data Center (USDOT NTAD mirror), routing via OSRM, Smartcar test-mode integration with an honest static-profile fallback. Greedy corridor optimizer with every assumption rendered on screen: 100 kW effective rate, 10% safety margin, 80% ceiling, CCS-native filtering.

Challenges

Keeping the AI honest — the architecture forbids Gemini from computing range, distance, or charge time. Also: mid-build, gemini-2.5-flash turned out to be sunset for new API keys (404), diagnosed and swapped live under deadline.

Accomplishments

11/11 unit tests including the ATL→Nashville optimizer spec; genuine tool calling visible in the UI; built solo, entirely tonight.

What we learned

A two-tool surface that works beats a twenty-tool surface that impresses.

What's next

Adapter-aware connector routing (NACS↔CCS↔CHAdeMO), a per-driver efficiency model from real consumption data, real vehicles via Smartcar production, and an MCP server so Claude and other agents can use the same tool surface.

Built With

  • claude
  • code
Share this project:

Updates