client-side logic