why are we doing this client-side?