MMC Conference of Workshops.

Organize attendance for presentations.

Context

Each year members will attend a workshop. The workshop contains a number of talks allowing teachers to share the newest information in their field, or something they did during the year with their students. The workshop is split into 3 periods. Each period contains a number of talks. Each talk has a limited capacity of attendees.

Requirements

Build a service that allows members to register and pay for the workshop. When a member registers, they will pick 3 talks they would like to attend for each period. When an administrator is ready to create the schedule for all members, they will run a script. The script will organize the schedule based on time of registration (earlier gets placed in their top pick). If a talk is full, the member will be scheduled for their 2nd pick, and same for the 3rd pick. The administrator can now look at the schedule and adjust accordingly, forcing certain members for attendance (maybe a sibling is interested in attending).

Stack

Node.js, KeystoneJS, MongoDB, PayPal API

Learnings

This was the first time I worked with KeystoneJS, Node.js, and MongoDB in a Production setting.

KeystoneJS is an all-encompassing CMS. Allowing a quick ramp up for user registration. The administration was already wired up. The biggest learning here was configuration and template convention. Learning how to name files to make sure KeystoneJS picked them up. The second biggest learning was how to register Mongoose Models. There were some pain points while hosting a Node.js app on a shared and managed hosting platform. For example, I couldn’t turn MongoDB into a service meaning the Node.js app needed to start MongoDB separately and wait for database response.

I’ve used Node.js before for side-projects. I did need to understand how to restart the application when an exception occurred; Nodemon was particularly helpful. Debugging locally was convenient with VSCode. Everything else outside of KeystoneJS was similar enough to JavaScript for me to work with; and even write unit tests.