Skip to content

jasonhedman/vandy-courses

Repository files navigation

Project Overview

Client

Our client is the Vanderbilt Student Government, but our project is built to be used by all current and incoming Vanderbilt students. We are building a crowdsourced course registration helper that will allow students to review courses and provide suggestions for new students. It would allow students to construct their semester schedule and plan future semesters in one unified dashboard, taking into account their majors, minors, and personal interests.

Scope

Our project scope will be a course review system that allows students to rate the courses based on a variety of metrics, such as difficulty. Ratings will be completed through a form. The data will be stored in a database and used to help generate recommended schedules that fit students’ preferences. We will also incorporate a log-in system to validate Vanderbilt students. Finally, students will be able to share their schedules with peers. Additional features will also be considered such as syncing schedules with peers and schedule previews for students who are looking to add a major or minor, but only if time permits.

Directory Structure

/pages

This directory contains all the pages for our frontend and API routes for our backend. The pages are automatically generated by Next.js based on the file structure. For example, the file pages/index.tsx is rendered at the root of our application, while the file pages/profile.tsx is rendered at /profile.

/components

This directory contains all the components for our frontend. The components are organized into subdirectories based on their function. For example, the components/Reviews directory contains all the components for viewing, creating, and deleting reviews.

The folders that are named the same as pages in the pages directory contain the code for the page at index.tsx. For example, the components/Profile/index.tsx contains the code for the page at /profile.

/components/Layout

The layout components are used to wrap the pages in the pages directory. They are used to provide a consistent layout across all pages.

/hooks

This directory contains all the custom React hooks for our frontend. All state and effects are modularized into custom hooks to keep our components clean and simple. This also allows us to change the implementation of our state effects, and API routes without having to change our components.

Hooks are organized into subdirectories based on their function. For example, the hooks/auth directory contains all the hooks for handling authentication, while the hooks/queries directory contains all the hooks for fetching data from our database.

/firebase

This directory contains all the files for our Firebase configuration. It holds the connection config and the converters to give types to data returned from Firestore.

/services

This directory contains all the services for our backend. This includes the creation and deletion of reviews, comments, professors, and courses.

The services also include the fetching of data from external APIs, such as the Vanderbilt Course Catalog API.

/types

This directory contains all the TypeScript types for our frontend and backend. The types are organized into subdirectories based on their function.

/theme

This directory contains all the theme files for our frontend. The theme files are used to customize the Chakra UI components.

/algolia

This directory contains all the files for our Algolia search indices.

/data

This directory contains all the constants for our frontend and backend.

/public

This directory contains all the static files for our frontend. The files in this directory are served at the root of our application.

Tech Stack

Frontend

React

We use React to build our frontend. React is a JavaScript library for building modular, component-based user interfaces.

Chakra UI

We use Chakra UI components and theming to build our frontend. Chakra UI is a simple, modular and accessible component library that gives us the building blocks we need to build our React applications.

Backend

Next.js Routing

We use Next.js routing to handle routing and page generation. Next.js is a React framework that provides us with a hybrid static & server rendering, TypeScript support, smart bundling, route pre-fetching, and more.

Next.js API Routes

We use Next.js API routes to handle our API routes. Next.js API routes provide us with a simple solution for building our API endpoints.

Firebase Firestore

We use Firebase Firestore to store our data. Firebase Firestore is a NoSQL cloud database that allows us to store and sync data between our users in realtime.

Algolia Search

We use Algolia Search to provide our search functionality. Algolia Search is a search-as-a-service platform that provides us with a simple solution for indexing and querying our Firestore database.

Firebase Authentication

We use Firebase Authentication to handle our authentication. Firebase Authentication is a simple solution for authenticating our with several OAuth providers, as well as email/password based account management.

Hosting

Vercel

We use Vercel to host our frontend and backend. Vercel is a cloud platform for static sites and Serverless Functions that fits perfectly with our Next.js frontend and backend. It is integrated with our GitHub repository, so that any changes pushed to the main branch will be automatically deployed to our production environment.

This is a Next.js project bootstrapped with [create-next-app](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).

Getting Started

First, run the development server:

yarn dev

Open http://localhost:3000 with your browser to see the result.yarn

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •