Minita: A currency converter... but better

Daniel AbayomiDaniel Abayomi
5 min read

I am happy to showcase a portfolio project I am working on for my ALX software engineering program. Minita is a currency converter web platform that helps people with currency exchange plans gain insights into the currencies they plan to exchange and make smart, informed decisions. I developed the project on my own, but I received advice from helpful individuals at various stages. The main goals of this project were to:

  1. Create a platform that can convert between various currencies using the latest rates.

  2. Add features that provide better insights into the currencies in question.

  3. Make it look good while doing so!

I handled all aspects of the project myself, from the converter feature to the news section.

Why a currency converter?

To understand the thrilling story behind this project, let's rewind a few months! As a student working on my final year undergraduate project in mechatronics engineering, I had the exciting role of group leader. We had a clear vision for our project and were sourcing components from AliExpress (its prices for hardware are simply unbeatable). With a budget estimate in US dollars, we were all set to make our purchases.

But then, the naira started plummeting, and the dollar rate was skyrocketing daily! Worried about the soaring costs, I urgently rallied my group members to contribute the funds quickly, fearing our project would become unaffordable. But guess what? Just a few weeks after our purchase, the dollar-to-naira rate dropped significantly! I was kicking myself for the hasty decision as we ended up spending way more than we had planned.

Not having many ideas, the question came to me: “Was there a way I could have seen the price changes coming or at least their possibilities of coming and increased my chances of making a better decision?” This is what gave birth to minita.

I see it as a starting point for a potentially useful project.

Architecture, Technologies, and Features.

Architecture

For the MVP, I simply chose to use APIs to access needed data and transfer it on the flask application

Technologies

For the front end of the platform, we used HTML, CSS, and JavaScript along with helpful libraries like Chart.js, SlimSelect.js, Google Fonts (Open Sans), and Normalize.css to make development easier and more functional. The color codes, styling, and other functionalities for formatting were written from scratch.

The entire system was built as a Flask application with the backend using Python. Since my goal was to finish on time, I chose Flask because:

  1. Python, in my opinion, is a language that makes it easy to quickly create something

  2. the alternative option (JavaScript) required a lot of technical setup compared to Python web frameworks. PHP, my second option, was not treated in the curriculum

  3. Flask is quite beginner-friendly for making web applications.

Features

I would divide the project into three main features:

  1. A currency conversion section that converts from one currency to another using the latest daily rates gotten from a currency prices API

  2. A section showing stats on the currencies being converted like price history for different timeframes, volatility, and sentiment analysis

  3. A news section showing relevant news concerning the currencies chosen for conversion

Challenges

I would say the most challenging feature in this project was the price chart in the stats section.

Thanks to how quick and easy it was to set up Flask, I was able to complete an initial MVP quickly, but it felt too basic. I thought a Google search to convert the rates would be better, so I decided to improve the features. My original plan was to show the chart for price history for the past week, so I wanted to add options for multiple timeframes. My initial method to get the chart data was to export the price history data to a file in the \static directory and then use a JavaScript script to render it using Chart.js.

However, that probably wouldn't be a good idea for multiple timeframes. I felt there was a better way. By now, some experienced software engineer would have been screaming the answer to my problems, but the obvious answer didn’t dawn on me until a quick ChatGPT prompt. Guess what the answer was? Of course, making an in-app API to send the data for the timeframes when requested.

Flask’s simplicity made it easy to implement my application’s API and, using JavaScript, make requests to it on the front end for different timeframes.

Lessons Learned

I learned a bunch of other things in this project like:

  • In JavaScript, I learned about helper functions for handling data like toLocaleDateString() and toLocaleString() alongside how to properly access values in the DOM and how to call API’s using JavaScript. I also learned how to use libraries like SlimSelect and Chart.js

  • I learned about how to properly handle API tokens safely using a config file for a Flask application

  • I learned about Jinja templating and caching functions to make things faster using Flask-Caching

This project made me realize that some tasks I thought were too big for me were just because I never really tried. I had built a mental wall between those concepts and myself. This portfolio project showed me that I can do more as an engineer.

There were some challenges, like the fact that price history and stats were gathered somewhat inefficiently and that the news API wasn’t suited for currency exchange. If I had more time, these are things I would improve.

Another thing I have come to like is Trello. It’s a great tool for managing features. I plan to keep using it for the foreseeable future.

Conclusion

I am someone who has an interest in trying to be a master at a few things and somehow always pulls through. You can check out the project’s landing page here and main app here and the GitHub page here. You can also check out my LinkedIn here.

0
Subscribe to my newsletter

Read articles from Daniel Abayomi directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Daniel Abayomi
Daniel Abayomi