ResearchBridge
RAG system matching pre-meds to opportunities. In progress.

ResearchBridge matches pre-med students to research, volunteer, and clinical opportunities by meaning rather than keywords. It embeds a student’s background and each opportunity, retrieves the closest matches, and writes a short explanation of why each one fits. When nothing is a good match, it says so instead of forcing a weak one.
The stack is a FastAPI backend with PostgreSQL and pgvector for vector search, embeddings for the matching, and an ingestion pipeline that pulls and normalizes opportunity listings. Most of the real work turned out to be in that data layer, where sources are messy and extractions fail quietly.
The part I cared most about is trust. A confident but wrong match is worse than no match, so every explanation is grounded in the retrieved opportunity’s own text, and the system refuses when the retrieval support is weak rather than inventing a reason to justify a match.
To check whether any of that actually works, I built an evaluation layer that measures retrieval hit rate, refusal accuracy, and faithfulness (whether an explanation stays true to its source). Writing it surfaced something I did not expect: the faithfulness score was rating answers as faithful when they were grounded in the wrong source. Faithful and true were two different things, and the eval had to measure them separately.
Status: in progress. Retrieval, grounding, honest refusal, and the evaluation framework are built. Next is a cleaner three-category verdict for the faithfulness check and a small public demo.