/Winston

an AngularJS schedule builder for UAlberta students

Primary LanguageJavaScriptGNU Affero General Public License v3.0AGPL-3.0

Winston:

Deprecation Notice: Winston is no longer maintained as of April 11, 2017.

Winston is a schedule-building web app for University of Alberta students.

  • Curious about a course? Browse the catalog with realtime search
  • Got a busy semester? Block off your commitments and Winston will work around them
  • Like to sleep in? Block off your mornings

It lives at http://heywinston.com.

Winston is not official University of Alberta software - it is built by students for students.

find a schedule

Tech Stack

Winston relies on classtime for course data and schedule generation. classtime has extensive documentation linked on its own project README. classtime was developed in parallel with Winston, but is very extensible to other platforms.

Winston itself is an AngularJS web app. It does not directly talk to the University of Alberta LDAP server, it requests API endpoints from classtime. Neither does it do schedule generation - this is also done on classtime. Winston consists of two main UI pieces: an accordion to show couse data, and a schedule view for showing schedules and adding busy time.

The course data is displayed in an triply nested accordion which lazily renders each panel as its opened. Lazily rendering the accordion has huge performance benefits that allow it to be smooth on both web and mobile.

For the schedule view, it uses a heavily customized version of FullCalendar. The calendar allows resizeable busy times to be drawn on it with a click of the mouse or tap of the finger.

Usability is a huge focus. We aim to not need instructions or help buttons - the UI should be intuitive enough. Mobile friendliness is also a huge focus. Each feature works the same on mobile as web, and we try to minimize performance loss.

Winston uses a Node server and Jade templates, so it's pretty easy on the eyes. It's built in production with gulp.js, and hosted in Heroku.

Building Locally:

  1. $ npm install
  2. $ node app.js

The npm install will install all npm and bower dependencies in their respective directories, and run the gulp.js build script. When running locally, it will default to serve unconcatenated/unminified dependencies. To mimic running in production, hardcode the prod variable to true in /app.js. This will serve the gulp.js built concatenated/minified dependencies exactly as-is on the production site. To force the gulp.js build script to run again (if something is changed locally, for instance) run $ gulp default.

Contributing

Feel free to submit an issue or contact me -- suggestions, bugs, ideas, or interest to help.

Goal

The goals of Winston and classtime together are to help students quickly make schedules tailored around their lives.

With inspiration from: