client-side build