Skip to content
Vijay Gojiya
All work

Client work, 2025

Built the mobile application end to end

Dhatri

A tooth-brushing app for children, where the guided video is the timer and the timer cannot be cheated.

Shipped

A habit-building app aimed at children rather than at their parents. The whole product is one routine done twice a day, so the design problem is keeping a two-minute activity interesting enough to be repeated without turning it into a game the child plays instead of brushing.

The answer is that the guided video is the session itself. Playback position drives the on-screen timer, and brushing time is credited to the child in short increments while the video runs rather than in one lump at the end, so a child who stops halfway still keeps the half they did. The first stretch of the video is an intro and deliberately earns nothing.

Making that number honest was the real work. The video pauses the moment the app leaves the foreground or the screen loses focus, so the timer cannot run in a pocket, and navigating away mid-session has to be confirmed. A parent account holds a profile per child, and each child has their own history, levels and charts.

What it does

  • A guided brushing session: press start, follow the video, watch the timer run
  • Brushing duration recorded per session and credited as the child brushes
  • Fifteen levels with badges, earned from brushing consistently
  • Charted analytics of brushing over time, per child
  • Configurable reminder times, delivered as local notifications
  • One parent account with a separate profile and history for each child
  • Oral health tips, tip videos and reference documents
  • English and Hindi throughout, switchable in the app
  • Google sign-in with email verification

Engineering notes

  • The video is the clock: playback position drives the timer, so what is recorded is time the child actually spent in the session
  • Duration is written in short increments during the session rather than once at the end, so quitting halfway still keeps half the credit
  • Playback pauses when the app backgrounds or the screen loses focus, which is what stops the timer running in a pocket
  • Leaving mid-session is intercepted and confirmed rather than silently discarding the attempt
  • Per-child profiles under one parent account, with the selected child held in MMKV so a cold start resumes on the right one
  • Reminder times are user-set and rescheduled to the next day once the time has passed
  • Firestore reads go through React Query with a sync-storage persister, so history and charts render before the network answers