LectureLoot

Introduction

LectureLoot is an 8 person project for the CEN3031: Software Engineering class at the University of Florida. It spanned across three different platforms: Android, iOS, and the Web.

Its purpose was to provide students with an incentive to go to class by allowing them to bet whether or not they'd attend class. At the end of each week, the money lost by students who didn't attend class was split between all the students who ended up going to class throughout the week.

While the majority of members worked on Android and iOS, I built the web platform that provided these native applications with data through an API. I also leveraged Laravel to build a mobile-first experience for the LectureLoot website.

API Design

In order to get data to each platform that our team was supporting, we needed a centralized location for managing connecitons to our database. Using REST principles, alongside Laravel, I was able to build a robust API that supported JSON requests directed towards it. The application returned an appropriate status code to each request and also had a JSON body containing any information the client requested.

Each request was authenticated by using an access token generated by the server for each user making the request. This token would last for a given time before it would expire. This feature helped with rate throttling and also made sure that only authenticated users could access information from the application's database.

For a look at some documentation on the LectureLoot, feel free to check out the Google Document that a project member and myself worked on here.

Course Crawler

One of the major problems that the LectureLoot encountered initially was getting all the data we needed about student's courses from the University of Florida. Unfortunately, there were no official resources that our team could use in order to get the information that we needed.

To solve this, I ended up writing a JavaScript script that later became my CC project. It leveraged Node.js and visited all the Course Registrar pages and parsed all the information that LectureLoot needed and then saved it to our database.

Build Tools

One of the most interesting things about the LectureLoot project was the use of build tools in order to automate tedious taskt that arose during development. Using a variety of Grunt tasks and tools like Sass, I established an efficient workflow that encouraged quick iterations for faster prototyping and development.

Grunt

The automatic task runner, Grunt, provided many useful tasks that corresponded with needs of the LectureLoot web application. Common tasks like compiling, minifying, or compressing files were easy to configure and setting up using a corresponding Gruntfile for the project.

The most interesting task incorporated into the LectureLoot build process was the use of the webfont grunt task. This allowed me to incorporate icons from Entypo into the project's css and also made using these icons simple.

CSS Preprocessor: Sass

Another exciting tool used in the LectureLoot project was the CSS preprocessor known as Sass. Because of the use of SMACSS CSS architecture and BEM naming conventions, developing and creating new CSS was incredibly simple. The use of sourcemaps also greatly simplified the process of identifying CSS issues.

Conclusion

LectureLoot was the first web application that I developed outside of work. As a result, I was able to use a number of trending technologies and could choose to support more modern browsers. These lightened limitations allowed for me to progressively enhance the website by using CSS3 features to create unique and engaging experience.

Ultimately, this project was incredibly fun to work on alongside my other team members and I look forward to building more awesome things for the web.