Client
123ConEd
Year

2017 to 2020

Deliverables
  • React Frontend
  • Django Backend

Overview

Around May of 2017, Jason and Danielle from 123coned.com came to me for help making improvements to their website. They originally began with a custom-built application that sat on top of a WordPress site. The demands for their service grew, and with it a whole myriad of road blocks and performance issues. It became inevitable that a complete rewrite was in order.

Note: this write-up is not going to dive into technical details very much for the safety and security of the client; enjoy the story

Initial Concepts

Once we met and talked about the possibility of creating this new site, I went to work putting some designs together. Mind, I had been working on tweaks and improvements to the existing website for about 18 months prior to the start of this project. I was familiar with the basic concept for the site but hadn’t actually gone through the process of buying and trying a course. So these designs came about before I began working with courses and commerce.

Building the Backend

Perhaps the most crucial and starting step to any project of this scale is an overview around the core elements to the site, what they represent, and how they communicate with one another. I went to work building out very rough schematics for each of these items and how users on the frontend could interact with them. At the time, I envisioned a RESTful API that would provide very basic create, read, update, and delete (CRUD) operations on each of these models. Most models would serve as read-only to basic users on the site, and only admins could have the ability to edit

Heat vs. REST

boston-is-hot

Since I was still enrolled full-time in classes at this point, I had very little free time to put together these endpoints. Often, I’d start work at 10pm or later in the night, and hook up as much as I could in the span of 3 to 4 hours, wake up at 8am and do it all over again. And summers in Boston are HOT, I found that out the hard way several times over. It didn’t matter if the sun was down and it was 11:30pm at night, my room was still boiling hot. And the university couldn’t care less to put A/C in their apartments (but you’d get fined if you wanted to use your own, funny how that works).

Working with Django REST Framework endpoints was driving me mad. It became very repetitive to hook up an endpoint for each model mindlessly. Since many of the models are driven by their one-to-many relationships, I found myself writing far more code than was required to support serialization. Although I’d like to think the hot weather contributed to most of the frustration.

GraphQL

I can’t remember which came first, the discovery of graphene-django or the end of a heat wave. All I knew was that my life became easier and I was beginning to enjoy late nights more and more. This new library and GraphQL as a whole promised an entirely new way of doing things. Those CRUD operations turned into query (read) and mutation (write) operations. Rather than hooking up an endpoint for each model, I served all content from a single endpoint. Writing serializers for read-only data and parsing it on the frontend? Not anymore!

While I was drudging away on frontend/backend serialization, I was so relieved to find that Apollo did all the heavy lifting for me. I could simply define a query in the backend and point its type to a defined model. Graphene converts that model into a schema type and Apollo can read that type for me. When I want to perform a query, I already have a serialized object with well-defined fields. Prior to using GraphQL, I would have to define a model, a serializer, and a view on the backend. Then, I would have to hope for the best on the frontend that my convertToBE and convertToFE operators contained matching keys. A custom API call for each operation would yield that model (or part of that model, in some cases I’d have to maintain two separate models SimpleItem or DetailedItem when I didn’t want certain attributes).

Pays Off

Working while in class proved to be very difficult, but I continued on. Countless life setbacks made it hard to find the time to continue work. Between September of 2019 and March of 2020, I moved 9 times so I resorted to doing most of my work on an older laptop.

Then a global pandemic struck in March. The one that I probably don’t have to go into detail about. I took the opportunity of staying in one location for an extended period of time to clamp down and work as hard as I possibly could. I wanted to get this site launched.

Countless days and nights went into this project between April and July of 2020. By the start of July, the site was in a presentable state and placed before several beta testers so that we could continue to refine as needed.

On August 3rd of 2020, after the last of the continuous deployment was set up, the site was finally released to the world. It was a tremendous undertaking and an absolute pleasure to work with both Jason and Danielle on this. They worked so hard to refine the site with me, and I’m proud of the work that we accomplished together.