first client-side stuff