Skip to content
All work
02Search Infrastructure · Full-stack2026
1st place — Sudhee 2026 hackathon

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

Core
Next.jsReactFastAPIPython 3.11Firebase / Firestore
Infrastructure
DockerRedisHugging Face SpacesVercelBackground workerBlue-green deploy
AI / ML
FAISSTypesense (BM25)sentence-transformersONNX RuntimespaCyReranker

Key decisions

  1. 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.

  2. 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.

  3. 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.

  4. 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

Architectureflow
  1. 01

    Submission

    Candidates submit structured interview experiences

  2. 02

    Background worker

    spaCy NLP enrichment + sentence-transformers embeddings (ONNX)

    • spaCy
    • ONNX
  3. 03

    Indexes

    Semantic vectors and BM25 lexical index

    • FAISS
    • Typesense
  4. 04

    Hybrid search + rerank

    Blends semantic and lexical scores, then reranks

  5. 05

    Serving

    FastAPI in Docker on a Hugging Face Space

    • FastAPI
    • Redis
    • Firestore
  6. 06

    Frontend

    Next.js app on Vercel

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.