Lord Beaverbrook High School App

A cross platform app built for my high school available on iOS, Android, and Windows Phone, serviced by a cloud backend.

Published on January 3, 2018

In high school, I was tasked with writing the school's mobile app. Its purpose was to keep students updated on the latest news and school offerings. After multiple iterations, the app was finally released for Android, iOS, and Windows Phone. The app was written natively on each platform leveraging Xamarin to bring the power of .NET to mobile devices. The app was serviced by a backend running in Azure which was responsible for scraping multiple data sources, packaging the content, and making it available through a REST API.

iPhone

Windows Phone

Mobile App

The app consisted of multiple pages with both lateral and hierarchical content navigation. The news page displayed the latest updates from the school which primarily consisted of photographs from recent events. The Bulletin contained information about upcoming and ongoing information on events and deadlines. There were also pages for student posts, clubs, and resources.

The app was implemented natively on each platform with Xamarin.iOS, Xamarin.Android, and UWP, respectively. Previously I had tried a hybrid implementation (using HTML, CSS, and JavaScript) and then Xamarin.Forms but the performance of each was sub-optimal and neither offered the flexibility I required. Implementing the UI natively on each platform was tremendously more work and meant I had to learn the UI frameworks of each platform individually but ultimately paid off with superior performance and a clean interface. I leveraged MvvmCross to assist with the MVVM architecture which offered XAML-style ViewModel bindings for each platform.

Backend Service

Originally the app pulled and formatted content from multiple external sources directly but it quickly became apparent that this approach had too many drawbacks to be feasible. Images from the original sources were upwards of 6 megabytes each and took excruciatingly long to load, not to mention the memory implications. There was also the issue of keeping content available should there be any issues with the external sources (which did actually happen).

The backend was composed of an ASP.NET Core server connected to a SQL Database with Entity Framework and image storage with Azure Blob storage, all running in Azure. The server was responsible for periodically scraping, parsing, and formatting data from multiple external sources then making it available through a REST API. Referenced images had to be downloaded, resized, and heavily optimized for mobile which reduced some images from over 6 megabytes to under 200 kilobytes with no noticeable differences. HTML pages had to be tailor parsed then packaged for Entity Framework. Some pages could be converted to objects while others were left as heavily modified HTML.

Current State

Working on this project was a tremendous learning experience but also a lot of work. It took almost two years to complete with multiple rewrites and changing requirements. There were some stretches where I would arrive home from school and work a further 9 hours. Unfortunately, just after release, the external sources were changed, effectively rendering the app stale. The data is still available on the backend so the app still makes a nice showpiece.