ExamQuest: Interactive O & A Level Paper Downloader
ExamQuest is a high-performance, asynchronous platform designed for the modern-day student. It streamlines the retrieval of past exam papers for Cambridge (CAIE) and Edexcel boards through a stunning, interactive web dashboard. With context-aware filtering, parallelized scraping, and automated merging, it transforms the tedious process of finding papers into a seamless experience.
✨ Features
💻 Modern Web Dashboard
- Luxury UI: Multi-layered glassmorphism and smooth animations.
- Specialized Icons: Handcrafted SVGs for major subjects (Physics, Chemistry, Math, etc.).
- Context-Aware Search: Instantly find subjects by name or code, or search for specific papers, years, and mark schemes within a subject.
- Favorites: Star your most-used subjects for instant access.
- Mass Download & Merge: Download multiple years at once or merge them into a single PDF with one click.
🐚 Powerful CLI (Legacy)
- For advanced users who prefer the command line.
- Same robust scraping logic with columnar subject displays.
📋 Prerequisites
Ensure these are installed before running:
| Requirement | Version | Download |
|---|---|---|
| Python | 3.10+ | python.org |
| Node.js | 18+ | nodejs.org |
[!TIP] On Windows, check "Add Python to PATH" during installation.
Verify your setup:
python3 --version # or `python --version` on Windows
node --version
⚡ Quick Start
The fastest way to get started is using the integrated runner script:
-
Clone the repo:
git clone https://github.com/fam007e/examquest.git cd examquest
-
Run the Interactive Dashboard (Web):
python run_app.pyThis script automatically creates a Virtual Environment (.venv), installs all dependencies, and launches the app. This avoids "Externally Managed Environment" errors found on Arch, Fedora, etc.
-
Run the Legacy CLI:
python o_and_a_lv_qp_sdl.pyFor advanced users who prefer a terminal-based interface.
🛠️ Project Structure
/backend: FastAPI service handling the scraper logic and PDF processing./frontend: Vite + React dashboard with Tailwind CSS and Framer Motion.o_and_a_lv_qp_sdl.py: The original standalone CLI script.run_app.py: The unified automation runner.
🤝 Community Standards
We follow standard GitHub community guidelines:
- CONTRIBUTING.md: Guidelines on how to contribute features or report bugs.
- CODE_OF_CONDUCT.md: Our pledge to a welcoming community.
- SECURITY.md: How to report security vulnerabilities.
⚖️ License
This project is licensed under the MIT License - see the LICENSE file for details.
🎓 Note
Please use this tool responsibly. The backend uses asynchronous requests with built-in "politeness" features (rate-limiting, jitter, and User-Agent rotation) to avoid overwhelming source websites. Respect Xtremepapers and Papacambridge; this tool is designed for educational purposes only.
Metadata
Release files for exam-downloader 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| exam_downloader-0.2.0.tar.gz | 12.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| exam_downloader-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.3 kB
Release files / exam_downloader-0.2.0.tar.gz
| Download URL | exam_downloader-0.2.0.tar.gz |
|---|---|
| Size | 12.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
47cd11f929456894e127bae0011bb1e3c2040ab646b097cc1c5b94c2a3ce651d
|
|
BLAKE2b-256 checksum How to use checksums |
083fb25d04beb0e5acf42d3e352a7546e7d14884f9e5ac4bf7b8801edb5eb146
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / exam_downloader-0.2.0-py3-none-any.whl
| Download URL | exam_downloader-0.2.0-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b055209090cd8f5c8139c3eb18d7f04113b5c8904b566ed642b69d1f8b6a0a8a
|
|
BLAKE2b-256 checksum How to use checksums |
0201147f084565c828f41231d562bb8b143ffeace8b46b22f77ff3a0a75ca79f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|