Mobile Application
Product Shipping Validator.
Lorenzo Ramirez
Posted 03.05.24
•Updated 04.22.25

introduction.
Final Co-op Project
During my final year working at Arden Companies, I was given the project to develop an Android app that can support the employees who review the products that arrive in the shipping areas with recording and ensuring that all expected products have arrived at their facility. Each product would be equipped with an RFID tag that held their EPC (Electronic Product Code) and the quantity that the employees would scan. As a short overview, my application would be connected to the employees’ external RFID scanner via Bluetooth to record which products are present and display those within a scan summary on the app.
I was the only developer responsible for designing the user interface and bringing the application to life with the guidance of my supervisor and other IT employees that were able to answer my questions. The freedom that Arden gave their co-op students to take full control of their own projects was a double-edged sword…
I work the best as a solo developer, so that kind of independence was very welcomed! *[I’m definitely not saying I don’t work well with others. It’s just much easier for me to concentrate while working solo.] However, when I ran into trouble, I didn’t know how to put the problem into a sensible question, because I didn’t know what I didn’t know when it came to app development, especially as a beginner to real-world projects.
I have since grown out of that dilemma, but I was much younger and much more afraid to make mistakes, so I opted to try to solve the issue myself until I had absolutely no other choice. Now as a developer with years of experience, I have a better strategy to use when I encounter development issues: attempt the problem on my own for a few hours but ask someone for help if I get nowhere with my attempts.
Important side note: I haven’t worked on this project since fall of 2023, so the project may have, and most likely, changed significantly since then and I may not remember all of the details. This is just my recollection of how the development went while working on a very early version of the app before I moved on from Arden.
Kickstart to my Chosen Career Path
This was, by far, my favorite project to work on while at Arden! 😄 While my other automation projects were still extremely useful and exciting to work on, this project was more of what I was looking to do in my career. During college, I had many ideas of the potential paths I could take as a full-time programmer: artificial intelligence, cyber security, game development, or app development.
My degree concentration was initially Cyber Security, but I found that the field was not as exciting as I thought it’d be after taking two courses relating to that. Then, I switched my concentration to the newly created Artificial Intelligence concentration! While it was very interesting and very topical in 2022, it still didn’t feel like a field I would be the most passionate about. But that all changed when I took a UI/UX course at Kettering and started this project around the same time!
While the UI/UX course piqued my interest in the field, this project solidified my passion for me! The process of creating interesting user interfaces and making enjoyable experiences for users was very enjoyable for me. Ever since then, I’ve been designing user interfaces for web applications and personal websites and bringing them to life using code and website builders. Even after many hours of enjoyment with frustration, that passion has not dimmed in the slightest; it has actually grown into something I never thought possible! 🔥
tech stack.
New Tools to Learn
This project exposed me to several new tools, with the exception of Figma. Learning these new technologies, especially those prioritized by the industry, was an incredibly enjoyable – albeit frustrating – experience! Since I was new to most of this tech stack, I initially struggled to understand how to use them effectively. But that’s very much expected when learning new tools!
React Native
I chose to use React Native based on guides I looked through on app development. I read that React Native was the easiest for beginners to pick up on, especially if they had JavaScript experience. I did have previous experience with React.js for a Software Engineering class, where my group project was tasked with building an online tutoring site. I was the main frontend developer, so the React library was not entirely new to me.
However, in my experience, the development environment for a React Native project was a massive pain to deal with. The Android emulator would crash quite frequently, and the startup process was confusing at best and frustrating at worst! Even my supervisor had trouble working it out when I asked for help. It is totally possible I configured the emulator and other components incorrectly. Or that I just didn’t understand what I was doing. Remember the double-edged sword of freedom Arden allowed? I have since figured out better methods for developing with React Native!
SQLite
Backend was totally new to me at the time. The only other experience I had with it was when the backend team of my Software Engineering group tried to explain how to send data to a server to be saved on a SQL database. This project was perfect for me to get my hands on backend development and try to understand the ins and outs better!
While researching app development, I saw that SQLite was an easy tool to learn and implement along with React Native. Since the database is local, I didn’t have to worry about any data transfer on a server. It’s a good thing it was local since the employees typically don’t have internet access within the shipping facilities. More on how I constructed the database in a later section!
Frontend Tech
Backend Tech
the process.
Project Requirements
The app needs to be very easy to use because the employees need to review comprehensive information about the products on the fly. To achieve this, the app included several key requirements:
-
Local database w/ offline access
-
Duplicate product detection
-
Informative product scan summary
-
Full history of scan sessions
-
Various user settings for data control and additional product information
-
Algorithm to convert EPC to UPC
Constructing Database
The SQLite database is extremely simple, but it’s not very well structured. There are tables for product scans, a full history of scans, additional product information, and user settings. I was still learning how to create databases during time of development, so the schema is not very intuitive. For example, the entries in the product scans table do not have unique ids; I relied on the EPCs for differentiation. Luckily, it still worked for the app’s scope.
features.
RFID Product Recording

This is the main feature of this application. The whole purpose of this app being developed was to make it easier for shipping employees to track and record which products are going through their pipeline by scanning for nearby RFID tags. The good thing about RFID tags is that they can be scanned in proximity so that products can stay within the packages while being recorded. I don’t know how they were performing these duties beforehand, but this application is designed to make that process much simpler and quicker (hopefully!).
The RFID tag attached to each product only holds their EPC, which contains the company prefix, item reference, check digit, and serial number. It does not contain the product name, quantity, or UPC in plain text, but those can be parsed out and also used to create the UPC by using an EPC to UPC decoder algorithm. Check out the decoder algorithm demo by GS1 here. To understand more about UPC/GTIN and EPC in retail, check out this article by RFID4UStore
If the application detects an RFID scanner connection, a scanning session will be allowed to begin. When a session begins, an invisible input box is focused on. The EPC is automatically typed into the input box and entered into the database after the EPC to UPC algorithm is applied when a tag has been scanned. The product and any extra information will then appear in the Scan Summary.
I encountered a few issues when testing the scanner’s input methods. The scanner acts like an external keyboard. That’s how it inputs the EPC into the app, but this causes the phone’s keyboard to appear. First, I tried a method to keep the keyboard closed but still functional, but there were still elements on screen to indicate that an input box is focused on. Another issue was that the scanner types the EPC very slowly, which can cause the scan to miss some tags during a multi-scan session. Lots of issues I would like to have another crack at!
Product Scan History

Employees may need to review past scan sessions for a variety of reasons. This entire page is dedicated to fulfilling whatever reason they have. The app provides an extensive product scan history that is very similar to the layout of the scan summary. The key differences are that the history is never cleared when a new scan session begins and that the scans provide the scanned date and additional product information. The additional product information includes the product’s Part Description (if any), Part Number (if any), and Serial Number.
Users are given the options to set recurring purge events to delete the Scan History from the database. They may choose to delete the history weekly, monthly, annually, or manually. By default, manual deletion is active.
The current layout of the history page can become too cluttered and hard to understand when there’s too much history. The changes I would make to the layout if I had another chance at this project are the following:
-
Change summary to a table
-
Add filter, sort, and search options
-
Informative product scan summary
-
Instead of a drop down to show more product information, add the information to a popover that slides from the bottom of the screen
Additional Product Information File

Not all product information can be retrieved by scanning the product’s RFID tag. However, since this is an internal application, we have the ability to retrieve product files that hold additional information like a description. Employees can upload these files directly to the application. The products scanned next will be saved with the additional information from the file as long as there is a matching EPC. The product’s additional information will appear on the Scan History page for all subsequent scans.
A limitation to this feature is that the file is not updated automatically, so there is a possibility that there is outdated information or missing products within the file. The reason for this limitation is because the facilities that the employees are working in do does not have wireless internet. So, the users are required to download the file while connected to the Wi-Fi and then upload it into the app.
There are solutions to the limitation, such as downloading the most current file from the company’s servers whenever the phone happens to connect to Wi-Fi, but that was out of the project’s scope at the time.
project status.
Unfinished, but in Working Condition
Unfortunately, my co-op experience at Arden ended before I could completely finish the application, so I had to leave it somewhat unfinished. Luckily, I finished the core functionalities (UI, product recording functionalities, product info files, etc.) to get the project to a functional state.
If I had more time with the project, I would’ve improved the UI to be more user-friendly and covered more edge cases for recording product tags. If I have spare time sometime in the future, I would like to return to the project to polish up the app, just to practice more with a “real-world” project and see my improvements since then.
Overall, I’m still very proud of how this application came out and I’m excited to possibly return to it in the future. Thank you for reading! 😄