HireLog — Interview Search
Hybrid interview-experience search — FAISS vectors, Typesense BM25, and reranking, on a FastAPI backend.
Impact
Hybrid
FAISS + Typesense + reranker
1st place
Sudhee 2026 hackathon
Blue-green
DNS-weighted production cutover
Technology
Key decisions
- 01
Hybrid search, not vectors alone
FAISS semantic search misses exact terms like company names and specific tech; Typesense BM25 misses paraphrases. Blending both scores and then reranking gets the meaning and the keywords.
- 02
A background worker for indexing
NLP enrichment and embedding are too slow for the write path, so submissions return immediately and a worker enqueues and backfills the search index separately.
- 03
ONNX-optimised embeddings
Running sentence-transformers through ONNX Runtime keeps embedding fast enough to serve search in the request path on the modest CPU of a Hugging Face Space.
- 04
Backend on a Hugging Face Docker Space
Packaging FastAPI as a Docker Space gives the model the CPU and memory it needs, deployed and rolled out independently from the Vercel frontend with a DNS-weighted blue-green cutover.
Architecture
- 01
Submission
Candidates submit structured interview experiences
- 02
Background worker
spaCy NLP enrichment + sentence-transformers embeddings (ONNX)
- spaCy
- ONNX
- 03
Indexes
Semantic vectors and BM25 lexical index
- FAISS
- Typesense
- 04
Hybrid search + rerank
Blends semantic and lexical scores, then reranks
- 05
Serving
FastAPI in Docker on a Hugging Face Space
- FastAPI
- Redis
- Firestore
- 06
Frontend
Next.js app on Vercel
Scroll the diagram horizontally to explore →
The problem
Interview experiences are scattered across group chats and docs. Keyword search misses how a question was actually phrased, and there's no structured way to study what came up at a given company.
How it works
Candidates submit structured interview experiences. A background worker runs spaCy NLP enrichment (questions, topics, a summary) and embeds each one with a sentence-transformers model, ONNX-optimised for speed. Search is hybrid: FAISS returns semantic matches, Typesense returns BM25 lexical matches, and a reranking pass blends and orders them. The FastAPI backend runs in a Docker container on a Hugging Face Space with Redis caching and Firestore storage; the Next.js frontend is on Vercel.