Build apps with Expo Notifications
Expo Notifications is the native SDK used in lib/notifications.ts to request permissions, create Android channels, and register push tokens. Goodspeed generates Expo Notifications as a standard part of every app, so the output is a working codebase from day one, not a scaffold you have to finish yourself.
WHAT GETS GENERATED
Built into every Expo Notifications build
Every app Goodspeed generates with Expo Notifications includes these production-ready patterns, wired together from the first build.
| Item | Description | Strength |
|---|---|---|
| Permission request flow | requestPermissionsAsync runs on first app launch for authenticated users. The result gates token registration so users who deny never have a token upserted. | Setup |
| Android notification channels | setNotificationChannelAsync creates a channel for each entry in gasConfig.features.pushNotifications.channels at app start, giving users channel-level control in Android settings. | Android |
| getExpoPushTokenAsync token fetch | The Expo push token is fetched from the Expo Push Service and upserted to the Supabase push_tokens table with the user ID and platform. | Token |
| setNotificationHandler global config | A module-level handler configures shouldShowAlert, shouldPlaySound, and shouldSetBadge for all received notifications, consistent across the app. | Handler |
| Simulator guard via expo-device | expo-device.isDevice is checked before requesting a push token. Simulators do not have push tokens and the check prevents a confusing failure in dev. | Dev Experience |
Source: the Goodspeed generation pipeline · Push Notifications SDK
REAL GENERATED CODE
A snippet from a Expo Notifications app the studio shipped
This pattern comes straight out of the production groundwork every Goodspeed app is generated on. The studio generates Expo Notifications code like this for every app in the pipeline, not a hello-world sample you have to grow into a real app.
Channel setup
// lib/notifications.ts: Android channel creation if (Platform.OS === 'android' && ExpoNotifications) { for (const channel of gasConfig.features.pushNotifications.channels) { await ExpoNotifications.setNotificationChannelAsync(channel.id, { name: channel.name, importance: ExpoNotifications.AndroidImportance.MAX, vibrationPattern: [0, 250, 250, 250], lightColor: gasConfig.design.colors.primary, }); } }
Today's log
USE CASES BUILT ON EXPO NOTIFICATIONS
Where this stack ships
These app types use Expo Notifications as part of the generated stack. Each link goes to a full spec page with capabilities, scored ideas, and a pipeline walkthrough.
- Build a Fitness Tracker appBuilding a fitness tracker means wiring together daily logging, progress charts, Apple Health, and push reminders. Goodspeed generates all of that in a single build, not a patchwork of tutorials. The FITNESS TRACKER APP
- Build a Habit Tracker appHabit trackers live or die on the loop: cue, routine, reward. Goodspeed generates a complete React Native habit tracker with streaks, reminders, and progress visualization, backed by Supabase so your HABIT TRACKER APP
START WITH EXPO NOTIFICATIONS