client: save progress