EUL Student App

How I improved students academic life at EUL

09-05-2024

The European University of Lefke. Know as the beating heart of lefke, where I started studying in 2020. 
#EUL uses a lot of online platforms for students and the most used are OIBS and Moodle.
OIBS is a very old website for keeping students data.

The data we can find on OIBS is weekly schedule, curriculum, transcript, scores, advisor info and announcements.
OIBS has a very old UI and a complicated login process for non techy users, where you need to open two tabs, one for initializing the session and another to render the login page. After login in the user is requested to choose a role/program (Computer Science, Software Engineering, etc) and when a role is chosen there is no noticeable difference as the information displayed on the whole website is the same for all roles.

#Problems

I felt frustrated by the amount of clicks I had to do to reach something simple like my weekly schedule.
The stress of constantly opening two tabs to login and the annoyance of short session times would kill me.

So I started making a list of issues the website had and how I could solve them.
1. Old UI/UX (Totally not responsive).
2. Two tabs for login in... must be a old framework.
3. Very short session times.
4. Too many clicks to see my weekly schedule.
5. No offline capabilities like PWAs or Mobile Apps.
6. Curriculum page was actually okay, just... I wanted to make it my way at this point.
7. The forgot password functionality is broken most of the time, so best to never forget your password.

#Recon

Well... now that I have all my issues listed I can start searching online to find any topics talking about OIBS and if there are any API endpoints I could take advantage of, but I already had my doubts because of it's old UI that I would find any type of rest API.
I didn't get any results on Google or DuckDuckGo so I decided to use the network traffic to see where requests are being sent and how OIBS responds. A lot of the requests that are supposed to return 401 or 400 would always return 200, I found this to be annoying as it makes checking responses hard if there was a problem.

I also noticed that the session expiry had no information and expired when the tabs are closed.
I also found out that the reason of requiring to recreate a new tab is that the first tab was to get the session value.

Meanwhile on insomnia...

#Endpoint testing

Assuming the developers that worked on OIBS are Turkish the endpoints have some very strange names, so I would just make a list of endpoints from the networking traffic from the recon and label them as what I thought each endpoint was for.
Each step of authentication and navigating to the weekly schedule, curriculum, etc...

All endpoints returned a HTML file that I would parse using python to then extract the information.

While extracting the information for must endpoints, the hardest was extracting the weekly schedule as the HTML for the schedule was a grid and there are no identifiers to know what day of the week it is and what time of the day it is. So in order to make sure I don't waste to much time on it, checked if I can extract position information like "how many pixels from the top and from the left" and that actually worked and I was able to determine day of the week using the pixels from the left - right and time using the pixels from the top - down.

#Choosing a framework

One of the hardest decisions was to choose the right framework to build on.
I went with frameworks I already knew how to build on as my options.

Because I had used Django a lot recently, I first choose to build it using Django and Bootstrap.
I got a free tier server on Heroku when it was free (Now you got to pay $5) with their fixed domains, I did not want to spend a lot of money on renting a server and getting a custom domain name so I went with what was free and reliable.

#Issues with my first framework

Due to Heroku changing their free tier to a paid their I could no longer continue using their servers and I made a request to my University to support my application and put it on a server on campus and use their official domain names, but I was denied.
Since Django is a framework designed to run on servers and not on user devices. I was stuck in a loop trying to find another free tier server provider with a static domain name, but most of the free tier servers only provided a dynamic domain name and did not include Cron job services.

I debated on buying a Rasberry Pi to host myself, but I could not easily get one and their prices were way... passed my budget.

#The holy grail solution

While on holiday in Portugal I couldn't resist the urge to find a solution to this problem.
I research Kotlin and how to build mobile application using it, I spent one month building a prototype that worked kinda well... but had a lot of issues like UI/UX theme switching issues and at the time multi-platform compatibility was not stable and well documented on their website and youtube.

That's when I reached out to someone I met at University that had used React Native Expo and they told me that multi-platform is very good and that the experience using RNE is very good and the community is very big.

I spent the first month of 2024 learning and practicing building mobile application that include technics that I would eventually include in my new Student App for mobile.

  • Expo Router.
  • Database management for offline.
  • Authentication methods.
  • Notifications and how to handle them.
  • Background Tasks.
  • Multi-language handling.
  • Over-The-Air updates. *This is so useful.

I mainly focused on only building functions and features I knew users would like to use immediately like seeing their schedule and receiving notifications about their classes and later I started adding other features like a bus schedule and a reminder maker for setting reminders for their upcoming exams or events they do not want to miss on campus.

#Publishing to Google Play Store

At the time I wanted to publish the "EUL Student" application Google had changed their Google Play requirements for apps to be published.
Requiring developers to first have 20 testers for 2 weeks constantly using the application, I was worried about this as I did not know 20 people that are willing to use an application that has not been officially advertised by the University, but I was determined to pass this requirement so I messaged the friends that I already knew were willing to use the application and I asked some people in some of our University's WhatsApp groups to if they would like to use the application and after getting 15 people using the application I was surprised that a lot of people started asking me for access to the application and the community of the application started growing very fast and I was able to pass Google's requirements to publish the application.

Currently on Google I have achieved 4.8 star rating and 100+ downloads.

Download Here 

#The Apple Issue

I made a poll on WhatsApp in most of the universities groups to figure out how many users use iOS and Android.
60% were iOS users and 40% were Android... very big difference in my opinion.

I made a poll on WhatsApp in most of the universities groups to figure out how many users use iOS and Android.
60% were iOS users and 40% were Android... very big difference in my opinion.

Publishing on Google Play was very easy and was a smooth experience. Google Play only requires a one-time payment of $25 US dollars for a developer account and you can publish as many apps as you want.

While Apple has a more strict experience from what I have heard from youtuber and requires a $100 US dollar annually payment and you need to pay first before attempting to publish an app, this makes me very worried of trying due to the fact that I cannot afford $100 US dollar fee annually and to pay and have the application rejected is a big fear.

#What I learnt

While building the "EUL Student" app I learnt a lot from SEO to data collecting and even interacting with users to insure their bad experiences can be improved.
Down bellow is a list of what I learnt.

  • Building applications using React Native Expo
  • Using cronjobs on servers.
  • Data collecting using Python and JavaScript to scrap html.
  • Database migrating on mobile devices.
  • Background Tasks managing on mobile devices.
  • How to publish on Google Play.
  • How to collect feedback from users and to fix them.
  • Notification handling and local triggering.
#EUL please use the app

I hope one day the university recognizes the impact the application has on students and how it helps so many students with their academic life and supports the application.

I constantly get positive feedback while walking on campus from students thanking me for creating the application and how it helps them on their day to day.

Thank you to everyone using the application and I hope you all have a positive experience!