Continuing as an extension of the front-end from the previous week, I continued my Javascript marathon with coding up the head judge and attendance roles. Succumbing to temptation, I started off with the attendance role as it was trivial enough to be done in an hour or two which left me with the not so trivial head judge UI. Now, this took a while with the addition of new features for custom prizes and sorting on the front-end but was nothing too complicated. A dash of libraries here and a bit more code there and our job is done. At this point, I was expecting some changes to be required in the back-end as we have not tested it yet (waiting for the front-end to be done for ease of testing) but was quite surprised when it just worked out of the box seamlessly with the front-end so that sped up development time by quite a bit. Then came the modals that were used as confirmation dialogs. Although they did cause a minor issue by conflicting with the automated refreshing of the UI, it was able to be dealt with by adding simple checker in the auto-refresher.

Besides the completion of the front-end UI, for the first time we used the automated email system, one of the new features of the application. With 67 emails to be sent automatically, we did some testing again with sending a few emails to our own email accounts before sending out the entire bulk of the emails to ensure that no mistakes were made. However, no amount of testing can compensate for the anxiousness felt before sending the emails. Realising that, we hit send; albeit with our fingers crossed.

Email 1 sent successfully…
Email 2 sent successfully…

* begins to contemplate how spam emails are born *

Email 9 sent successfully…
Error sending email 10…
Email 11 sent successfully…
Error sending email 12…
Error sending email 13…
Error sending email 14…

followed by another 55 errors (╯°□°)╯. With around 80% of the emails failing, we informed Dr. Shawn of this issue. Based on the information he gathered from the mail service we used, it appears that our emails were being treated as spam which caused the emails to be rejected. He then decided to leave the issue as it is for now as it seemed that the mail service is attempting to resend the emails. For subsequent versions, he suggested to compile a bunch of emails into one single email per recipient to alleviate the issue.

Concerning our admin page which is made using Admin-On-Rest, Jia Wei who is in his last week of internship wrapped up his work with amending all the hard-coded links to relative paths and deploying a static version of the admin site. Looking back, it is impressive that he was able to pick up Admin-On-Rest and code up the entire admin page all within a short period of 3 weeks, despite still being a high school student which definitely deserves a job well done – kudos to him! We then integrated both admin page and front-end UI into one which more or less completed the application for release and deployment at the end of the week.

On deployment day, while there were some minor networking issues, it was notable that despite the networking issues causing the clients to disconnect, the application on the client side does not malfunction and can be brought back up with a simple retry once the network is up again. From this experience, I can now appreciate first-hand the importance of having a clear separation between the front-end and back-end aspects of a web application. It was great to be able to see that our work in the past month on separating the C++ REST API back-end with the Javascript front-end UI had finally paid off and hopefully the application is now stable enough to be used for subsequent competitions without much modifications in the future.