
Project LunaPOS
- Published on
- Written on by Yayat Hidayat.
Brief Overview
LunaPOS is an app I developed and maintained at PT Luna Aplikasi Indonesia. Through this project, I honed my skills in maintaining legacy dependencies while improving overall performance.
Project Goals
The goal of this project is to provide our merchants with a Point of Sales software to monitor and manage their products and inventory. We need to ensure the app performs well with large datasets, integrates seamlessly with thermal printers, and works smoothly with payment gateways and QRIS.
Tech Stack
In this project, we used React Native as the base code and MobX for state management. We also implemented a local server, which we call the Middle Backend. This backend application runs locally, enabling offline mode with large datasets and allowing multiple devices to share a single local data center at the merchant's location. To achieve this, we used nodejs-mobile-react-native
. Additionally, we integrated several thermal printer libraries to support a variety of thermal printers.
Spotlight
Implementing QRIS Integration
In this project, we are integrating QRIS as a payment method for merchants to use in their orders. This integration ensures seamless payments through various digital payment options available in Indonesia.
Split and Merge Bills
To provide customers with the flexibility to split or merge bills, we face a challenging task. Although it may seem straightforward, the reality is complex. We need to merge multiple order records or split a single order into several records, ensuring accurate reporting throughout the process.
Develop Attendance Feature
This feature assists merchants in tracking employee attendance. The challenge lies in accurately recording attendance across various shift times, but ultimately, we successfully delivered this feature.
Challenges and How I Conquer Them
In this project, I faced several major challenges. Here are two of the most significant ones
Managing Deprecated Libraries
In this project, we aim to support a variety of thermal printers and their respective libraries. Several of these libraries are deprecated and no longer updated, but our merchants still rely on these printers. Therefore, I had to clone and patch each library individually to ensure they function properly.
One library required an update to its .jar
file. To address this, I extracted the .jar
file, made the necessary fixes, and re-bundled it. This was my first time handling such a task, and it worked successfully. In the future, I will be more confident in tackling similar challenges.
Upgrading an Outdated React Native Version
This project was originally built on an older version of React Native. When I joined, it was at version 0.58.4, which had been upgraded from an even older version by a previous developer. I was given a two-week deadline to upgrade it to version 0.60.0, but I challenged myself to complete it as quickly as possible.
I successfully upgraded to version 0.60.0 in less than a week. With the remaining time, I experimented with upgrading to higher versions and ultimately succeeded in upgrading to version 0.62.0, which resulted in a 10% improvement in RAM usage.
Although I aimed to upgrade further, we had other prioritized tasks, and version 0.62.0 was sufficient at that time.
Lessons Learned
In this project, I learned how to manage and update an old project to ensure it runs smoothly in the current environment.
From this project, I learned the importance of minimizing the use of external libraries to avoid potential issues with discontinued libraries in the future.
Through this project, I honed my ability to quickly read and understand documentation to grasp changes in each version of the technologies we use.
View The Project
You can find the app on PlayStore