Projects

Parallel

published 2021-08-04

A Note About This Project

This project never actually got finished. It would have taken more time, energy, and attention than I had available while I was working on it. It was a pretty cool proof of concept though.

Unfortunately, I am unable to point you to a Github repo for this one, since it ended up needing to be made private.

What It Was

Parallel was a prototype language-learning web application, targeted at students learning a language for school. For example, those who had recently moved to the United States from a non-English speaking country, who needed to learn English for their studies.

It used children's stories, articles, or news stories that one might already be familiar with or be interested in to teach people whatever language they needed to learn. It would then as questions about the story to get a sense of how well the user understood it, and adjust the difficulty of the rest of the stories they were presented with accordingly.

It was developed as a community-centered project while I was a student of the MIT Leadership Training Institute (LTI).

The site I used to demonstrate the site to the class is still live. If you want to take a look, you can find it here. It should still be fully-functional.

The Process of Building It

The LTI put an emphasis on planning and setting deadlines for our community outreach projects, so this project ended up being one of the most fully-planned ones I've done yet.

This ended up being a good thing, since it was so large and complicated that it would have been easy to fall down a rabbit-hole and focus on one small part or feature that should have been moved on from for a long time.

I started out by building out a simple frontend and connecting a similarly simple backend. My goal in this stage was to figure out and learn to use the technologies I wanted to use for this project.

I was already familiar with much of the frontend components, however this was the first time I had ever done user-authentication or used a database in a project.

After I had all the basic parts working together (e.g. the database, authentication, the server and frontend) I planned out what the actual site should look like.

I planned out what pages I wanted it to have, how the user-experience should flow, and what components I needed to build.

After that planning was finished, I fully connected the authentication framework and made it so users could create and log into accounts. This would enable them to store progress and work on progressively harder stories.

I then built out the database structure for the stories themselves and the questions that it would ask to gauge how well the user understood. I also put a few examples in.

Finally, I built the full frontend, ensuring that users could log in reliably, and access the example stories I had put in.

This is about as far as it got. I had done some research into what it would take to make this into a fully-functioning application, however the money that it would have taken to run it would have meant creating a company, and that was not something I had time to do (since High School ate up most of my time).

Technologies I Used

This project was built largely using ReactJS. It was the framework that I built the frontend with and it also made it so I had access to packages that made it easier to connect to the authentication system and database. Within that I used React Router to handle pages and the Firebase and Auth0 packages to connect to their respective services.

For the database, I used Firebase, which is a Google service. It has a tree-like structure and stores things in JSON format, which was something I was already familiar with at the time.

For the authentication I used Auth0, one of the larger authentication services out there.

What I Learned From This Project

This was one of the first big projects I worked on, and I learned a lot from it.

Managing complexity is one of the biggest obstacles to overcome in many projects, and this one was no exception. This was where I truly learned the importance of consistent code structure, and the importance of abstraction. Without these things this project would have never been completed in time, and it would have definitely forgotten what most of the parts do by the end of it.

I also learned how a number of new technical things in this project: I learned how to do user authentication, manage user accounts, use database APIs, how page routing works, and how to use GraphQL. All of these were things that were new to me before this project, but now having an understanding of how they work I have no idea how I managed to make anything web-based before.

The final, and perhaps most important thing I learned during this project, was how to plan big things out. Breaking out massive tasks (like making this site) into smaller tasks and setting deadlines for those is something I do pretty regularly now, and it's a skill I'm insanely thankful I have. It makes me much more productive, and also keeps me sane during big projects. I have the LTI to thank for that.