browser-only reverse dictionary is an interesting constraint. do you pre-compute embeddings and store them locally, or are you doing something lighter? the semantic matching part is where i'd expect the tradeoff between what runs locally and what you'd get from a server-based approach
I first compute the embeddings to the dictionaries and store these. At query-time, when the user inputs the description, its embeddings are again computed by a lighter model. Then comparison happens between this and the stored ones