Retain
The Inspiration
As any college student (and/or your own experiences of cramming before exams) will tell you, doing well in classes often requires retaining a lot of knowledge. But the options on the market weren't what I was looking for: Quizlet provided a well-designed, engaging platform, but was geared more toward cramming and rote memorization rather than the more effective learning techniques of spaced repetition and active recall.
On the other hand, apps that did incorporate these features like Anki were old and not designed for today's cloud-based world.
I built Retain to fill this gap: it features a spaced repetition algorithm like Anki, with the ability to create fill-in-the-blank style cards to incorporate active recall. And the best part: it's all cloud-based, saves instantly, and syncs with the corresponding mobile app.
Tech Stack
Because of the complex queries that would have to be used to perform spaced repetition, I decided early on that I wanted to use a SQL database for this project. I didn't want to spend an incredible amount of time developing a backend and maintaining servers however, so I chose to go with my absolute favorite SQL SaaS, Supabase. This provided me with a prebuilt authentication flow, a Postgres database, a capable storage solution for image uploads, and lightning-fast Edge Functions for additional backend code.
For the web app frontend, I chose VueJS for its flexibility and simplicity. Vue's reactive state management is often simpler to use than that of similar frameworks like React, and I particularly love that I can define a component's HTML, CSS, and JS all in one file to keep things organized. I then used the Ant design framework for prebuilt components to speed up development.
Once I had the web app complete, I began work on the mobile version. For this, I chose Flutter because of its cross-platform compatibility and declarative UI. The Dart language was a pleasure to use, and resulted in one of the fastest mobile development experiences I've ever had.