Client-side heat mapping