Back to Projects

Full Stack / AI

Ragora

Knowledge-base platform that turns PDFs into searchable vector embeddings

Ragora project banner

Overview

Ragora is a full-stack knowledge-base platform that lets users upload PDFs, process their contents into searchable vector embeddings, and manage documents from a protected dashboard.

Its layered FastAPI backend routes requests through routers, services, and Prisma to PostgreSQL with pgvector. The document pipeline extracts text with pypdf, chunks it, generates embeddings with Sentence Transformers, and stores the results for search.

The Next.js and TypeScript frontend uses a custom dark design-token system, authentication context, protected routes, and live document-status tracking.

My Role

Built the full-stack platform across its FastAPI and PostgreSQL backend, vector-search document pipeline, and Next.js dashboard.

Tech Stack

PythonFastAPIPostgreSQLpgvectorPrismaSentence TransformersNext.jsTypeScriptTailwind CSS

Key Features

  • PDF upload and processing into searchable vector embeddings
  • Layered FastAPI backend with router, service, and Prisma data layers
  • pypdf extraction, chunking, Sentence Transformer embeddings, and pgvector storage
  • JWT authentication with bcrypt password hashing
  • Ownership-checked REST endpoints for documents and user data
  • Protected Next.js routes and a dashboard with live document-status tracking

Challenges & Solutions

  • Challenge

    Turning uploaded PDFs into content that could be searched accurately and efficiently.

    How I solved it

    Built a pipeline that extracts text with pypdf, splits it into chunks, generates embeddings with Sentence Transformers, and stores them in PostgreSQL through pgvector.

  • Challenge

    Keeping documents and API resources private to their owners.

    How I solved it

    Implemented JWT authentication, bcrypt password hashing, and ownership checks on REST endpoints before returning or modifying document data.

  • Challenge

    Making asynchronous document processing visible and understandable in the frontend.

    How I solved it

    Built protected dashboard views with auth context and live document-status tracking so users can follow each upload through processing.