I wanted to start working on personal projects because I felt I was missing some scope of what a full software application entailed. Adding new features and making bug fixes are great, but don't provide that breadth of knowledge I was looking for.
Development on Icefall began over two years ago. The goals I attached to this project were pretty basic, but very important to the process of building full applications in my free time. These were getting my hands on the keyboard, becoming comfortable with JavaScript, and learning incremental progress with short, medium, and long term features and goals. Making a game was a great experience because it enforced starting basic, interacting with the application, and building on top of it. Using Phaser.io and Matter.js was also beneficial because of the experience of getting into the habit of navigating through their API docs.
This project also forced me to make a personal website to host Icefall and gain an understanding of DigitalOcean and NGINX to serve the static files.
I decided on next making a real-time party game because I enjoyed the experience of making a game, but I wanted to create a full-stack application. I knew that I needed conditional rendering, a basic API, real-time updates, and a lightweight database so I began development using React, Node, Express, Socket.io, and MongoDB with Mongoose. This was definitely the project that gave me the biggest learning experience as I intensely used the technologies above and dealt with many game requirements I wanted to include. A major focus was user experience so some of these features include a player disconnect and reconnect/replacement system, displaying who drew each part of the drawing during the voting phase, and adding protections against many types of edge cases.
The application is hosted on DigitalOcean using Dokku, an open source platform-as-a-service. I created docker images of this application as well as my static website and dokku manages running the containers, using the subdomain routing I set up.
The goal of my current project is to expand on what I have previously learned. I gained a good familiarity with the technologies from making Imdrawster, but I wanted to target features more often found in a business application. These include the context API, authentication and authorization, roles and permissions, search, result filtering, dynamic forms, unit testing, and better defined code organization. I am also using Mapbox in this application to provide an interactive map of the local events.