Firefox’s Pocket recommendations took a good approach. The browser downloads a big daily file with “potential recommendations”, then filters it at the client side.
The big downside was that, because it was turned on by default, a whole bunch of people who didn’t actually want it had it foisted upon them, so it got a very bad reputation right out the gate. Right algorithm, bad execution.