← All projects

WakaTime

In progress

NFC-powered alarm app - you have to physically tap a tag to dismiss the alarm and get out of bed.

Role
Solo build (Expo/React Native app, NFC integration, Firebase auth, EAS release pipeline)
Timeframe
Jun 2026 to present
iOS · Android
Platforms
NFC tag tap
Dismissal
Local-first, on-device
Data
EAS + GitHub Actions
Pipeline

Objective

Build a mobile alarm app that makes oversleeping hard: the alarm can only be dismissed by physically tapping an NFC tag placed away from the bed, turning the snooze habit into a wake-up routine with streaks to keep it going.

Outcome

A working Expo / React Native app with the full core flow: onboarding, local profile setup, NFC tag binding, alarm creation, tap-to-dismiss, and streak tracking. Data is local-first on-device, sign-in is optional via Firebase and Google, and dev/preview/production builds ship through EAS with GitHub Actions workflows for build and store submission.

A look inside

Home: next alarm, quick enable/disable, and current streak (placeholder).
NFC: bind a physical tag to your profile - the tag that dismisses your alarms (placeholder).
Alarms: create an alarm tied to your NFC tag, with repeat rules (placeholder).
Settings: profile, optional Google sign-in, and notification preferences (placeholder).

How it works

01

Tap-to-dismiss alarms

The alarm won't stop from the lock screen. Each alarm is tied to a physical NFC tag - stick it in the bathroom or kitchen and you have to get up and tap it to dismiss, which is the whole product.

02

Streak tracking

Completing the wake-up flow builds a streak, so the incentive shifts from "avoid the alarm" to "keep the run alive". A quick toggle enables or disables the next alarm without breaking the setup.

03

Local-first with optional sign-in

Alarms, streaks, and profile data live on-device in AsyncStorage - the app works fully offline with no account. Firebase Auth with Google Sign-In is there for users who want one.

04

EAS release pipeline

Development, preview, and production build profiles on EAS, with GitHub Actions workflows that queue cloud builds (including iOS from Windows) and submit to the Play Store and App Store non-interactively.

What it is

WakaTime is an NFC-powered alarm app built with Expo, React Native, and Expo Router. The idea is simple: switching off an alarm from bed is too easy, so WakaTime makes you physically get up. Each alarm is bound to an NFC tag - place it across the room and the only way to silence the alarm is to walk over and tap it.

How it works

  • Onboard. Create a local profile on-device; signing in with Google via Firebase Auth is optional, not required.
  • Bind a tag. Pair a physical NFC tag to your profile with react-native-nfc-manager - this tag becomes your dismiss key.
  • Set alarms. Create alarms tied to that tag, delivered through expo-notifications. A quick toggle turns the next alarm on or off.
  • Wake up properly. When the alarm fires, only tapping the bound tag dismisses it. Completing the flow grows your wake-up streak.

Everything is local-first: alarms, streaks, and profile data persist in AsyncStorage on the device rather than a remote backend.

Status

WIP. The core product flow is built end-to-end: onboarding, profile setup, optional sign-in, NFC tag binding, alarm creation, and basic stats and settings screens. Expanded stats, account editing, and notification settings are marked “coming soon”. NFC and native auth need real device builds, so testing runs through EAS development builds; release builds and store submission are wired up via GitHub Actions.

Replace SVG placeholders with device screenshots from a development build. Add store links once the app is live on the Play Store / App Store.

Skills used

TypeScript React Native NFC / Mobile Hardware Firebase OAuth Integrations

Tech stack

Expo Expo Router React Native TypeScript react-native-nfc-manager expo-notifications AsyncStorage Firebase Auth + Google Sign-In EAS Build / Submit