We have a strong stance on notifications: send the ones a user actually wants; never send the ones designed to manufacture engagement. Most apps fail this test. Crescender's notification surface is built around the principle that a notification should fire because something happened in the user's real life that they'd want to know about, not because we want them to open the app.
What we send and why
Lessons / event reminders: configurable lead-time before a calendar event (default 60 minutes). Highest-value notification class for working musicians and music teachers, the difference between making and missing a gig is sometimes a well-timed push.
Practice-completed pings: when a kid in a family finishes a practice session, the other adult(s) in the family get a quick acknowledgement push. Useful for split-parenting, useful for one-parent-out-at-work scenarios. Opt-in per adult.
Coparent / band-member confirmations: when someone confirms attendance or accepts an invitation, the inviter gets a one-off acknowledgement. Sent once; no follow-ups.
Account security: sign-in from a new device, password changes, deletion-grace-period reminders. Transactional and unconditional.
Critical system: scheduled maintenance windows, breach notifications (if any), urgent service interruptions. Sent rarely; honestly.
What we don't send
No 'don't break your streak' notifications. No 'rate us in the App Store' nag. No upsell pushes. No 'we miss you, here's what you've been missing' re-engagement bait. No notification to a child, only to the adults responsible for the child. No notification we couldn't honestly explain at a family dinner.
If we can't articulate a clean reason a notification helps the user, we don't ship it. This has stopped quite a few features from getting notification surface area.
Channels and per-channel control
Three channels: in-app (rendered as banner / badge), push (via APNS on iOS, FCM on Android), and email (via Resend). Most notification classes default to push for time-sensitive events and email for non-time-sensitive ones. In-app is universal, anything pushed also appears in your in-app notification feed.
Per-channel control sits in Settings → Notifications. You can turn off any individual notification class on any channel. The defaults are conservative; the maximum is what we send (we don't unlock more aggressive notifications even if you opt in to a 'verbose' mode, because that mode doesn't exist).
Quiet hours and timezone awareness
By default, push notifications are suppressed between 10pm and 7am in the user's timezone, with the exception of critical security alerts. You can adjust the quiet hours or turn them off. Notifications that arrive during quiet hours queue and deliver at the next non-quiet hour.
Timezones are detected from the device, with a manual override available. Coparents in different timezones each have their own quiet hours respected, a kid finishing practice at 7pm in Melbourne doesn't ping a coparent in London at midnight.
