Push notifications are easy to deliver and hard to deserve. UltraFit360 sends pushes through Firebase Cloud Messaging, which unifies APNs (iOS) and FCM (Android) under one API. The technical setup is solved; the discipline is what matters.
The delivery layer
Cloud Functions handle push composition. A workout-reminder push reads the user's schedule from Firestore, decides whether to send based on time-of-day rules, and ships to FCM. The same code path handles iOS and Android — APNs token registration is automatic on first install.
The discipline layer
The hard problem isn't delivery — it's knowing when not to send. UltraFit360 enforces a few rules:
- Maximum 3 pushes per user per day, regardless of trigger
- No pushes between 9pm and 7am in the user's timezone
- Reminder pushes skip if the user already opened the app that day
- Marketing pushes go through a separate channel with opt-in default-off
- Every push category can be toggled in settings — granular, not all-or-nothing
What we measure
Open rate on every category, churn rate within 7 days of a push burst, opt-out rate per category. A push that drives opens but increases churn is a net loss — the studio kills those categories quickly.
Rich pushes
iOS notification service extensions decorate workout-complete pushes with the user's photo and a heart-rate chart. Android notification channels carry the same payload. Rich pushes are reserved for moments that earn attention — not every event.
