October 4, 2024
Contents
Overdue tasks from the previous weekly update:
Onboarding screens prompting first-time users to enter 1) the average length of their menstruation, 2) the average length of their cycle, and if possible, 3) the start and end dates of their last period
Services for reading data from HealthConnect
Services for storing HealthConnect data securely on-device
Services for determine the start of the next menstruation from the running average length of the past three menstrual cycles
Services for determining the window of ovulation based on the running average length of the past three menstruations and the predicted start of the next menstruation
Functionalities I need to complete, based on the timeline I'd created for myself:
Allow users to self-report menstrual symptoms (mood, cramps, fatigue, etc.)
Create notifications to remind users to check in at the beginning and end of the day
Create a new Google Calendar in the user’s Google account that shows the phases of the menstrual cycle as all-day events
Display user’s Google Calendar events on the home page of the app
Encourage users to connect their Google Calendar during onboarding, but allow them to skip at first
Daily Updates
September 28, 2024
My Capstone project has two deliverables: The app itself, and the writeup (which is similar to a typical senior-year thesis). Since I was still jetlagging and didn't have the headspace for coding, I decided to start on the writeup at a Shut Up & Write session.
At the end of 1.5 hours in the morning, I managed to:
- Finish the introduction by making some light edits to the proposal I submitted earlier in the year
- Start on the Learning Outcomes appendix, which is a required section reflecting on how I've applied concepts from various courses at Minerva to my Capstone project
In the afternoon, I also took 2.5 hours to try and finish the onboarding screens. I managed to implement:
- Flash Calendar to pick the start and end dates of the user's last period
- Saving the running averages to SecureStore
What I'm left with:
- Saving the start and end dates of the last period to SQLite
What I hope to work on next:
- Getting HealthConnect installation and permissions set up as part of the onboarding flow
- Marking the user's onboarded status as
true
so that the Agenda screen will be rendered upon onboarding completion - Reading HealthConnect data successfully
- Setting up and storing HealthConnect data in SQLite
Small details I need to furnish:
- Specify that the period and cycle length is in number of days
- Color palette and alignment
September 30, 2024
In 1h 45m, I worked on:
- Initializing the database with the required tables
- Saving the start and end dates of the last period to SQLite
- Writing the code required to get HealthConnect installed and permissioned
However, I did not test these features on my phone.
October 1, 2024
In 2h 45m, I spent the first hour converting my code to Drizzle ORM. I then tested the code I wrote on Sep 30, but the app crashed when I tried to request HealthConnect permissions.
After reading the react-native-health-connect
library documentation and adding missing pieces of code, I finally got the app to show the HealthConnect permissions page and display some of my health records in the console.
As part of the onboarding flow, the app also:
- Automatically directs the user to the homepage upon successful completion of the onboarding flow
- Marks the user's onboarding status as complete (even if they didn't grant CycleOS permissions to HealthConnect)—thus, they will not see the onboarding flow again
Unfortunately, due to repeated testing, I likely have 10+ instances of this month's period in my cycles
table. Thus a @TODO: I have to clean up the table before I work on the calculations and data visualizations.
With the onboarding sort-of done (i.e. save for cleaning up the UI), I created my first pull request and merged it to main
🎉 It took me 3.5 weeks to get here, which is not ideal, but progress is progress!
I also have to demo my project to my advisors on October 7, 2024. As such, I've decided to prioritize self-reporting symptoms and data visualization instead of Google Calendar integration. I created my next branch, kyurikotpq/self-report
, to reflect this.
October 4, 2024
In 4+ hours, I worked on:
- Finding a suitable React Native component library by reading Reddit threads and looking at what each library offered
- Installing and integrating the chosen component library (React Native Paper)
- Stubbing out parts of the Agenda page and creating the UI for the symptom tracking page
There is still A LOT to do.
- I skipped integrating Google Calendar altogether
- I need to finish the UI logic for adding/removing symptoms AND saving those selected symptoms to SQLite
- I also want to add notifications for daily check-in, but I think I might postpone it till I encounter another feature that uses notifications (e.g. the Insights page).
As part of the requirements for meeting with my advisors, I also recorded a Loom video explaining:
- The problem I am trying to solve (health and period tracking apps 1) viewing menstrual symptoms in isolation relative to lifestyle factors and 2) relying mostly on self-reported data)
- The current state of my project (as described above)
- The learning concepts (from my university courses) that I hope to apply in my project
What worked?
What I liked about going to a Shut Up & Write session is that 1) there's no peer critique, and thus 2) you can write anything you want. This helped me immensely in working on my thesis.
I did not account for edge cases in my app yet. For example, the app will likely throw an error if the user rejects granting HealthConnect permissions. This has caused the number of
@TODOs
to snowball, but it has also helped me avoid getting stuck in the weeds. I foresee myself revisiting these details once I'm done with all the features of my app.
What didn't work, and what can I do better?
I haven't coded every day of the week since I started university, but I forced myself to work on the app for at least 2.5h every day this week. This contributed to burnout: I crashed into a 3-hour nap on the morning of October 3 instead of coding like I'd planned. On October 4, I started coding earlier—at 7.45am—but I also went down several rabbit holes that sucked time away from making tangible progress with the app.
I think my Monday-Wednesday-Friday morning (9am - 12pm) coding sessions are enough. I just need to be more mindful of how I use this 4-hour block:
- Take breaks during this 4-hour block
- During each break, 1) stretch and 2) ensure that I am on task (i.e. not stuck in the weeds or unnecessarily deep in a rabbit hole)
Technical Learnings
HealthConnect Permissions: https://matinzd.github.io/react-native-health-connect/docs/permissions
Drizzle Migrations: https://github.com/drizzle-team/drizzle-orm/discussions/2447
Important command:
npx drizzle-kit generate
- Mirroring your phone screen in Android Studio: https://stackoverflow.com/questions/75888209/how-to-show-the-screen-of-a-physical-device-inside-android-studio