Biff and fulcro seems like they have a shot at this
Some good articles on this topic:
"Search, discovery and marketing"[1]
> Google is very good at giving you what you're looking for, but no good at all at telling you what you want to find, let alone things you didn't know you wanted.
"The Big Promise of Recommender Systems"[2] (2011)
> When we evaluate the current generation of recommender systems from the point of view of the “recommendee,” we find that most recommender systems serve the goals of the business instead of their users’ interests. Thus we believe that the big promise of recommender systems has yet to be fulfilled. We foresee a third wave of recommender systems that act directly on behalf of their users across a range of domains instead of acting as a sales assistant.
The algorithm currently is dead simple. Just collaborative filtering without explicitly taking into account content type. So it's naively cross-domain. Since the data set is still small, there's no need for matrix factorization. I recompute the whole matrix every hour and store it in memory. See [3] for the implementation (it only took 30 LOC). That's a little out-of-date but the general approach hasn't changed.
For the tech stack, I'm using a Clojure web framework + deployment solution that I made.[4] It's like a self-hosted version of Firebase (I'm running it on DigitalOcean). See [5].
[1] https://www.ben-evans.com/benedictevans/2015/6/24/search-dis...
[2] https://www.aaai.org/ojs/index.php/aimagazine/article/view/2...
[3] https://findka.com/blog/rec-sys-in-30-lines/
They're marketing it in the OLAP space right now, but at some point I'd like to try integrating it with a web framework I've been working on.[1][2] It'd be a more powerful version of firebase's real-time queries. Firebase's queries don't let you do joins; you basically can just filter over a single table at a time. So you have to listen to multiple queries and then join the results by hand on the frontend. Doesn't work if you're aggregating over a set of entities that's too large to send to the client (or that the client isn't authorized to see).
[1] https://findka.com/blog/migrating-to-biff/ [2] https://github.com/jacobobryant/biff