A modern, full-stack web application for managing university thesis/final year projects. This system digitizes and automates the process of selecting supervisors and project topics.
- Features
- Tech Stack
- Prerequisites
- Installation & Setup
- Project Structure
- Environment Variables
- Database Setup
- Running the Application
- Features by Role
- Deployment
J.M. Ifthakharul Islam Shajan Full Stack Developer |
Mohammad Hasan Full Stack Developer |
-
Role-Based Access Control (RBAC)
- Student role
- Supervisor role
- Admin role
-
Authentication
- Email & password login/registration
- Secure JWT-based authentication via Supabase
- Role-based redirects after login
-
Project Management
- Browse projects with detailed descriptions
- Embedded YouTube video support
- Search and filter by category
- Project status tracking
-
Supervisor Matching
- View supervisor profiles
- Search by department and expertise
- View research areas and experience
- Send supervisor requests
-
Request Management
- Students send requests to supervisors
- Supervisors accept/reject requests
- Request status tracking
- Real-time notifications
-
Notifications System
- In-app notification panel
- Unread notification count
- Notification types (request, accepted, rejected)
- Mark as read/delete functionality
-
Modern UI/UX
- Responsive design (mobile, tablet, desktop)
- Tailwind CSS styling
- Smooth animations and transitions
- Intuitive navigation
- React 18 - UI library
- Vite - Build tool and dev server
- React Router v6 - Client-side routing
- Zustand - State management
- Tailwind CSS - Utility-first CSS framework
- Lucide React - Icon library
- Axios - HTTP client
- Supabase - Backend as a Service
- PostgreSQL database
- Authentication
- Row-Level Security (RLS)
- Real-time subscriptions
- ESLint - Code linting
- PostCSS - CSS processing
- Autoprefixer - CSS vendor prefixing
- Node.js 16+ and npm/yarn
- Supabase account (free tier available)
- Git for version control
git clone <repository-url>
cd "Thesis Management System"npm install- Go to supabase.com
- Create a new account or sign in
- Create a new project
- Wait for the project to be set up
- Copy the project URL and anon key
cp .env.example .env.localEdit .env.local with your Supabase credentials:
VITE_SUPABASE_URL=your_supabase_url_here
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key_here
VITE_API_URL=http://localhost:3000- In Supabase Dashboard, go to SQL Editor
- Create a new query
- Copy the entire content from
DATABASE_SCHEMA.sql - Paste it into the SQL editor
- Click Run
- (Optional) Load sample data by running
SAMPLE_DATA.sql
npm run devThe application will open at http://localhost:3000
src/
├── components/ # Reusable React components
│ ├── Button.jsx
│ ├── Card.jsx
│ ├── Modal.jsx
│ ├── FormInputs.jsx
│ ├── Navigation.jsx
│ ├── ProjectCard.jsx
│ ├── SupervisorCard.jsx
│ ├── Badge.jsx
│ ├── LoadingSpinner.jsx
│ └── Layout.jsx
├── pages/ # Page components
│ ├── HomePage.jsx
│ ├── LoginPage.jsx
│ ├── RegisterPage.jsx
│ ├── StudentProjectsPage.jsx
│ ├── StudentSupervisorsPage.jsx
│ ├── SupervisorRequestsPage.jsx
│ ├── NotificationsPage.jsx
│ └── AdminDashboardPage.jsx
├── hooks/ # Custom React hooks
│ ├── useAuth.js # Authentication hook
│ └── useFetch.js # Data fetching hook
├── services/ # API service functions
│ ├── supabase.js # Supabase client
│ ├── authService.js
│ ├── projectService.js
│ ├── supervisorService.js
│ ├── requestService.js
│ └── notificationService.js
├── context/ # Zustand stores
│ └── store.js # Global state management
├── utils/ # Utility functions
│ └── ProtectedRoute.jsx
├── styles/ # CSS styles
│ └── globals.css
├── App.jsx # Main app component
└── main.jsx # Entry point
| Variable | Description |
|---|---|
VITE_SUPABASE_URL |
Your Supabase project URL |
VITE_SUPABASE_ANON_KEY |
Supabase anonymous key |
VITE_API_URL |
API base URL (default: https://diuthesisflow.web.app) |
-
user_profiles
- id (UUID, PK)
- email, full_name
- role (student/supervisor/admin)
-
supervisors
- id, user_id (FK)
- department, research_area
- experience, contact_email
-
students
- id, user_id (FK)
- department, group_id
-
projects
- id, title, description
- category, video_link
- created_by (FK), supervisor_id (FK)
-
supervisor_requests
- id, student_id (FK), supervisor_id (FK)
- status (pending/accepted/rejected)
-
notifications
- id, user_id (FK)
- message, type, is_read
- Row Level Security (RLS) enabled on all tables
- Policies restrict data access by role
- Users can only see their own data (except publicly viewable content)
- ✅ Browse projects with video support
- ✅ Search and filter projects by category
- ✅ View supervisor profiles
- ✅ Send supervisor requests
- ✅ View request status
- ✅ Receive notifications
- ✅ View incoming student requests
- ✅ Accept or reject requests
- ✅ View assigned students
- ✅ Receive notifications
- ✅ Dashboard with statistics
- ✅ Manage users (students, supervisors)
- ✅ Create/edit/delete projects
- ✅ Add video links to projects
- ✅ Monitor all activities
- ✅ Full system access
- Push code to GitHub
- Go to vercel.com
- Import your GitHub repository
- Set environment variables
- Deploy
- Supabase automatically hosts your database
- No additional deployment needed
After running sample data:
Student:
Email: student@example.com
Password: password123
Supervisor:
Email: supervisor@example.com
Password: password123
Admin:
Email: admin@example.com
Password: password123
All operations use Supabase client-side SDK. Examples:
// Auth
authService.login(email, password)
authService.signup(email, password, fullName, role)
authService.logout()
// Projects
projectService.getProjects()
projectService.getProjectsByCategory(category)
// Supervisors
supervisorService.getSupervisors()
supervisorService.getSupervisorsByDepartment(department)
// Requests
requestService.sendRequest(studentId, supervisorId)
requestService.updateRequest(requestId, status)
// Notifications
notificationService.getNotifications(userId)
notificationService.markAsRead(notificationId)- Custom color palette (primary, secondary, accent)
- Responsive breakpoints (sm, md, lg)
- Custom shadows and utilities
- Button - Multiple variants (primary, secondary, danger, success, outline)
- Card - Container component with sections
- Modal - Dialog component with configurable sizes
- Alert - Status messages (info, success, error)
- Input/Select/Textarea - Form controls with validation
- Badge - Status indicators
- LoadingSpinner - Loading states
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Run ESLint
npm run lint- Mobile-first approach
- Breakpoints: sm (640px), md (768px), lg (1024px)
- Touch-friendly interface
- Optimized for all screen sizes
- Try-catch blocks in all services
- User-friendly error messages
- Toast/Alert notifications
- Form validation
- Loading states
- Supabase Authentication (secure JWT)
- Row-Level Security (RLS) policies
- SQL injection prevention (Supabase ORM)
- XSS protection (React sanitization)
- HTTPS in production
- Secure environment variables
-
Create Firebase Project
- Visit: https://console.firebase.google.com/
- Click "Add Project"
- Name:
thesis-management-system
-
Get Project ID
- Firebase Console → Project Settings
- Copy your Project ID
-
Update Configuration
- Edit
.firebaserc - Replace
YOUR_FIREBASE_PROJECT_IDwith your Project ID
- Edit
-
Login & Deploy
firebase login .\scripts\deploy-firebase.ps1
-
Get Your Live URL
Hosting URL: https://your-project-id.web.app
Option A: Automated Script (Easiest)
.\scripts\deploy-firebase.ps1Option B: Manual Commands
npm run build
firebase deployOption C: NPM Script
npm run deploy:firebase- Full Guide: FIREBASE_DEPLOYMENT.md
- Quick Start: FIREBASE_QUICK_START.md
- Setup Instructions: FIREBASE_HOSTING_SETUP.md
- Firebase project created
- Project ID copied
-
.firebasercupdated -
firebase loginexecuted -
npm run buildcompleted -
firebase deploysuccessful - Live URL verified
- Site loaded in browser
Build Size: ~440 KB (122 KB gzipped)
Build Time: 3.25 seconds
Deployment: Instant to Firebase CDN
Performance: Global CDN with automatic SSL/TLS
After deployment, your site is live at:
- Main URL:
https://your-project-id.web.app - Alternate:
https://your-project-id.firebaseapp.com
For every update:
npm run build
firebase deploy- Supabase Documentation
- React Documentation
- Tailwind CSS
- Vite Guide
- React Router
- Firebase Hosting
- Firebase CLI
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see LICENSE file for details.
For questions, issues, or feedback:
- 📧 Email: jmifthakharul.shajan@gmail.com