reorganized backend to send all the data upfront, and all filtering is done on client-side