Slake designs and ships search systems that cut "zero-result" screens, keep responses under 100ms, and reduce infra spend—deployed to production at ScoutLocal handling real-time query loads.
Built For
Needing faster search/recommendations without hiring a full-time specialist, so users find what they need in 1–2 taps.
Dealing with overlapping entities (merchants, events) and heavy read-traffic.
Trying to scale past MVP without letting technical debt in search crush your velocity.
The Context: ScoutLocal needed users to find the right venue in 1–2 taps, from vague queries like "vibey coffee spot," without hiring a full-time search team or blowing up infra costs.
Standard SQL search fails on semantic queries. Users don't search for "Category: Coffee"; they search for "espresso near me".
Retaining user engagement on mobile requires sub-100ms interaction times. Standard "Load -> Wait -> Render" patterns cause bounce rates to spike.
The solution is a Hybrid Search Engine that combines the semantic power of Vector Search (Azure OpenAI) with the precision of SQL filters.
Result: Users get relevant results from messy queries, while your team keeps strict control over filters, joins, and analytics.
The Problem: Mobile maps typically drain battery and spike API costs by fetching data on every micro-movement.
Result: lower map-related API costs and smoother scrolling on mid-range devices, without rewriting your entire stack.
In the real world, entities rarely fit into neat boxes. A "Coffee Shop" might also be a "Coffee Roaster" (Maker). Instead of creating three separate accounts, we implemented a Polymorphic Schema.
Performance isn't just about server response times; it's about Perceived Latency. The solution employs an Optimistic UI pattern for high-frequency user actions.
This keeps the interface feeling instant even when APIs are under load.
Below are the patterns used to keep vectors and entities in sync, avoiding "ghost" records and race conditions.
await prisma.$transaction(async (tx) => {
// 1. Reserve Entity ID (Atomic)
const record = await tx.embedding.create({ ... });
// 2. External Vector Gen (Rollback on Fail)
const vector = await openai.embeddings.create({ input: text });
await tx.embedding.update({ ... });
});
const toggleSave = useCallback(async (id) => {
// 1. Zero Latency Update
setSavedIds((prev) => new Set(prev).add(id));
try {
await api.post(`/user/saved/${id}`);
} catch (err) {
// 2. Self-Healing Rollback
setSavedIds((prev) => { ... });
toast.error("Sync failed");
}
}, []);
Want this level of engineering on your product?