client-side models