Skip to main content

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
Channelsin-app, push
User typesStudents
RegionsNA
Platformsweb, iOS, Android
Product areaOnboarding
Notification preferencegeneral_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:

  1. 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
  2. (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

Footnotes

  1. As of August 2025, we are still running a 5% holdout, so there is a small chance that your new account may fall into this holdout group.