FunWithAlgorithms — A web app to take notes and revise concepts of algorithms

Who knew an idea for a webapp could give me so many learning points and a permanent place to store and revise any algorithmic concepts which I come across. I am a great fan of solving problems on various platforms and the thing which has troubled me since quite sometime is that, I didn’t have a place on my own where I could store the problems which are challenging or important or the problems which provided deeper insights into some concepts for me. I know what most of you people reading this would think — I could create gists or a repository dedicated to storing the aforementioned stuff or — I could(like good old school/college times) take notes(of which I am personally totally NOT a fan of!). But the problems with those approaches is that, whenever I try to look into a concept I came across sometime before, I have to login to github, go to my repository and find the specific folder and then get the required content. Or if I maintain notes, I have to scramble through them (which obviously would take sometime) and find whatever I am looking for.

So I decided, why not build my own portal to store them! In this way there were several benefits:

  • The site would always be one click away.
  • I could sort the concepts by category and whenever looking for something specific, I could search them by that.
  • Building this portal would be a great learning point for me, as being a developer myself, I would be handling everything starting from data modelling to deployment and CI/CD.

Well, needless to mention, I really am reaping those benefits! Building an entire application from scratch does provide so many great learning points. There were some challenges no doubt, but I figured them all out by myself and completed it finally. Well it has been nearly two months since my first deployment now and I have been building upon that to add a few more features too.

The main features of this application include:

  • Role based authentication. I myself being the creator of this application, am the super user. Any new admin registering themselves would require to verify themselves with an OTP which would be sent to me at the time they try to register.
  • Category based filtering of algorithms. This saves time when anyone is searching for a particular problem. I have been meaning to implement filtering by searching for it(may be through an input field) but haven’t implemented it yet. I might include it in one of the future releases but haven’t thought much about it.
  • Clear and concise explanations. I try to keep the concepts as short and clear as possible. I collect the information from various trusted sources online.
  • Admin portal dashboard. This gives an insight about the how many algorithms of each category have been added till date into the database.
  • Regular backup of data from my database, so that if ever the database goes down or I lose all my data somehow(which is a really remote possibility), I can re-run my application and seed data into my application in a couple of minutes.

Here is a quick demo of the application that I’ve built:

This application is built on MEAN stack(which is one of my favourite stacks! 😎). It is deployed on AWS and uses Gitlab Runner for CI/CD. The app is live at https://funwithalgorithms.tech/

Some of the challenges which I faced while building this application are:

  • Role based authention.
  • Uploading images to S3 using AWS SDK.
  • Setting up nginx as a proxy server along with domain name mapping and and ssl configuration using certbot.

I will include some links which I used as a point of reference for the above challenges. I can’t post the exact cofigurations, code snippet or implementation details here as it is a live project, but some of my previous articles have garnered a lot of good attention, so I assume if anyone reading this is curious about anything related to implementation, they can contact my anytime and I am always open to discussion 😃

Points of Reference:

A tech-geek, curious creature, willing to learn new technologies to build interesting and intelligent systems...