π¨ Please make sure you are sending pull request for 'master' branch.
NotesVault is an open-source, full-stack web application designed to help students, faculty, and academic institutions efficiently store, browse, and manage academic notes, question papers, and educational resources. Built with modern technologies and inspired by platforms like RGPV Online, it provides a comprehensive solution for academic resource sharing.
- Multi-format Resource Support: Store and serve PDFs, documents, images, and various academic materials
- Advanced Search & Filtering: Find resources by course, semester, subject, year, and keywords
- Hierarchical Organization: Browse by university β course β branch β semester β subject
- Question Paper Archive: Comprehensive previous year questions (PYQs) with year-wise categorization
- Notes Management: Organized lecture notes, study materials, and reference documents
- Syllabus Repository: Complete syllabus documents for all courses and branches
- JWT Authentication: Secure token-based authentication system
- User Profiles: Personalized dashboards with upload history and bookmarks
- Registration System: Easy signup with email verification
- RESTful API: Clean, documented API endpoints for all operations
- Responsive Design: Mobile-first approach with cross-device compatibility
- Dark/Light Theme: User preference-based theming
- Frontend: React 19 + TypeScript 5.9 + Vite 7
- Backend: Flask (Python)
- Build Tools: Vite, ESLint, Prettier
- Type Safety: TypeScript with strict mode
notesvault/
βββ src/ # React application source
β βββ components/ # Reusable UI components
β βββ pages/ # Page components
β βββ hooks/ # Custom React hooks
β βββ utils/ # Utility functions
β βββ types/ # TypeScript types
β βββ styles/ # Global styles
β βββ context/ # React Context providers
β βββ services/ # API services
β βββ App.tsx # Main App component
β βββ main.tsx # Application entry point
βββ public/ # Public static files
βββ backup_existing_project/ # Original HTML/CSS/JS files (legacy)
β βββ assets/ # Original assets
β βββ backend/ # Original backend
β βββ pages/ # Original HTML pages
β βββ components/ # Original components
β βββ scripts/ # Original scripts
β βββ styling/ # Original styles
βββ package.json # Node.js dependencies
βββ tsconfig.json # TypeScript configuration
βββ vite.config.ts # Vite configuration
βββ README.md # This file
Note: Original frontend files (HTML/CSS/JS) are preserved in backup_existing_project/ for reference.
- Node.js 20+ (for frontend)
- Python 3.x (for backend)
- npm 10+
git clone https://github.com/opensource-society/NotesVault.git
cd NotesVaultnpm install
npm run devThe frontend will run at http://localhost:5173
Terminal 2:
cd backup_existing_project/backend
pip install -r requirements.txt
python run.pyThe backend API will run at http://localhost:5000
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:5000
The frontend is configured to proxy API requests to the backend automatically.
npm run devStarts the development server with Hot Module Replacement (HMR)
npm run buildBuilds the app for production. Output will be in the dist/ folder.
npm run previewPreview the production build locally
npm run lintRun ESLint to check code quality
npm run lint:fixRun ESLint and automatically fix issues
npm run formatFormat all source files with Prettier
npm run format:checkCheck if files are formatted correctly
The project is configured with path aliases for cleaner imports:
import Button from '@/components/Button';
import useAuth from '@/hooks/useAuth';
import { formatDate } from '@/utils/date';
import { User } from '@/types/user';
import api from '@/services/api';Available aliases:
@/- src root- All subdirectories accessible via
@/[directory]pattern
The Vite dev server is configured to proxy API requests to the Flask backend:
// All requests to /api/* are proxied to http://localhost:5000
fetch('/api/notes') // β http://localhost:5000/api/notesTypeScript is configured with strict mode enabled. Path aliases are configured in tsconfig.app.json.
ESLint is configured with:
- TypeScript support
- React hooks rules
- React Refresh rules
- Prettier integration
Prettier is configured with:
- 2 space indentation
- Single quotes
- Semicolons
- 100 character line width
- Trailing commas (ES5)
We welcome all kinds of contributions, especially from beginners! Since the project is being modernized with React, you can help build core features from scratch.
Good first issues:
- Setup basic UI structure or card layout
- Implement search and filtering logic
- Improve design responsiveness
- Add support for dark mode
- Build authentication UI components
- Create API service integration
See CONTRIBUTING.md to get started.
// src/components/Button.tsx
interface ButtonProps {
label: string;
onClick: () => void;
variant?: 'primary' | 'secondary';
}
export const Button = ({ label, onClick, variant = 'primary' }: ButtonProps) => {
return (
<button className={`btn btn-${variant}`} onClick={onClick}>
{label}
</button>
);
};// src/services/api.ts
export const fetchNotes = async () => {
const response = await fetch('/api/notes');
if (!response.ok) throw new Error('Failed to fetch notes');
return response.json();
};// src/hooks/useNotes.ts
import { useState, useEffect } from 'react';
import { fetchNotes } from '@/services/api';
export const useNotes = () => {
const [notes, setNotes] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchNotes()
.then(setNotes)
.finally(() => setLoading(false));
}, []);
return { notes, loading };
};Build the production bundle:
npm run buildThe dist/ folder will contain optimized static files ready for deployment.
- React Documentation
- TypeScript Documentation
- Vite Documentation
- ESLint Documentation
- Prettier Documentation
This project is licensed under the MIT License.
Let's build NotesVault together β an open-source resource that helps thousands of students revise and succeed. π
- Migrated to React + TypeScript + Vite for modern development experience
- Original HTML/CSS/JS files backed up in
backup_existing_project/ - Added path aliases for cleaner imports
- Configured ESLint and Prettier for code quality
- Set up Flask backend proxy for seamless API integration