AMA Online Account is the web interface used by the 1 million members of the Alberta Motor Association to manage their membership. It consists of nearly a dozen front end Rails applications communicating with a Rails API site, which communicates with services delivered by other teams at AMA or externally.
Added the ability to add family members and upgrade membership. The Summary behaves like a shopping cart: multiple family members can be added before a purchase is made. A payment pro-rated to the renewal date is then taken.
Built a Gift Card interface which allows members to reload various AMA related gift cards. The Esso Gift Card even has the ability to be auto-reloaded if it goes below a certain threshold.
Created a Billing Dashboard which displays what a member owes, their previous billing history and the ability to opt into receiving an e-bill. Developed the membership statement for each year which shows a breakdown of where they received value out of their membership, displayed in a pie graph.
Developed a dashboard which shows all relevant roadside information to the member. Allows the submission of an online request for roadside, or a battery quote, and show how many roadside calls a member has available. Designed a wait time widget that updates the wait times depending on a chosen location, without refreshing the page (with AJAX).
Allows vehicle registrations to be automatically mailed to the driver every year, saving time and hassle. Multiple vehicles can be added at the same time. Successfully processed more than 30,000 vehicle registrations in less than 8 months. This is an exclusive AMA member benefit, and is not available to anyone else in Alberta.
The registrations currently go into a AMA Simple Queue using the shoryuken gem, and then are passed on to another service to be processed by registry agents at AMA.
Global News | CBC News
Did numerous redesigns of the Join funnel and Promo funnel, according to the specifications of the business.
Ruby on Rails | PostgreSQL | HTML/SASS | JQuery | CoffeeScript
Rebuilt AMA's driver education platform, allowing more courses to be enrolled and taken online. The Ruby on Rails app interacts with an in-house Microsoft Dynamics CRM, using various forms to collect and organize student registration information. Moodle is used to display the online course itself, and the student is logged in using a cookie (they don't need to maintain their own moodle account)
There is a similar app created just for agents to allow them to to register a driver ed student when they come into an AMA Centre. CRM specific logic was added to a gem we created in order to allow code sharing between the apps.
Ruby on Rails | Postgresql | CoffeeScript | jQuery | Microsoft CRM | Moodle
Developed an insurance quote tool for AMA Home and Auto insurance. Guidewire specific information that was not AMA related was encapsulated a new Guidewire gem. Unlike other multi-page forms at AMA, Active Record (PostgreSQL) was not used to maintain the state of the data in intermediate steps. Instead, the Guidewire gem was designed to simulate a database, but instead made api calls to the Guidewire installation developed and maintained by the insurance team at AMA. While this counter to how a Rails application works in it's most natural state, it made it easier to maintain the state of the user data, as it was not persisted in multiple places.
Ruby on Rails | CoffeeScript/JQuery | HTML5/SASS | PostgreSQL | Guidewire
Designed and built a nested Todo app in react. Uses AWS Cognito for authentication and allow each user to create their own nested stack of Todo's. One can estimate how long a task will take, and measure their progress throughout the task. Each task can be infinitely split into further subtasks. When main tasks are completed, they go are moved to the "Completed Task" tab. Deleted tasks go to the "Deleted Tasks" tab where they can be permanently deleted.
The estimates (pomodoros) from each subtasks are added in the main tasks, and we can thus see the total amount of estimated time completed versus the total time. The app doesn't actually track your pomodoros or whatever units of time you choose yet, it merely asks you to give estimates on how long something took. This makes it easier to fill in a task after the fact, without having to record it as you're doing it
React JS | AWS Amplify | AWS Cognito | AppSync | DynamoDB
Free PDF 2 JPG conversion tool. Uses React JS for the front end and is hosted on S3/Cloudfront. Uses API Gateway and a couple lambdas to to convert the pdfs, and stores the result in S3. Serverless is used to generate some of the backend, other parts a built with AWS Amplify. Users can view previous PDFs uploaded on the same device by selecting them from the dropdown. The references to these uploads can be locally deleted, but the server only removed them after 30 days.
I've added an animated GIF to the site that shows how to use it, to try to encourage it's use. I think it's unique compared to many other pdf converters i've seen in that you can view thumbnails and full screen images before downloading anything, which makes it very convenient to download only what you may need.
I've written up a tutorial on how to build an app such as this. Click on here for Part 1 - React App. Part 2 (More React Components) is here, and Part 3 (Serverless Lambda) is here.
ReactJS | Amplify | NodeJS | Serverless | S3/Cloudfront
Developed the AMA Driver Education Learner's Licence Practice Exam to sharpen student skills in preparation for their Alberta Class 7 Learner’s Licence exam.
React Native | Serverless | AWS Lambda (Node JS) | Appsync | DynamoDB
Road Reports is an Alberta wide road condition site, featuring images of road cameras updated at regular intervals. It features up-to-date road closure information and other road events, as well as traffic flow from Google. Road Reports is intended to help Albertans make better travel decisions, especially in the winter. Snow-covered roads are marked in yellow and red, depending on severity. Further, each location in Alberta displays the wait times for AMA's services, (towing, battery etc).
Most information is pulled from 511Alberta and other sources throughout the province. The Camera images are downloaded to AWS S3/Cloudfront first, and thus the traffic to the original sources is mitigated a great deal.
I was tasked with rewriting the Ansible scripts to re-create the servers in a new account and VPC, and using a newer versions of Ruby and Rails. The original Road Report app was one of the oldest rails app built at AMA, and was very outdated compared to the other apps.
The Cameras from Calgary are from a different source that much of ones throughout the province. I was required to create a script to access these images and upload them to AMA's S3 Bucket every few minutes, and to read the images into the camera objects so they could be displayed. As part of this, I redesigned the admin interface of the application to give the ability to manually turn off Cameras that happened to be malfunctioning. This proved to be much more reliable that trying to filter them out of with any kind of image recognition I could devise. Without human intervention, it was difficult to determine if the Camera was malfunctioning, or if it was just very dark outside, for instance.
In September 2018, my team and I were forced to drop everything we were working on and quickly switch to the new 511 api endpoints, as the old servers were going to be shut off in less than a month. This required me to switch the api endpoint of several layers of the site. Several data point had to be interpolated, as we didn't get the same amount of data as we did before.
Ruby on Rails | CoffeeScript | Postgresql | Handlebars | CSS/HTML
Developed an internal shopping cart app for AMA agents to use in order to make a purchase. There was an over the phone or in-centre option to using the cart. When over the phone, the agent was to use PureCloud to record the screen and the voice conversation they were having with the customer. When the payment page was open, the recording was designed to pause, in order to prevent sensitive credit card information from being recorded. If customer completed the transaction or went back to the previous page, it hard to be resumed. This resulted in some complicated redirect logic, especially because pausing purecloud was a multi-step process, where the first api call required a redirect to ensure the agent was logged in.
React JS | AWS Amplify | AWS Cognito | AppSync | DynamoDB | PureCloud
My work for the Edmonton Dream Centre, and a course on Technology for Teachers inspired me to try to build an educational platform that would function both as a testing tool and a learning platform. While quiz-making apps exist, most do not support the creation of even rudimentary learning modules. Even educational tools typically cater more to Quizzes (for instance Socrates), or more on learning content, at the expense of testing (Blendspace comes to mind).
The Dream Trainer is an attempt to combine both learning modules and testing (multiple choice, for now) in a single web interface. While designed for the Edmonton Dream Centre, it will be made available to the public as well.
Unlike more open platforms like Udemy, Students or Employees (leaners) will only be able to participate through an invite from an instructor, making it ideal for a classroom or a business where information should not be made available to the public. Each instructor will have their own private space to create modules and quizzes, and the people he invites will be able to view only the one instructor's material.
Ruby on Rails | HTML/SASS
This Blog itself is a Ruby on Rails app that I've developed to serve as my home base on the web. The admin side is a content management system that allows the creation of Portfolios with additional items attached to them. Both Blog Posts and Portfolios can be visible at my discretion, and Blogs can even be released at a predefined time. The comment system is nested recursively, allowing comments respond to other comments. Images are uploaded to S3 with Paperclip. I deploy the Blog using Capistrano to an EC2 on AWS
Ruby on Rails | S3 | PostgreSQL | HTML/SASS | Bootstrap