Major Update
Over the past week, I made a lot of changes to the smartwatch and here are what I have done.
App Icon
I added custom icons for each app like clock icons for stopwatch and timer and a thermometer for temperature and humidity. I did it by uploading C arrays of pixels (black and white). Then, I used the image widget in LVGL to display the icons.
New App
With the onboard SHT40 temperature & humidity sensor, I built a new app that displays current temperature and humidity readings. Currently, the app only has plain texts, but I am thinking of changing it to something more visual like a gauge or graph. One thing I did not consider when making the PCB is that SHT40 readings can be affected by the heat from ESP32 or hand, so it might not be as accurate as it should be.
Bug Fixes
There were some minor issues like the noise from buttons, which microcontroller read it as two clicks even though I clicked only once. I could fix this issue either by software (rechecking value after certain amount of time) or hardware (soldering a capacitor) and I chose to go with hardware because I did not want to make the code more difficult to read than what it is currently. Another bug I found is that DS3231 real time clock and MPU6050 sensor both shared the same I2C address (0x68) and the data was getting corrupted. Luckily, there is a pin on MPU6050 called AD0, which I can power it to change its I2C address to 0x69.