/yacs

Yet Another Course Scheduler

Primary LanguageRubyMIT LicenseMIT

YACS - Yet Another Course Scheduler

Build Status Coverage Status Code Climate

Simple, Sane Course Scheduling. To use YACS @ RPI, visit https://yacs.cs.rpi.edu.

What is YACS?

YACS was created with the goal of making students' lives a little easier. It allows users to avoid the often clunky UIs of proprietary Catalog Management and Student Information Systems by enabling easy browsing and searching of courses, and adds the additional functionality of easy schedule generation.

YACS is capable of aggregating academic data stored across multiple proprietary systems, including course offerings, section meeting times, and seat availability. This data then is presented to users in a searchable, browesable form.

Most importantly, YACS leverages meeting time data to provide students with an easy way to plan their semesters. Students need only select the courses and sections they would like to take, and are given a list of all valid schedule variants based on their selections. Schedules are presented in a weekly-calendar view, and are easily downloadable and shareable.

All of this functionality is exposed through a public REST API, making it easy to create exciting new applications and extensions that leverage the data YACS provides.

YACS is currently only in use at its alma mater, the Rensselaer Polytechnic Institute, but it is decoupled from the university by design. If you would like to get YACS set up at your school, please contact us. We are very eager to expand!

YACS is primarily developed within RCOS, the Rensselaer Center for Open Source, an amazing organization at RPI that aims to facilitate open source education and solve societal problems. However, other developers and universities are strongly encouraged to contribute to and influence the direction of this project.

Visit our blog, pull requests, and issues page for development updates and information.

YACS Status, Architecture and Extensions

We are currently working towards a microservice architecture to enhance extensibility and decrease coupling between the core YACS project and any universities that implmenent the application. The new architecture will consist of the following core service types.

Core Services

yacs-api

(This repository) yacs-api is the core YACS API. It is written using Ruby on Rails. It provides a centralized, hierarchal interface for your university's course-related data. It holds and provides data on a university's schools, departments (subjects), courses, sections, and meeting times. In addition, it provides an interface for the scheduling algorithm, and can generate valid schedule combinations given a list of selections. All rivers flow through yacs-api. See API Docs for more information. Repository

yacs-web

(Currently this repository, but moving to its own eventually). yacs-web is the YACS web frontend. The frontend in production currently is written in VanillaJS with a side of Handlebars. It provides an easy-to-use web interface for browsing, searching, selecting, and scheduling courses. The frontend is currently being rewritten in Typescript / Angular 4.0. This new version should be more maintainable than our current roll-your-own solution. If you would like to contribute to the new frontend, please visit its repository. Repository

yacs-catalog

In development; near complete. yacs-catalog pulls and aggregates course and section data from a university's data sources, of which there are often many. This service exposes a simple HTTP API and is easily replaceable. If you wish to deploy YACS to your university, you will likely have to modify or replace this service. The example included here to be used at RPI aggregates data from Acalog ACMS and Ellucien Banner. If your university also uses these services, then you may not have to write any code to get YACS working! Repository

yacs-updater

In development; near complete. yacs-updater is a simple service that pulls data from the yacs-catalog service and pushes it to the yacs-api on a regular interval. This service is easily interchangeable if it does not meed the needs of your university's existing software ecosystem, but should be sufficient for most. This service, combined with the yacs-catalog service, is designed to replace the existing background job in yacs-api that pulls data from several sources and updated the database accordingly. See the admin-api branch of this repository for the secure POST/PUT/DELETE extensions to the YACS API in progress. Repository

yacs-admin

In early development. yacs-admin is a secure admin panel that will allow administrators (student maintainers, registrar staff, sysadmins, etc.) to manually edit and add courses and sections and prevent changes from being overwritten by automatic updates. This service will use the same extended YACS API as yacs-updater. Repository

Other Dependencies

YACS depends on PostgreSQL, Redis, nginx and Solr. The included docker-compose file specifies images and configurations to containerize and link these dependencies, so you don't need to install or configure anything. A secure and omptimized nginx config is also provided.

Projects that integrate with YACS

These are examples of projects that have been developed by other independant teams and either integrate with YACS or use its API. These are great examples of what can be accomplished with open, accessible academic data.

suggestr

Suggestr is a machine learning based application that suggests courses to students based on the courses they have taken and the course paths of other students. Repository

yacs-notifier

In early development. yacs-notifier will allow students to register to receive notifications when specific courses and sections become available (i.e., when there are available seats). Once it is at a reasonable stage of completion, it will be integrated into the yacs-web core frontend

alexa integration

An Amazon Alexa app that uses the YACS api to query available seats and check for conflicts between courses. We plan to extend this to support additional queries in the near future. Repository

There are several other projects out there that use the YACS API. If you'd like yours listed here, submit a pull request to this README!

API Docs

YACS includes a JSON API that is public by default. This can very useful for providing a standardized way of programatically accessing the data in your school's course catalog and/or student information system if no such resource exists or is publicly accessible. The API includes course searching and filtering, as well as the scheduling feature. Documentation can be found in the wiki. There is also a Swagger Specification that is in development.

Setup

YACS uses Docker and docker-compose to make setting up a breeze! See the wiki for instructions to run the app and its dependencies in development and deploy YACS at your own school. This may look like a lot of services to manage, but docker-compose and the provided scripts make it trivial to deploy YACS on a single host and update the application!

Mobile

The YACS web frontend is mobile compatible but not mobile friendly. We aim to make the existing frontend mobile friendly as well as provide native experiences.

iOS and Android apps are in development. They can be found at Our iOS app repository can be found at https://github.com/YACS-RCOS/YACSiOS and https://github.com/YACS-RCOS/YACSAndroid respectively.

Contributing

We encourage you to create issues and contribute to YACS! To contribute fork the repo, comment on an issue, and submit a pull request to the staging branch. Build checks and code reviews are required before merging. Once changes are verified in the staging branch, they will be merged into master and a new release will be created.

Code of Conduct

YACS is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

YACS is an open source project released under the terms of the MIT License