Skip to content

ReeshabhSaini/CampusGrid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

115 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌟 Campus Grid 🌟

πŸ“‹ Overview

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.


✨ Features

πŸŽ“ Student Dashboard

  • πŸ—“οΈ View updated timetables with rescheduled classes.
  • πŸŽ‰ Access holiday updates.

πŸ‘¨β€πŸ« Professor Dashboard

  • πŸ”„ Reschedule future classes with reasons and updated timings.
  • πŸ—‚οΈ View rescheduled classes and updated timetables.

πŸ› οΈ Admin Dashboard

  • πŸ“€ Upload and manage timetables for all courses and semesters.
  • πŸ“… Add and manage holiday entries.

πŸ’» Technologies Used

Frontend

  • βš›οΈ React (deployed on Vercel).
  • Responsive user interface designed for role-specific dashboards.

Backend

  • 🟒 Node.js and Express (deployed on Render).
  • Integrated with 🐘 Supabase for efficient database operations.

Database

  • πŸ“‚ PostgreSQL (hosted on Supabase).

βš™οΈ Key Functionalities

  1. πŸ—“οΈ Timetable Management

    • Fetch updated timetables dynamically from the backend.
    • Includes lecture hall, professor, and rescheduled class details.
  2. πŸ”„ Class Rescheduling

    • Professors can reschedule future classes with specified reasons and updated timings.
  3. πŸŽ‰ Holiday Management

    • Admins can add holidays directly through their dashboard.
  4. πŸ”’ Authentication and Authorization

    • Role-based redirection to dashboards for students, professors, and admins.
    • πŸ›‘οΈ JSON Web Tokens (JWT) for secure login sessions.

🚧 Challenges Faced

  • βš”οΈ Managing merge conflicts during team collaboration.
  • πŸ“š Learning and integrating new technologies effectively.
  • πŸ“Š Working with large datasets in a normalized database schema.

πŸš€ Future Enhancements

  • πŸ“Œ Attendance management system.
  • πŸ“ˆ Grade reporting for students.
  • πŸš€ Enhanced caching for faster timetable updates.

⚑ Getting Started

πŸ“‚ Prerequisites

  • πŸ–₯️ Node.js and npm installed.
  • 🐘 Access to a Supabase project with the required database schema.

πŸ“₯ Installation

  1. Clone the repository:

  2. Install dependencies for the frontend and backend:

    # Frontend
    cd frontend
    npm install
    
    # Backend
    cd ../backend
    npm install
  3. Make your own Database on Supabase:


πŸ—„οΈ Database Schema

1. Table: students

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;

2. Table: professors

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;

3. Table: lecture_halls

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;

4. Table: holidays

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;

5. Table: courses

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;

6. Table: time_table

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;

7. Table: class_rescheduling

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;

8. Table: admins

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;

  1. Set up environment variables for the backend:

    • Create a .env file in the backend directory with the following:

      SUPABASE_URL=<Your Supabase URL>
      SUPABASE_KEY=<Your Supabase Key>
      JWT_SECRET=<Your JWT Secret>
  2. Change the URL inside the StoreContext file inside the frontend folder:

    • Change url to: http://localhost:4000
  3. Start the development servers:

    # Start frontend
    cd frontend
    npm run dev
    
    # Start backend
    cd ../backend
    npm run server
  4. Access the application:

    • Frontend: http://localhost:5173
    • Backend API: http://localhost:4000

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages