A full-stack web application for sharing educational notes and study materials among students.
- User Authentication: Register, login, and manage user accounts
- Note Upload: Upload study materials in various formats (PDF, DOC, DOCX, TXT, PPT, PPTX)
- Note Download: Download notes uploaded by other users
- Search Functionality: Search notes by title, subject, content, or tags
- Like System: Like notes to show appreciation
- View Tracking: Track how many times a note has been viewed
- Related Notes: Suggest related notes based on subject and class
- User Dashboard: View uploaded and downloaded notes
- Responsive Design: Works on desktop and mobile devices
- Frontend: HTML, CSS, JavaScript
- Backend: Node.js, Express.js
- Database: MongoDB
- Authentication: JWT (JSON Web Tokens)
- File Upload: Multer
- Node.js (v14 or higher)
- MongoDB (v4.4 or higher)
- npm or yarn
-
Clone the repository
git clone https://github.com/yourusername/clicknotes.git cd clicknotes -
Install dependencies
npm install
-
Set up environment variables
- Copy
.env.exampleto.env - Update the following variables:
MONGODB_URI=mongodb://localhost:27017/clicknotes JWT_SECRET=your_super_secret_key_here PORT=5000 CLIENT_URL=http://localhost:3000
- Copy
-
Create necessary directories
mkdir -p backend/uploads
-
Start MongoDB
# On Windows mongod # On macOS/Linux sudo mongod
-
Run the application
# Development mode npm run dev # Production mode npm start
-
Access the application
- Open your browser and go to
http://localhost:5000
- Open your browser and go to
ClickNotes/
├── backend/
│ ├── models/
│ │ ├── User.js
│ │ └── Note.js
│ ├── routes/
│ │ ├── auth.js
│ │ ├── notes.js
│ │ └── users.js
│ ├── middleware/
│ │ └── auth.js
│ ├── config/
│ │ └── db.js
│ ├── uploads/
│ └── server.js
├── frontend/
│ ├── css/
│ ├── js/
│ │ ├── auth.js
│ │ ├── notes.js
│ │ └── main.js
│ ├── img/
│ └── [HTML files]
├── package.json
├── .env
└── README.md
- Register: Create an account with your details
- Login: Use your username and password to login
- Browse Notes: View latest uploads on the home page
- Search: Use the search bar to find specific notes
- Download: Click on any note to view details and download
- Upload: Share your own notes with the community
- Login Required: You must be logged in to upload notes
- Upload Process:
- Click on "Upload" in the navigation
- Fill in the topic name, class, and other details
- Select your file (PDF, DOC, etc.)
- Submit the form
POST /api/auth/register- Register new userPOST /api/auth/login- Login userPOST /api/auth/logout- Logout userGET /api/auth/me- Get current user
GET /api/notes- Get all notes (with pagination)GET /api/notes/:id- Get single notePOST /api/notes/upload- Upload new note (auth required)GET /api/notes/:id/download- Download note (auth required)POST /api/notes/:id/like- Like/unlike note (auth required)GET /api/notes/search- Search notes
GET /api/users/profile/:username- Get user profileGET /api/users/notes- Get user's uploaded notes (auth required)GET /api/users/downloads- Get user's downloaded notes (auth required)PUT /api/users/profile- Update user profile (auth required)
- Password hashing with bcrypt
- JWT authentication
- HTTP-only cookies for token storage
- Input validation and sanitization
- File type validation for uploads
- Protected routes requiring authentication
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Created by Nikita Saini - B.Tech student at NIT Kurukshetra
For support, email support@clicknotes.com or raise an issue in the GitHub repository.
- Email verification for new users
- SMS OTP verification
- Admin panel for content moderation
- Rating system for notes
- Comments and discussions on notes
- Categories and advanced filtering
- Real-time notifications
- Mobile app development