steps toward client-side version