I’m participating in a course called Linux project (ICT4TN018) at Haaga-Helia University of Applied Sciences. This article is a the first one about that.

My project will be a Ruby on Rails backend API for my Bachelor’s thesis RubyMotion mobile application, including:

  • Ruby on Rails implementation of a RESTful API
  • Deploying and running that API somewhere
  • Sending notifications to users
    • Push notifications to iOS and Android devices (meaning Apple’s and Google’s servers)
    • E-mails (maybe only to users who have push notifications disabled)

Goal of the project

The goal is to create a Ruby on Rails backend application, to be used as an API for mobile apps.

The application will be a reminder system of common household maintenance tasks. The end-user will answer questions about their household (for example: “Do you have a dishwasher?” or “Do you have fire alarms installed?”) and store the user’s answers, and then remind the user about maintenance tasks when it’s time to do some maintenance (for example: “Clean the dishwasher’s filter now!” or “Change the battery on your fire alarms”).

The backend application should be responsible for:

  • Single source of truth: Which appliances are supported in the app, and what are their possible maintenance tasks
  • Managing users and their login credentials
  • Storing the user’s information (owned appliances, past maintenance jobs)
  • Sending e-mails and timed push notifications for the users

Technical details

Ruby on Rails application using Ruby 2.3 and Rails 5 beta (although I know it’s generally not a great idea) because of the new --api feature available there (easy to create a Rails app without any UI).

Data will be persisted with ActiveRecord to a MariaDB SQL-database running on a separate Docker container. Orchestration and linking of these containers is done with Docker Cloud

E-mails will be sent trough an external service SendGrid and push notifications probably with rpush.

Application will be running inside a Docker container based on the official Ruby images which are based on Debian Jessie. The docker image can be hosted for free at Docker Hub.

Deployment using Docker Cloud, utilizing Ubuntu host machines running on DigitalOcean.

Weekly timetable and milestones

Week 13:

  • Do the project plan, start on the RoR API.
  • Work on deployment system. System running in production from the start!
  • Release version 0.1 - Basic RoR API with most of the resources present that I will need

Week 14:

  • Nothing, work trip to Norway.

Week 15:

  • Work on the API
  • Research on the push notifications
  • Release version 0.2 - Most important business logic in place, the API is usable already

Week 16:

  • Finalizing work on the API, work with push notifications.
  • Release version 0.3 - Push notifications in place (not sure if properly testable, if any mobile app isn’t ready yet)

Week 17:

  • Feature freeze. Get the main features working without problems.
  • Write documentation if it seems necessary (at least the basic stuff for Github README.md)
  • Release version 0.3.x - bugfixes and general improvements

Week 18:

  • Final bugfixes.
  • Release version 1.0.
  • Presentation to class.

Time to spend and risks

I think completing this project will take quite a while of development time. Especially with the push notification systems which are completely new to me.

My time during this course is very limited due to having a two-month old baby <3 to take care of, working full time and doing my bachelors thesis at the same time. So the most probable risk is that I simply don’t have enough time to work on this.

I estimate I can use couple of hours on few days between monday and friday, plus maybe 6 hours each weekend. So in total 10 hours a week. Not counting week 14 that will be a total of 30 hours before features freeze and in total 40-50 hours.

At this point I think it’s doable. We’ll see how it goes :)