Skim

Category

Real-Time Full-Stack Web Application

/

Year

/

Full-stack RAG application for conversational Q&A over uploaded PDFs using React, TypeScript, Gemini, Qdrant, and MongoDB.

SKIM is a full-stack RAG application that lets users have conversations with their PDF documents.

I built the application end to end, from the React and TypeScript interface to the Express API and AI pipeline. Users can upload documents, ask questions, and receive answers grounded in the content of those documents.

From PDF to Answer

The core of SKIM is a complete Retrieval-Augmented Generation pipeline.

When a PDF is uploaded, the application extracts its text, breaks it into chunks, generates embeddings, and stores those vectors in Qdrant for semantic retrieval.

When a user asks a question, the query is converted into an embedding and used to find the most relevant document chunks. That retrieved context is then passed to Google Gemini to generate a grounded response.

Built as a Full-Stack Application

The frontend is built with React 19, TypeScript, Vite, Tailwind CSS, and shadcn/ui.

The backend uses Node.js, Express 5, Zod, and REST APIs, with MongoDB handling application data and Qdrant handling vector search.

I also separated the backend into routes, services, models, validators, middleware, and configuration, keeping the RAG logic independent from HTTP concerns and making the application easier to extend.

Beyond the LLM Call

The interesting part of SKIM wasn't simply connecting an LLM to a chat interface. The project involved building the complete flow around it, including document ingestion, semantic retrieval, context construction, API validation, rate limiting, persistence, and error-safe request handling.

The result is a working AI application where the model answers from the user's uploaded documents rather than relying only on its pretrained knowledge.

SKIM was an exercise in building an AI product end to end.

It gave me hands-on experience working across React, backend APIs, vector databases, embeddings, semantic search, and LLM integration, while thinking about how the individual pieces fit together into a usable product.