September 20, 2024

This week, I was supposed to finish:

  • 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 first day of their last period

  • Services for reading data from HealthConnect and storing them 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

I made a dent on the onboarding screens but did not get to the other tasks.


Daily Updates

Due to my impending move to San Francisco, I only managed to work on the project for one day this week.

September 18, 2024

I started working on the onboarding screens. I spent the first hour reading Expo's documentation and fumbling around where to put onboarding.tsx for my use case.

  • I eventually went with app/onboarding.tsx
  • I registered the /onboarding route using Stack.Screen in app/_layout.tsx
  • I checked for onboarding status (stored using SecureStorage) in app/_layout.tsx

Given that I only had a small number of screens with simple layouts, I decided to keep the markup of all screens in the same file—onboarding.tsx.

At the end of 3 hours, I didn't manage to finish all the screens. Here's what I'm left with:

  • I need to render a calendar to pick the date range of the last period
  • I need to account for "I don't know" cases: Users press the "I don't know" button and a modal pops up informing them that 1) the average value has been selected, 2) the value will be updated as they register more cycles.
  • The input values do not save to SecureStore upon finishing the onboarding flow
  • The onboarding flow needs to route to the Agenda screen upon completion

It also looks ugly af at the moment, but I'll use a component library once I'm done with this week's functionalities.

What worked?

The 3-hour block I carved out on Sept 18 helped. The session wasn't just a block on my calendar, but also a 4-hour table booking at Staatsbiblothek, a beautiful library in Berlin. This created additional accountability to follow through on my time block.

What didn't work, and what can I do better?

I was too concerned with aesthethics and spent too much time trying to get things positioned nicely—to the point where I started doubting my knowledge of flexbox. Similar to last week, I will focus on functionality first (with basic styling such that touchables are within the safe area of the screen) and beautify my app towards the end of the semester.

Technical Learnings

I found:

  • Flash Calendar potentially useful for the functionalities mentioned above
  • This StackOverflow thread for keeping track of whether a user has gone through the onboarding process