Giter Site home page Giter Site logo

omshub / website Goto Github PK

View Code? Open in Web Editor NEW
55.0 6.0 8.0 11.65 MB

Unofficial reviews site for Georgia Tech's Online Master of Science (OMS) programs. Contact: [email protected]

Home Page: https://omshub.org

License: GNU General Public License v3.0

Shell 0.05% JavaScript 76.59% TypeScript 22.49% Dockerfile 0.04% CSS 0.24% MDX 0.59%
computer-science education firebase nextjs typescript vercel georgia-tech georgia-tech-masters oms omsa

website's Introduction

OMSHub

license contributors count pull requests closed

A website for Online Master's of Science (OMS) course reviews at Georgia Tech.

Resources

OMSHub

OMS program home pages

Other

Development

Getting started (VSCode fast-path)

This project includes a .devcontainers configuration that can be used by VSCode to create a one-click development environment with Docker. The Docker container includes all of the dependencies you need to get started, forwards the NextJS and Storybook ports to your local machine, and mounts the repository into the container so changes persist outside of Docker.

To get started:

  1. Install the Remote - Containers VSCode extension.
  2. Open the repository with VSCode. You should see a prompt on the bottom left of the screen to open the project inside the container.

Getting started

Clone the repository and then run the following commands to build the NextJS application:

yarn install
yarn build

To start the project locally, run:

yarn start

Open http://localhost:3000 with your browser to see the result. See README.md in /__seed__ for more details regarding seeding backend data (e.g., in a cloud Firebase project).

Running the local Firebase emulator for local dev environment

Ensure that the following is defined locally in environment file website/.env:

NEXT_PUBLIC_IS_EMULATOR_MODE=true
NEXT_PUBLIC_FIRESTORE_EMULATOR_HOST=localhost:8080

To launch the local emulator, run:

yarn install
yarn fb:emu

This will create a local emulator instance of Firebase, with local UI Firebase dashboard accessible via http://localhost:4000 which provides the Firebase Emulator Suite for local services (e.g., Firestore).

Next, to start the project locally, in a separate terminal instance run:

yarn build
yarn dev

Note: A cloud-based Firebase project must still exist in order to run the emulator locally in this manner. Simply create a blank/empty Firebase project using a Google account for this purpose, and then populate file website/.env accordingly with corresponding API key and project information from Firebase (see website/example.env for additional reference, as well as website/__seed__/README.md for more information regarding seeding a cloud-based Firebase Firestore database).

Open http://localhost:3000 with your browser to see the result. The local data will be seeded from scratch. Furthermore, you can use the local auth service by simply logging in via any of the provided services (e.g., Google) with auto-generated credentials, which will simulate a logged in user account.

Yarn development scripts

  • yarn dev — Starts the application in development mode at http://localhost:3000.
  • yarn build — Creates an optimized production build of your application.
  • yarn start — Starts the application in production mode.
  • yarn lint — Runs ESLint for all files in the src directory.
  • yarn prettier — Runs Prettier for all files in the src directory.
  • yarn fmt - Run yarn prettier and yarn lint successively.
  • yarn precommit — Run commitizen on git-staged files.
  • yarn storybook - Run storybook locally at http://localhost:6006.
  • yarn fb:emu - Run the local Firebase Emulator Suite at http://localhost:4000.

Directory structure

  • .github — GitHub configuration including the CI workflow.
  • .husky — Husky configuration and hooks.
  • public — Static assets such as robots.txt, images, and favicon.
  • src — Application source code, including pages, components, styles.

Commit messages

Committing using Git CLI:

Using git commit will bring up a prompt that will fill out commit messages to the repo's commit connvention.

Committing using Git GUI:

Commit messages must conform to the Conventional Commits specification.

The commit message should be structured as follows:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

<type> must be one of the following:

type description
build Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
chore Changes that do not affect production; e.x., updating grunt tasks, etc.
ci Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
docs Documentation only changes
feat A new feature
fix A bug fix
perf A code change that improves performance
refactor A code change that neither fixes a bug nor adds a feature
revert A commit that reverts a previous commit
style Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
test Adding missing tests or correcting existing tests

See the Conventional Commits specification for examples of valid commit messages.

website's People

Contributors

ashiquem avatar austinoboyle avatar awpala avatar csc5nz avatar ctran4347 avatar dependabot[bot] avatar disposedtrolley avatar driscoll42 avatar herman-rogers avatar imgbot[bot] avatar knakamura13 avatar omshub-admin avatar shaun-jacks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

website's Issues

[FEATURE] Wordclouds

Is your feature request related to a problem? Please describe.
There can be hundreds of reviews and hard to pull out themes of the reviews

Describe the solution you'd like
A wordcloud of the content of the reviews could be interesting to see what stands out in the reviews

Describe alternatives you've considered
N/A

Additional context
N/A

[CORE FEATURE] Determine if possible to use OMSCentral Data

Is your feature request related to a problem? Please describe.
The site lives and dies by its data, and currently we would need to start from scratch, even OMSCentral started from a Google Doc originally so it had data.

Describe the solution you'd like
Need to determine two things, if we can use the data at all, and if Mehmet would allow us to get a database extract to load.

Describe alternatives you've considered
Start from nothing and build it.

Additional context
Lots of potential legal issues here and would have be very clear as what can be done.

[ADMINSTRATIVE] Organizational Planning

In preparing the legal paperwork to establish a non-profit entity, we will first need a charter. Please list the following items:

Name of Organization
Purpose or the org.
Goal of the org.
Board structure (i.e. 5 people, 2 year terms, staggered - director, secretary, treasurer, member, member)
Will be setting up non-profit (501-C3) in Delaware or Nevada. Please let me know of a reason you cannot use one of these states.

[FEATURE] Create a Terms of Service

Is your feature request related to a problem? Please describe.
In order to be sure everyone is clear on the data, we need a Terms of Service to be clear on what is being done with the data

Describe the solution you'd like
A ToS page for people to view

[FEATURE] OMS Resources/Guides

In order to make the website more useful for students, resources/guides could be added to the site to help future students. Such things could include "How to do research" "how to prepare for classes" and similar. Though this could be similar to some of what is on wikidot, omsa.ga/omscs.ga so there would need to be a means of not overlapping, and augmenting.

[FEATURE] Add Google Lighthouse action

Is your feature request related to a problem? Please describe.
Add Google Lighthouse to current workflow

Describe the solution you'd like
Add and configure Github action

Describe alternatives you've considered
None so far but might consider adding any other tools that will assist with increasing page rank.

Additional context
N/A

[FEATURE] Create a Job Board

Is your feature request related to a problem? Please describe.
A review site would be seen by a number of recruiters, users, etc... and having a job board could allow for them to advertise positions at their company. In theory it could allow for the site to be self-funding without requiring donations.

Additional context
This would be fraught with all sorts of potential issues, how to post, how to charge, if to charge, etc... This should be discussed, but not until later.

[FEATURE] Commenting on reviews for discussion

Is your feature request related to a problem? Please describe.
Reviews are given with not discussion

Describe the solution you'd like
Allow for commenting on reviews to have discussion on what is in a review.

Describe alternatives you've considered
This may encourage some trolling, or useless chatter. I feel we would need to enable notifications to the reviewer to let them know about a comment.

Additional context
N/A

[FEATURE] FAQ page

Is your feature request related to a problem? Please describe.
New students usually ask the same questions every semester in Reddit and Slack.

Describe the solution you'd like
Add an FAQ page with well written answers to common questions from other sources and provide attribution.

[FEATURE] Expand scope of site to include on campus students/reviews

Is your feature request related to a problem? Please describe.
There is no specific reason why the site could not be used by on campus undergrad and graduate students and one expects it would be useful to them as well. However it would dramatically increase the scope of the project and we would need contacts on campus to make it happen.

Additional context
Not MVP or even 2022 goal I think, but worth keeping in mind.

[FEATURE] User Authentication

Is your feature request related to a problem? Please describe.
What is the end user authentication scheme we should use, if any?

Describe the solution you'd like
First, we should decide if we are going to need a user authentication feature, and when.
Second, we should determine what's the best authentication scheme for our use case. Should we go with something like Auth0, Firebase Authentication, et cetera.

Describe alternatives you've considered
Without getting to far into our plans for end user authorization, I think we need authentication to allow us to tie reviews to individual users and give them provenance over their data and allow operations such as "delete my review".
A "nice to have" feature would be to ensure that people signing up have a gatech email address

One possibility is that we don't have any authentication system. Everything remains anonymous, we simply don't know! Just like anyone can see all the reviews, anyone can post a review. This would imply that reviews cannot be deleted, at least by end users. This might also mean that we have to "clean up" obviously fake reviews and spam content, so we might need a reCAPTCHA or other mechanism to avoid that.

Additional context
OMSCentral currently has user authentication. The authentication system is using Firebase, and there are user specific tasks: like add a review, or delete a review. OMSCentral has not always had authentication.

[FEATURE] Setup unit testing

Configure the project with unit testing frameworks and tools.

Scope:

  • frontend: jest + react testing library
  • backend: jest will suffice if we go with node for now, we can add something else later if this changes in the future

[FEATURE] Automate making changes to the OMS curriculum (courses, specializations, tracks, etc...)

Is your feature request related to a problem? Please describe.
Keep site data up-to-date

Describe the solution you'd like
Web scraping the data, clean and insert into relevant tables in db. Scrape both omscs official site and omscentral on a daily basis, clean and normalize the data, then update relevant tables.

Describe alternatives you've considered
ools to consider here are python scrapy for scraping data, and python pandas to normalize and clean it. Some relevant tables also should be added to the DB

Additional context
The data should be extracted into an 'offline' db, so in case of an error in scraping the data of the site is not deleted. Maybe more thinking should be taken into account how the data is being passed from the 'offline' db into the production one

[FEATURE] Make website analytics visible

Is your feature request related to a problem? Please describe.
Not a problem, but it would be interesting to make details on the website visible.

Describe the solution you'd like
By that I would mean seeing how many people visited each month, which courses were most viewed, etc... I'm not fully certain what is possible, but the more transparency the better. Here's some reddit stats that are similar to what I had in mind, or ones from Google Analytics.

[FEATURE] Configure Vercel with Terraform

We should consider using Terraform to configure our Vercel resources (project, custom domain, and deployments). This gives us a repeatable way to deploy our infrastructure, and acts as a form of documentation. The Terraform code can live in a separate ops repo or similar.

Links:

[DISCUSSION] Determine relationship or lack there of with OMSCentral

Similar to #22 a discussion should be had with Mehmet (possibly Martz too) about any collaboration, relationship, etc... with OMSCentral. It would be in the best interest of the community to have one site and not two and cannot emphasize enough the gratitude the community has for OMSCentral, but one that is community owned is probably best.

[FEATURE] Additional course metrics

Is your feature request related to a problem? Please describe.
OMSCentral displayed a simple arithmetic mean for all available metrics (workload, rating, difficulty etc). This may be misleading as course syllabus, instructing team and logistics change over time.

Describe the solution you'd like
Keep the overall metrics and display additional data only for the last two semesters (or a reasonable lower bound).

Describe alternatives you've considered
Display a graph of the metrics over time (similar to steam ratings).

[FEATURE] Allow for upvote and maybe downvote of reviews to find the most "helpful" ones

Is your feature request related to a problem? Please describe.
Generally reviews are sorted by posting time so only the most recent reviews are at the top, which is not always the most helpful.

Describe the solution you'd like
There should be the ability to upvote (and maybe downvote) reviews to all the most helpful ones to rise to the top.

Describe alternatives you've considered
Only allow upvotes to not allow downvote brigading, but I don't think that'll be a big issue.

Additional context
This is implemented on the UT Austin's MSCSHub

[FEATURE] Set up the data access layer

Prerequisite: #1

Scope:

  • adopt an ORM library
  • implement the initial data model in the backend

Prisma is a good library to consider. It would provide out of the box:

  • An intuitive way to write queries (similar to ActiveRecord)
  • Input sanitization
  • Type safety (automatic mapping between database tables and typescript types that can be used both on the backend and the frontend)
  • Migrations

It has good documentation and integrates well with next.js.

Other alternatives to consider: goose, typeorm

[ADMINISTRATIVE] Create a Data Governance Policy

Related to #23 and #1 in order to properly make use of the data to allow for features like #17, we need a solid Data Governance policy to allow users to feel comfortable and safe with their data with us and enable sharing of anonymized data.

[ADMINSTRATIVE] Administrivia

Determine centralized ownership:

  • Services accounts (frontend & backend)
  • Email (general gmail or similar vs. gatech.edu domain)
  • License & Terms of Service, Data Policy, etc.
  • Ownership: Individual vs. LLC vs. 501(c) etc.

[FEATURE] Create Course Maps for the specializations/tracks

Is your feature request related to a problem? Please describe.
UT Austin has some fantastic course maps: https://mscshub.com/courseMap It'd be great to have similar

Describe the solution you'd like
Would probably be best to make one per specialization, and to basically copy what they did, I made a sample of a rough draft of a ML spec one below. Would need some community help to figure out how it should look for all the various specializations/tracks/courses. Further how/should non-spec/track courses be included?

Additional context
image

[ADMINISTRATIVE] Decide on a Git workflow for pushing changes to production

We currently have two integration branches:

The repository is configured with dev as the default branch. This means that when a PR is merged, it will deploy into a "development" version of the site. An additional PR needs to be created to merge the dev branch into main to deploy to the production site. This method is sometimes known as Gitflow and is one of two commonly used Git workflows, with the alternative being [trunk-based development])(https://www.atlassian.com/continuous-delivery/continuous-integration/trunk-based-development).

We should decide if we want to adopt trunk-based development or stick with the Gitflow-style model we currently have. I am biased towards the former, but I'm also more than happy to back Gitflow if that's the decision of the community -- this is our project, so we should all have a say.

Trunk-based development has the following advantages:

  • A single integration branch. When a change is approved and merged, it's on the way to production. This forces us to be disciplined in opening small PRs and giving thorough reviews. Small changes are also easier to test, and in the worst case, revert.
  • No overhead in deciding on a release cadence. Releases happen when a PR is approved.
  • No overhead in synchronising changes between integration branches. A single branch represents the code that's externally visible to users.
  • Vercel deploys a live preview site for each PR we create (you can see an example here). This removes the need for a dedicated integration branch like dev for previewing changes. My philosophy with dev environments in general is that they should be ephemeral; created when needed and destroyed when irrelevant.
  • Ownership. The author of a PR can be responsible for the entire lifecycle of their change; from inception to deployment.

Where trunk-based development falls short is long-lived dev or test environments, particularly for user testing (these are great points made in the Slack thread below). My counter to this is that we should make small PRs (changing one component at a time), or spin off an ad-hoc integration branch when it’s warranted (if we’re doing a big redesign consisting of a large collection of PRs). Ad-hoc integration branches work nicely for user testing too; we can cherry pick the relevant commits into a branch that’s named after the purpose of the test.

I really want to optimise our Git workflow for the common case, which is regularly deploying small changes into production.

Links

[ADMINSTRATIVE] Miscellaneous thoughts and questions on CI/CD, DevOps, and infra

👋 Hey folks! I have a bunch of questions on how we'd like to set up our infrastructure and deployment process. We can try and use this issue as a dumping ground for now, and break down the work into standalone issues as the tasks become clear.

Infrastructure

  1. I've noticed that we have live pages at omshub.org and dev.omshub.org. Where are these being hosted right now? Where do we eventually want them to be hosted?
  2. How and where do we want to persist our data?
  3. How are we managing API keys, SSH keys, and other kinds of secrets for any infrastructure we've provisioned?

Deployment

  1. How is the NextJS frontend being deployed?
  2. What kind of rendering do we want for NextJS? This will inform the components that we'll need to deploy and maintain.
  3. How many environments do we want? Dev and Prod?
  4. What kind of workflow do we want for deploying changes? I'm a fan of continuous integration, so merges to the default branch should automatically trigger a build, test, and deploy. The PRs themselves should undergo a similar series of checks before being able to be merged.

Monitoring

(This may be a little premature, but fun to think about!)

  1. How will we know if the site is working?
  2. What kind of logging and error reporting do we need? If a change breaks the site for users, where will we be alerted?

[FEATURE] New Logo

Currently there is no logo for OMSHub and one would be needed for branding purposes. Note we cann0t use Buzz from GA Tech

[FEATURE] Allow user to record reviews without main body

With this feature we can:

  1. encourage students to quickly record each course they have taken
  2. allow us to take a more complete user profile and expand our data points
  3. open the door to course recommendation, which could be as simple as X% of students taking A while taking B, X% of students taking B after finishing A, or even an actual recommender system

We need to:

  1. give an option to add the review later
  2. ignore ratings coming from records without the body

Let me know if it makes sense, thx

[DISCUSSION] Ensure compatibility/information with OMSA/OMSCY

Is your feature request related to a problem? Please describe.
Generally OMSCentral was focused on OMSCS, and a new website should be inclusive of OMSA and OMSCY, see the MSCSHub and MSDSHub for examples. OMSA/OMSCY must have buy in to the site for it to be successful and part of conversations

[FEATURE] Add GitHub Action to run linting

Add a GitHub Actions job to execute yarn lint and also ensure Prettier formatting rules have been followed.

This job should run on branches with an open PR to provide quick feedback to authors.

[CORE FEATURE] Transparent Funding

Is your feature request related to a problem? Please describe.
The core issue inspiring this site was the paywall going up on OMSCentral.

Describe the solution you'd like
To inspire confidence in a new site by users, all financials related to the site should be transparent, costs, donations, etc... Probably a quarterly or yearly report on server costs, maintenance, etc... with how many people donated money.

[INVESTIGATION] Explore similar websites for ideas

MSCSHub/MSDSHub should be investigated for what features to copy to a new site to make the site more useful, but without being too cluttered. After exploration new issues/feature requests should be made.

[ADMINSTRATIVE] Determine involvement with GA Tech

Is your feature request related to a problem? Please describe.
Ideally this site would be at least semi-officially supported by GA Tech, Dr. Joyner for example, possibly with funding support but at least approval.

Describe the solution you'd like
Once MVP is basically done, have a discussion with Dr. Joyner about the future of the site and how this site could work with GA Tech.

[FEATURE] Make dataset downloadable

Is your feature request related to a problem? Please describe.
Often times there is a desire to make the data available to others without needing to scrape the website, this would make it possible.

Describe the solution you'd like
There should be a download button or something to that extent to download the reviews to a csv, tsv, excel, or similar format.

Describe alternatives you've considered
csv probably won't work, but a tab separated, or excel, could be a few options, but should be something anyone can download and use.

Additional context
We would have to consider the Data Governance #28 policy to make sure it aligns with making this happen.

[FEATURE] Course Review Search

Is your feature request related to a problem? Please describe.
There should be a way for our end users to search over the collection of reviews for a specific course.

Describe the solution you'd like
On a per course basis, there will be a "search" menu on each page, where in the user enters a string, and we narrow the results returned to only include those reviews that have a match.
It's also possible to "fully feature" this, and add additional filters, like date ranges, filter by ratings, hours, difficulty, et cetera which will be marginally extra effort for a lot more utility.

This will allow our end users to ask questions like: "what did my fellow OMSCSers think of the final in ESO?", or "Maybe distributed computing isn't that hard, what do the positive reviews say?", or "what do the old timers think of Computational Journalism".

Describe alternatives you've considered
I am proposing that we implement search as a server based feature that queries the database and directly returns the results. It's also possible to make a site's search work via a third party service, like ElasticSearch. However, I don't think we'll need this level of sophistication/complexity given that our search domain is homogenous (course reviews) and the number of reviews per course pretty low.

[FEATURE] Allow for the site to be used for OMS degrees offered other than GA Tech

Is your feature request related to a problem? Please describe.
It is a bit presumptuous to call us OMSHub as that just means "Online Masters in Science Hub" so kind of implying all other online masters in science are applicable, but definitely we don't mean that at the moment.

Describe the solution you'd like
Have a landing page where you pick your university and directs you to gatech.omshub.com or uiuc.omshub.com or utexas.omshub.com, etc...

Additional context
This is very much not a MVP feature and likely not a feature we will ever implement, but it is worthy of discussion and consideration.

[FEATURE] Scaffold Playwright for E2E testing

Is your feature request related to a problem? Please describe.

As an outcome of #10, scaffold some basic Playwright tests to ensure core functionality works as expected.

Describe the solution you'd like

Playwright tests that exercise core functionality of the site. Tests should run against Vercel preview builds in PR branches and against prod after merging to main.

The scope of the initial work should cover:

  • Setting up a Playwright configuration and single test case.
  • Adding a GH Actions job to execute Playwright against the appropriate Vercel build (need to figure out if it’s possible to fetch the URL that Vercel generates for preview builds, or alternatively if the URL is deterministic against the branch name, how we can dynamically compute the URL)

[DOCUMENTATION] New user guide

Add a markdown file describing the general overview of the app & architecture, how to run locally, etc. May involve pulling some information out of / trimming down the general README

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.