FRUX Series
The FRUX (first-run user experience) notifications series is a 28-day notification series that introduces users to various parts of the Handshake app (e.g. Feed, People search, Profile).
| Attribute | |
|---|---|
| Channels | in-app, push |
| User types | Students |
| Regions | NA |
| Platforms | web, iOS, Android |
| Product area | Onboarding |
| Notification preference | general_communications |
| Notification config | /v1/frux_day_10.yml (example) |
Audience
Affiliated Students in the US within their first 28 days on Handshake.
Trigger
The Day 1 notification is triggered from a GraphQL mutation that is called when a user completes onboarding. After Day 1, this notification is triggered by a DAG that runs daily at 16:00 UTC (9AM PST).
How to test
Command line
To send an individual notification:
Notifications::NotificationSendingWorkerV2.new.perform('frux_day_03', '1', {}, 125, SecureRandom.uuid)
E2E
In order to enter the entire 28-day series:
- Create a new affiliated student account on Handshake using the onboarding flow. You should see a Day 1 in-app notification after completing onboarding.1
- (If not already on mobile) Log in with the new account on mobile, and enable push notifications.
Additional info
Implementation
This notification sends through the push & in-app channels, across web, iOS, and Android. Each day sends to a different combination of channels and platforms, depending on which features are available where. Note that we do not send emails through the frux_day_xx notifications; the similarly themed onboarding emails are handled by the Marketing team through Iterable.
V2 configs are not actively sending as of September 2025; they exist so that Android team has notification configs to test with.
As it currently exists, the FRUX notification series is somewhat custom & hard-coded; meaning: the DAG only works for frux_day_xx notification names, and there's a lot of repetition in the implementation (for example: 16 config files, 11 push templates, 16 in-app templates).
Further ideation
This type of notification series, one where sends are based on time-since-event (i.e. send immediately after completing onboarding, 1 day after completing onboarding, 3 days after, etc.), feels like a pattern that can be reused for notifications regarding other areas of the product.
Open questions:
- How can we make the DAG reusable?
- How can we make this pattern more flexible in general?
- How can we make the code more DRY?
Aliases
- New user notifications
- Onboarding notifications
- First-run user experience notifications
Resources
- [Linear project] Notifications for new users
- In-app notification templates
- Push notification templates
- DAG
- [Google Sheets] First run 1st month notifications - full list of V1 frux notification copies & destinations