Client-side JS client