Campus Grid is a comprehensive academic management system designed to streamline timetable management, class rescheduling, and holiday updates for universities and colleges. It provides role-specific dashboards for students, professors, and administrators, ensuring tailored access and functionality for each user type.
- ποΈ View updated timetables with rescheduled classes.
- π Access holiday updates.
- π Reschedule future classes with reasons and updated timings.
- ποΈ View rescheduled classes and updated timetables.
- π€ Upload and manage timetables for all courses and semesters.
- π Add and manage holiday entries.
- βοΈ React (deployed on Vercel).
- Responsive user interface designed for role-specific dashboards.
- π’ Node.js and Express (deployed on Render).
- Integrated with π Supabase for efficient database operations.
- π PostgreSQL (hosted on Supabase).
-
ποΈ Timetable Management
- Fetch updated timetables dynamically from the backend.
- Includes lecture hall, professor, and rescheduled class details.
-
π Class Rescheduling
- Professors can reschedule future classes with specified reasons and updated timings.
-
π Holiday Management
- Admins can add holidays directly through their dashboard.
-
π Authentication and Authorization
- Role-based redirection to dashboards for students, professors, and admins.
- π‘οΈ JSON Web Tokens (JWT) for secure login sessions.
- βοΈ Managing merge conflicts during team collaboration.
- π Learning and integrating new technologies effectively.
- π Working with large datasets in a normalized database schema.
- π Attendance management system.
- π Grade reporting for students.
- π Enhanced caching for faster timetable updates.
- π₯οΈ Node.js and npm installed.
- π Access to a Supabase project with the required database schema.
-
Clone the repository:
-
Install dependencies for the frontend and backend:
# Frontend cd frontend npm install # Backend cd ../backend npm install
-
Make your own Database on Supabase:
create table
public.students (
id bigint generated by default as identity not null,
first_name character varying null,
last_name character varying null,
email character varying null,
password character varying null,
student_id character varying null,
branch character varying null,
semester bigint null,
created_at timestamp with time zone not null default now(),
class_group character varying null,
tutorial_group character varying null,
lab_group character varying null,
constraint users_pkey primary key (id),
constraint users_email_key unique (email)
) tablespace pg_default;create table
public.professors (
id bigint generated by default as identity not null,
first_name character varying null,
last_name character varying null,
email character varying null,
password character varying null,
created_at timestamp with time zone not null default now(),
department_id bigint null,
constraint professors_pkey primary key (id),
constraint professors_email_key unique (email),
constraint professors_department_id_fkey foreign key (department_id) references departments (id)
) tablespace pg_default;create table
public.lecture_halls (
id bigint generated by default as identity not null,
hall_name character varying null,
constraint Lecture Halls_pkey primary key (id)
) tablespace pg_default;create table
public.holidays (
id bigint generated by default as identity not null,
holiday_date date null,
description character varying null,
created_at timestamp with time zone not null default now(),
constraint holidays_pkey primary key (id)
) tablespace pg_default;create table
public.courses (
id bigint generated by default as identity not null,
course_code character varying null,
course_name character varying null,
branch character varying null,
semester bigint null,
created_at timestamp with time zone not null default now(),
constraint courses_pkey primary key (id)
) tablespace pg_default;create table
public.time_table (
id bigint generated by default as identity not null,
courses_id bigint null,
day_of_week character varying null,
start_time time without time zone null,
end_time time without time zone null,
lecture_hall_id bigint null,
created_at timestamp with time zone not null default now(),
professor_id bigint null,
type character varying null,
"group" character varying null,
constraint time_table_pkey primary key (id),
constraint time_table_courses_id_fkey foreign key (courses_id) references courses (id),
constraint time_table_lecture_hall_id_fkey foreign key (lecture_hall_id) references lecture_halls (id),
constraint time_table_professor_id_fkey foreign key (professor_id) references professors (id)
) tablespace pg_default;create table
public.class_rescheduling (
id bigint generated by default as identity not null,
course_id bigint null,
original_date date null,
rescheduled_date date null,
reason text null,
professor_id bigint null,
created_at timestamp with time zone not null default now(),
lecture_hall_id bigint null,
new_start_time time without time zone null,
type character varying null,
"group" character varying null,
original_start_time time without time zone null,
original_end_time time without time zone null,
new_end_time time without time zone null,
constraint class_rescheduling_pkey primary key (id),
constraint class_rescheduling_course_id_fkey foreign key (course_id) references courses (id),
constraint class_rescheduling_lecture_hall_id_fkey foreign key (lecture_hall_id) references lecture_halls (id),
constraint class_rescheduling_professor_id_fkey foreign key (professor_id) references professors (id)
) tablespace pg_default;create table
public.admins (
id bigint generated by default as identity not null,
first_name character varying null,
last_name character varying null,
created_at timestamp with time zone not null default now(),
email character varying null,
password character varying null,
constraint admins_pkey primary key (id)
) tablespace pg_default;-
Set up environment variables for the backend:
-
Create a
.envfile in the backend directory with the following:SUPABASE_URL=<Your Supabase URL> SUPABASE_KEY=<Your Supabase Key> JWT_SECRET=<Your JWT Secret>
-
-
Change the URL inside the
StoreContextfile inside the frontend folder:- Change
urlto:http://localhost:4000
- Change
-
Start the development servers:
# Start frontend cd frontend npm run dev # Start backend cd ../backend npm run server
-
Access the application:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:4000
- Frontend: