Crazy idea: provide a search box, and when the user hits "enter", POST the data to the backend, which queries the database, and then returns the relevant results.
1. Debounce!
2. Use WebSockets to minimize unnecessary round trips
3. Cache previous results and use them when the input is a superstring of a previous input (e.g. results for "Android mobile dev" will always be a subset of the results for "mobile dev")