Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

📚 PaperVault

A centralized platform for students to search, preview, download, and contribute previous year question papers.

PaperVault helps students quickly find past exam papers using course codes, departments, years, and exam types while preventing duplicate uploads and maintaining an organized repository.


✨ Features

🔍 Smart Search

  • Search by course code or course name
  • 500ms debounced search
  • Instant filtering

📂 Advanced Filters

  • Department
  • Academic Year
  • Semester
  • Exam Type

📄 Paper Preview

  • Preview PDFs directly in the browser
  • No download required

⬇ Download Papers

  • One-click PDF download
  • Download counter

📤 Upload Papers

  • Upload previous year papers
  • PDF validation
  • Automatic Cloudinary storage

🚫 Duplicate Detection

Prevents uploading duplicate papers based on:

  • Course Code
  • Semester
  • Year
  • Exam Type

🔐 Authentication

  • Secure JWT Authentication
  • Protected Routes
  • Role-based Admin Access

🗑 Paper Management

  • Delete uploaded papers
  • Cloudinary cleanup on deletion

🎨 User Experience

  • Responsive Design
  • Loading Skeletons
  • Empty States
  • Confirmation Dialogs
  • Toast Notifications
  • Pagination

🛠 Tech Stack

Frontend

  • React
  • TypeScript
  • Vite
  • Tailwind CSS
  • React Router
  • Axios
  • React Hot Toast

Backend

  • Node.js
  • Express.js
  • MongoDB
  • Mongoose
  • JWT Authentication
  • Multer
  • Cloudinary

📸 Screenshots

Home

Home

Upload

Upload


📁 Project Structure

PaperVault
│
├── client/
│   ├── src/
│   ├── components/
│   ├── pages/
│   └── ...
│
├── server/
│   ├── controllers/
│   ├── middleware/
│   ├── models/
│   ├── routes/
│   ├── utils/
│   └── ...
│
└── README.md

⚙ Environment Variables

Backend (.env)

PORT=

MONGO_URL=

JWT_SECRET=

CLIENT_URL=

CLOUDINARY_CLOUD_NAME=

CLOUDINARY_API_KEY=

CLOUDINARY_API_SECRET=

GOOGLE_CLIENT_ID=

GOOGLE_CLIENT_SECRET=

NODE_ENV=

Frontend (.env)

VITE_API_URL=
VITE_GOOGLE_CLIENT_ID=

🚀 Installation

Clone Repository

git clone https://github.com/himanshuraj-demon/PaperVault.git

Install Frontend

cd client

npm install

Install Backend

cd server

npm install

Run Backend

npm run dev

Run Frontend

npm run dev

🔒 Security Features

  • JWT Authentication
  • Protected API Routes
  • Secure Password Hashing
  • Rate Limiting
  • Helmet Middleware
  • Input Validation
  • Duplicate Upload Prevention
  • PDF-only Uploads

📈 Future Improvements

  • Redis Caching
  • Admin Dashboard Analytics
  • Bulk Upload
  • Paper Reporting
  • Course-wise Statistics
  • OCR-based Search
  • Email Notifications

🤝 Contributing

Contributions are welcome.

If you'd like to improve PaperVault:

  1. Fork the repository
  2. Create a feature branch
git checkout -b feature/new-feature
  1. Commit your changes
git commit -m "Added new feature"
  1. Push
git push origin feature/new-feature
  1. Open a Pull Request

📄 License

This project is licensed under the MIT License.


👨‍💻 Author

Himanshu Raj

GitHub: https://github.com/himanshuraj-demon


⭐ Support

If you found this project useful, consider giving it a ⭐ on GitHub.

It helps others discover the project!

About

A centralized platform for students to search, preview, download, and contribute previous year question papers.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages