além do script
ProjetosWater Drink

Water Drink: a detailed look at how the hydration tracking app works

Details on onboarding, home screen, exercise-based goal boosts, favorites, achievements, notifications, settings, tracking, and the Android widget of the Water Drink (Hidratação Diária) app.

ExpoReact Nativeandroidnotificationswidget

by Marcelo Macedo

In the previous post I introduced Water Drink, the Hidratação Diária project, a mobile app built with React Native + Expo to track water intake throughout the day. In this article I go into detail on each feature, based on the project's README.

Full source code at: https://github.com/marcelo3macedo/water-drink


Personalized onboarding

The user's first contact with the app is a short questionnaire:

  • Quick questions about sex, age range, and weight (weight is optional);
  • Automatic calculation of a recommended daily water goal, with the option to adjust it manually;
  • Selection of favorite containers (cups, bottles, squeeze bottles) for everyday use;
  • Option to skip the questionnaire and set the goal manually.
Welcome
Welcome
Sex
Sex
Age range
Age range
Weight
Weight
Recommended goal
Recommended goal
Onboarding complete
Onboarding complete

Home screen

  • Circular indicator with the percentage and volume already consumed for the day;
  • Daily goal shown front and center;
  • Quick-action buttons to log preset volumes with a single tap;
  • + Custom button to enter any amount manually;
  • I exercised button to boost the goal for the current day only, replenishing fluids lost during the workout.
waterdrink-tela-inicial
waterdrink-tela-inicial

Exercise-based goal boost

After a workout, the user can replenish lost fluids without changing the goal on other days:

  • Quick recommended values for running (light, moderate, intense) and gym workouts (light, moderate, intense);
  • Field to enter a custom replenishment amount;
  • The adjustment applies only to the current day — the goal returns to normal the next day;
  • Indicator on the home screen showing how much the goal was boosted.
waterdrink-exercicio
waterdrink-exercicio

Favorites

  • Full list of containers (cups, bottles, squeeze bottles, jugs) to mark as favorites;
  • Favorites show up as shortcuts on the home screen and in the widget;
  • Creation of custom measurements with their own icon and volume.
waterdrink-recipientes-favoritos
waterdrink-recipientes-favoritos

Achievements

  • Trophy system that gamifies app usage (logging, goals reached, weekly streaks, among others);
  • Dedicated screen showing progress on unlocked achievements;
  • Optional birthday field to unlock the special "Toast to Life" achievement.
waterdrink-conquistas
waterdrink-conquistas

Notifications

  • Notification center with hydration reminders and unlocked achievements;
  • Alert at noon if the user is below 50% of the goal;
  • Alert in the afternoon (6pm) if the goal still hasn't been reached;
  • Button to test the notification immediately;
  • Sharing unlocked achievements as an image.
Reminders
Reminders
Notification center
Notification center

Settings

  • Setting the daily water goal (quick options: 1500, 2000, 2500, or 3000 ml);
  • Manually entering a custom goal;
  • Managing the quick-action buttons — ideal for people using a fixed-volume cup or bottle.
waterdrink-configuracoes
waterdrink-configuracoes

Tracking

  • Daily history with every log entry and the exact time it was recorded;
  • Visual indication of how much is left to reach the goal;
  • Option to remove individual entries or reset the day;
  • Entries automatically reset every new day.
waterdrink-acompanhamento
waterdrink-acompanhamento

Android widget

  • Home-screen widget showing the day's progress and quick access to favorite containers;
  • Adding water directly from the widget, without opening the app.
waterdrink-widget
waterdrink-widget

Technologies

How to run it

bash
# Install dependencies
npm install

# Start the development server
npx expo start

Testing notifications and the widget requires a Development Build instead of Expo Go:

bash
# Android
npx expo run:android

# iOS
npx expo run:ios

Full source code available at github.com/marcelo3macedo/water-drink.