(Case study)
Research Nest.
Student research archive & analytics platform - developed by Derek Muriuki using Python and Flask.

(01) - Overview
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.
(02) - Features
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.
(03) - Build
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
(04) - Challenges
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.
Next step