(Case study)

Research Nest.

Student research archive & analytics platform - developed by Derek Muriuki using Python and Flask.

June 2025Python · Flask · SQLAlchemy · JavaScriptTeam project
ResearchNest dashboard showing the student research archive

The
problem

Student research projects and past exam papers usually end up scattered across email threads, shared drives and individual laptops. Once a class graduates, the work is effectively lost - and nobody can see what has already been researched or which material students actually use.

ResearchNest gives a department one searchable archive for that work. Students upload their papers, administrators review and approve them, and everything is organised by department and year so it can be found again. An analytics dashboard shows what is being uploaded and downloaded, and a question bank turns past exam papers into reusable, categorised questions.

View on GitHub

What it
does

Research Archive

Single and bulk PDF upload with automatic metadata and keyword extraction, organised by department and year.

Review Workflow

Admins approve or reject submissions and manage users and roles before papers go public.

Search & Download

Search the archive and download papers, with every download logged for reporting.

Analytics Dashboard

Charts for papers by department, uploads and downloads by month, and the most common keywords.

Question Bank

Extracts questions, marks and question types from past exam PDFs, with progress tracking, and files them by subject, unit and topic.

Paper Generation

Builds new question papers from the bank by subject and marks, exported as branded PDFs.

How it's
made

Backend

  • Python with Flask
  • SQLAlchemy models with Flask-Migrate / Alembic migrations
  • Flask-Login authentication and Flask-WTF forms, with role-based admin access
  • JSON status endpoints for tracking question-extraction progress

Document processing

  • PyMuPDF for PDF text and metadata extraction
  • NLTK and scikit-learn (TF-IDF) for keyword extraction and question matching
  • ReportLab for generating branded PDF question papers

Frontend & data

  • HTML, CSS and JavaScript templates
  • Chart.js analytics dashboard fed by JSON endpoints
  • SQLite in development, PostgreSQL-ready

Hard
parts

Pulling questions out of real exam papers

Past papers come in inconsistent layouts - numbered and lettered sub-questions, marks in brackets, tables and formulas mixed into the text.

Solution: A page-by-page extractor built on PyMuPDF that tracks sections, matches question patterns, reads marks, detects question types and flags formulas, diagrams and tables.

Long-running processing

Extracting a large paper takes long enough that users assumed the upload had failed.

Solution: Extraction reports progress page by page to a status endpoint, and a status page polls it so users can watch the job run.

Let's buildsomething.

Start a project →