A scalable, secure, and role-based web application designed to manage the end-to-end lifecycle of college examination papers — from submission to approval to time-restricted access. EMS streamlines exam paper workflows for institutions using React.js, Supabase.
- Frontend: React.js, Tailwind CSS, Styled Components
- Form & State Management: React Hook Form, React Query
- Backend: Supabase (PostgreSQL, Auth, RLS)
- File Storage: Google Drive API with institutional account
- Routing: React Router DOM (Declarative routing with role-based redirection)
- Replace unstructured and manual exam workflows (Google Forms, email)
- Provide structured, secure document handling per academic scheme
- Role-based access control for upload, approval, locking, and downloading
- Time-restricted, one-time download access for confidential exam material
- Scalable cloud-based storage with automated folder creation and mapping
| Role | Capabilities |
|---|---|
| Faculty | Upload papers and schemes; view/edit own submissions before lock |
| CoE | Approve, reject, forward to BoE; lock final versions |
| BoE | Scrutinize by department; approve or request corrections |
| Principal | Download locked papers within 30 minutes of exam |
- Faculty uploads QP & SoV after selecting scheme, semester, dept, subject.
- CoE approves or rejects the submission.
- BoE scrutinizes papers by department, and can approve/request corrections.
- CoE locks the paper after BoE’s review.
- Principal gets access 30 minutes before the exam and can download one paper per subject.
- Dynamic form generation using
react-hook-form - Supabase authentication with role-based access
- Real-time UI updates with React Query
- Google Drive integration for file uploads and tracking
- Responsive UI with support for dark mode
- Status tracking (
Submitted,Pending-CoE,Pending-CoE,Locked,Downloaded)
-
Clone the repository
git clone https://github.com/yourusername/ems.git -
Install dependencies
npm install -
Set up environment variables in
.env:
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_key- Run the app
npm run dev