High/Low
The Inspiration
Social media took the world by storm - and not all of it was a good thing. Increasing research and evidence has shown the many detrimental effects that the culture and format of social media can have on people.
I wanted to create a new platform that allowed people to connect on a more personal, vulnerable level. That was the inspiration for High/Low: an app where users could post a "high" and a "low" for each day, taking a minute to reflect without the pressure to present a "perfect" life.
Eventually, the app expanded to support other forms of content, such as diary entries, audio diaries, and meditation sessions.
Tech Stack
The process of building this app began with a design. I hopped on Figma (my favorite app design tool) and drew up some screen layouts. From there, I had to decide how I wanted to build it.
As with most apps, I needed four main things: a frontend framework, a server for backend code, a storage solution, and a database.
I chose to use MySQL as a database, since I knew there would be a lot of table joining involved in queries for this app.
For a backend API, I went with a Python Flask application hosted on Google App Engine. Google Cloud Platform also became my storage solution, allowing for seamless integration and beginning my long-time inclination toward GCP's products.
Everything here was built from scratch: I built my own authentication system with JWT access and refresh tokens, and my own algorithm for generating user feeds, on top of all the standard API operations.
On the frontend, I felt it was important to develop native applications separately for iOS and Android. On iOS I developed the app using Swift and UIKit, and for Android I used Java (I know, it's old but I already knew the language and it worked perfectly well). In the process, I also developed my preferred architecture for mobile apps, setting a precedent for how I've worked since then to build mobile apps that were performant, efficient, and organized under the hood.
After launched, I needed a place to view important analytics, manage flagged content and bug reports, etc., so I took it upon myself to build an admin dashboard. This involved extending the authentication system on the backend to support roles and permissions, as well as building a second Frontend using VueJS.