PrepStack is a premium, centralized, and structured academic resource platform built specifically for engineering students under Mumbai University. By digitizing the note-sharing ecosystem, it converts scattered study resources into a highly organized, peer-reviewed, and merit-driven academic hub.
Engineering students lose precious preparation hours searching for study resources. High-quality handwritten notes, previous year question papers (PYQs), and laboratory manuals are:
- Scattered across chaotic WhatsApp chats and telegram groups.
- Buried inside unorganized and broken Google Drive links.
- Unverified, resulting in outdated, duplicate, or incorrect exam materials.
- Low-Incentive, giving top students zero motivation to share their curated work.
PrepStack resolves this by offering:
- β Subject-Wise Categorized Repository: Instantly filterable by Department, Semester, and Subject.
- β Verified Academic Content: A strict moderation system where resources must be approved by Admins/Faculty before general release.
- β Point-Based Economy: An engagement economy where students earn credits for sharing quality materials and spend them to access premium notes.
- β Exam Mode Toggle: A focused exam-prep layout surfacing only high-yield resources (PYQs and cheat sheets) to save time before examinations.
- π§ Core Features
- ποΈ Tech Stack
- π Project Structure
- π§© Architecture & Flow
- π Academic Relevance & Schema (Examiner View)
- π οΈ Installation & Setup
- π» Usage & Commands
- π€ Contributing Guidelines
- π License
Secure and seamless login powered by Firebase Authentication. Users are classified into roles:
- Students: Can upload files, browse catalogs, download study resources, and like/bookmark notes.
- Admins: Access a dedicated control panel to moderate uploads, verify files, award badges, and manage users.
To eliminate unstructured browsing, resources are dynamically tagged and indexed by:
- Branch: e.g., Computer Engineering (CMPN), Information Technology (IT)
- Semester: 1, 2, 3, or 4
- Subject: e.g., Analysis of Algorithms (AOA), DBMS, Python Programming
- Resource Type: Notes, PYQs, Lab Manuals, or Viva Resources
- Module / Chapter: Targets specific parts of the syllabus (Modules 1-6)
Notes are systematically ranked using real-time engagement data:
- Notes with high upvote ratios, views, and downloads climb to the top of the Best Notes tab.
- Exceptional, comprehensive materials receive the Gold Badge π , distinguishing them with high visibility and priority ranking.
Incentivizes academic sharing:
- Earning: Students automatically earn +10 credits for every resource uploaded.
- Accessing: Authors can set notes as "Free" or "Paid" (with a credit cost).
- Unlocking: Other students spend their earned credits to unlock paid notes, transferring points directly to the author.
Activating Exam Mode transforms the dashboard into a streamlined environment:
- Filters out long-form research and focus-intensive manuals.
- Surfaces top-rated files, vital PYQs, and high-impact cheat sheets.
- Reduces cognitive fatigue for students cramming under exam pressure.
A dedicated section designed to assist students with practical file submissions:
- Houses verified practical lab code, circuit diagrams, and procedure summaries.
- Includes dynamic viva question sheets to prepare students for external examinations.
| Technology | Layer / Purpose | Description |
|---|---|---|
| React (v19) | Frontend Library | Component-driven UI framework with concurrent loading. |
| Vite (v8) | Build Tool & Bundler | High-speed hot module replacement (HMR) and compiling. |
| Tailwind CSS (v3) | Styling System | Utility-first responsive CSS styling with HSL color palettes. |
| Framer Motion | UI Animations | Fluid screen transitions, drag gestures, and micro-interactions. |
| Firebase Auth | Security & Auth | Secure student registration, logins, and session management. |
| Cloud Firestore | NoSQL Database | Real-time database storing student points, notes, and purchases. |
| Firebase Storage | Cloud Storage | Secure repository for hosting academic documents (PDFs, Docx). |
| Lucide React | Icon System | Clean, lightweight, vector-based UI iconography. |
PrepStack/
βββ public/ # Static public assets
β βββ favicon.ico
βββ src/
β βββ assets/ # Lottie animations and media files
β βββ components/
β β βββ student/ # Student-facing modular layouts
β β βββ BestNotes.jsx # Smart note marketplace & paid unlock system
β β βββ ExamMode.jsx # High-yield resource view
β β βββ LabManual.jsx # Lab experiments, manual procedures, and code
β β βββ MyNotes.jsx # Personal uploads manager & uploading form
β β βββ PYQs.jsx # Mumbai University Question Papers
β β βββ Saved.jsx # Bookmarked academic resources
β β βββ Setting.jsx # Student profile & settings view
β β βββ Sidebar.jsx # Dashboard sidebar navigation
β β βββ TopRated.jsx # Leaderboard for student contributors
β β βββ VivaResources.jsx # Viva question-and-answer preparation sheets
β βββ pages/
β β βββ AdminDashboard.jsx # Resource moderation & status verification console
β β βββ Login.jsx # Beautiful secure animated landing & entry portal
β β βββ StudentDashboard.jsx # Primary student interactive workspace
β βββ styles/ # Global style configurations
β β βββ App.css
β β βββ index.css
β βββ App.jsx # Central React Router layout and redirect rules
β βββ firebase.js # Firebase Client initialization (Auth, Firestore, Storage)
β βββ main.jsx # Virtual DOM entrypoint
βββ tailwind.config.js # Tailwind compiler specifications
βββ vite.config.js # Vite build and port config
βββ vercel.json # Cloud deployment instructions
βββ eslint.config.js # Code quality and syntax specifications
βββ package.json # Dependencies and execution script definitions
[Login / Registration]
β
βΌ
[Student Dashboard] ββββΊ [Active Point Balance]
β
βββΊ [Browse Catalogs] βββΊ Filter: Branch β Semester β Subject β Type
β β
β βββΊ Free Resource: Read Instantly
β βββΊ Paid Resource: Confirm β Spend points β Unlock
β
βββΊ [Upload Notes] ββββΊ Enter File Metadata β Save β Earn +10 points (Pending Admin View)
β
βββΊ [Engagement] ββββββΊ Upvote helpful notes β Track placement on Leaderboard
[Admin Login]
β
βΌ
[Admin Dashboard Panel]
β
βββΊ Review uploaded notes (Status: Pending verification)
β
βββΊ Option A: Approve β Tag: "β Verified" (visible on Best Notes)
β
βββΊ Option B: Promote β Tag: "π
Gold Badge" (priority listing)
β
βββΊ Option C: Delete β Remove spam / duplicates (deduct credits if fraudulent)
The relationship between users and notes is illustrated below:
erDiagram
users ||--o{ notes : "uploads"
users ||--o{ notes : "unlocks / purchases"
users {
string uid PK "Firebase Auth UID"
string name "Full Name"
string username "Display Name"
string email "Academic Email"
int points "Credit Balance"
array purchasedNotes "IDs of Unlocked Paid Notes"
string branch "e.g., computer_engineering"
string photoURL "Profile Image Link"
string role "student | admin"
}
notes {
string id PK "Auto-generated ID"
string title "Resource Title"
string description "File Summary"
string fileName "Original Filename"
string fileUrl "Storage Download Path"
string pointsType "free | paid"
int points "Unlock Cost"
string branch "Syllabus Branch"
int semester "Semester 1-4"
string subject "Mumbai University Course Name"
int module "Syllabus Module 1-6"
string resourceType "notes | pyq | lab_manual | viva"
string uploadedBy FK "User UID reference"
string uploadedByName "Author Name"
timestamp uploadedAt "Realtime upload stamp"
int views "View counter"
int likes "Like counter"
int upvotes "Upvotes counter"
int downloads "Successful downloads"
int saves "Bookmark counter"
array likedBy "UIDs of users who upvoted"
boolean verified "Admin Approved Status"
boolean gold "Highly Recommended Gold Status"
int pages "Total page count"
}
PrepStack uses Google Cloud Firestore (NoSQL Document Store). Here is the relational structure:
Documents represent registered users, keyed by their Firebase Auth uid.
| Field Name | Data Type | Description |
|---|---|---|
uid |
string |
Unique identifier (Document Key). |
name / username |
string |
Display name of the user. |
email |
string |
Logged-in email address. |
points |
number |
Balance used in the circular credit economy. |
purchasedNotes |
array [string] |
List of note IDs the user has purchased. |
branch |
string |
Student's discipline (computer_engineering, information_technology). |
role |
string |
Access privileges (student or admin). |
Documents represent educational files, keyed by auto-generated strings.
| Field Name | Data Type | Description |
|---|---|---|
title |
string |
Title of the resource. |
description |
string |
Brief overview of file contents. |
fileName |
string |
Original file name (e.g. normalization.pdf). |
pointsType |
string |
Cost model: "free" or "paid". |
points |
number |
Point requirement to unlock if "paid". |
branch |
string |
Syllabus branch compatibility. |
semester |
number |
Syllabus semester matching. |
subject |
string |
Course subject matching. |
resourceType |
string |
"notes", "pyq", "lab_manual", "viva". |
uploadedBy |
string |
Reference to owner's uid. |
uploadedAt |
timestamp |
Time of creation. |
verified |
boolean |
Flag set to true when approved by admin. |
gold |
boolean |
Premium high-yield item flag. |
When Student
- Let
$Cost$ be the point threshold of the note (e.g.,$15$ credits). - Validate
$A.points \ge Cost$ . - Perform a firestore transaction:
$$A.points \leftarrow A.points - Cost$$ $$B.points \leftarrow B.points + Cost$$ $$A.purchasedNotes \leftarrow A.purchasedNotes \cup {note.id}$$ $$note.downloads \leftarrow note.downloads + 1$$
This closes the loop: uploading premium content generates points, which are recycled to unlock other students' notes.
To keep highest quality resources on top, PrepStack surfaces and orders notes dynamically:
-
Verified Prioritization: Notes with
verified == truebypass standard sorting filters to occupy primary visual real estate. -
Metric Weighting: Ordering is computed by weighing multiple indices:
$$\text{Engagement Score} = (\text{Upvotes} \times 3) + (\text{Downloads} \times 2) + (\text{Views} \times 0.5)$$ -
Gold Multiplier: Notes marked
gold == truereceive a visual gold crown, custom cards, and automatically gain$+50$ points on the ranking index, placing them directly under verified elements.
-
Default Isolation: Newly uploaded files are tagged
"β³ Pending"(verified = false) and are quarantined from the default "Verified" lists to prevent spam from flooding student feeds. -
Fraud Prevention Audit: Admins monitor the dashboard. If a file is identified as spam, plagiarism, or unrelated:
- The file is permanently deleted from Firestore and Cloud storage.
- A deduction transaction is run, stripping the
$+10$ points earned by the uploader. - Repeated spam results in user ban/block logic.
- Syllabus Bounds Enforcement: During the file upload step, students must select strict predefined subjects according to the Mumbai University course structures. Files containing random strings, blank uploads, or unaligned text are easily spotted on the admin console.
Follow these steps to set up and run PrepStack locally on your computer:
Make sure you have the following installed on your machine:
- Node.js (v18 or higher recommended) -> Download Node.js
- Git version control -> Download Git
Open your terminal/command prompt and clone the repository:
git clone https://github.com/anam0505/PrepStack.gitNavigate into the project root directory:
cd PrepStackInstall all package dependencies defined in package.json using npm:
npm installBy default, the client config resides in firebase.js. For production environments, it is recommended to set up environment variables.
Create a .env file in the root directory:
# On Windows PowerShell:
New-Item .envAdd your Firebase configuration values using Viteβs environment variable prefix (VITE_):
VITE_FIREBASE_API_KEY=your_firebase_api_key_here
VITE_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project_id.firebasestorage.app
VITE_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
VITE_FIREBASE_APP_ID=your_app_idThen, you can update your src/firebase.js file to load these dynamically:
const firebaseConfig = {
apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET,
messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID,
appId: import.meta.env.VITE_FIREBASE_APP_ID
};Launch the local development server:
npm run devOnce compilation completes, open your browser and go to:
http://localhost:5173
Use the following npm scripts to build, test, and manage the PrepStack codebase:
# Start the local development server with Hot Module Replacement (HMR)
npm run dev
# Compile the application and generate a production bundle inside /dist
npm run build
# Run ESLint to analyze static source code and check for syntax errors
npm run lint
# Preview the local production bundle in a browser environment
npm run preview- Login Page: Use the login portal to register or log in. Students can register a normal account; mock administrative privileges can be toggled by configuring the user document's
roleto'admin'in the Firebase console. - Browsing: In the student panel, use the sidebar to choose files. Switch to the Best Notes tab to view files sorted by score, search by subject names, or select branch (CMPN/IT) and Sem to filter down material.
- Unlocked Resources: Click Read Now on unlocked resources to open a beautiful, realistic, fully simulated client-side document viewer, complete with zoom adjustments and custom paging layouts.
We love contributions from students, faculty, and developers! To contribute code, design updates, or report issues:
- Review the detailed guidelines in the CONTRIBUTING.md file.
- Always run
npm run lintbefore opening a pull request to keep code clean and uniform. - For major visual changes, open a Github issue to discuss concepts before executing coding work.
This project is licensed under the MIT License. See the LICENSE file for the full text.
- π§ AI Exam Question Generator: Analyzes uploaded syllabus files to generate automatic mock examinations.
- π‘οΈ Plagiarism Checker: Scans student uploads to block copy-pasted web documents and textbook material.
- π¬ Real-time Collaboration Sheets: Live chat integration inside subjects to allow peer studying.
- π± Native Mobile Client: An iOS/Android companion app to enable offline note saving.