Codex Challenge
Promotional push and in-app notifications for the Codex Creator Challenge partnership campaign (Codex x Handshake). Runs weekly for 5 weeks (3/29 - 4/26 2026) with two audience tracks.
| Attribute | |
|---|---|
| Channels | in-app, push |
| User types | Students |
| Regions | NA, EU |
| Platforms | web, iOS, Android |
| Product area | Marketing |
| Notification preference | marketing_communications |
| Notification config | /v1/codex_challenge.yml |
Audience
All students from all majors, split into two tracks:
- Track 1 (have NOT clicked offer): Suppress users who have clicked the Codex offer button OR submitted to the Creator Challenge
- Track 2 (have clicked offer): Suppress users who have submitted to the Creator Challenge
Trigger
This notification is sent using the Notifications Send Blaster. It is not triggered organically. Each week, two blast runs are executed (one per track) with the week and track attributes.
Required Attributes
| Attribute | Values | Description |
|---|---|---|
week | 1-5 | Campaign week (1 = 3/29, 2 = 4/5, ..., 5 = 4/26) |
track | 1-2 | 1 = have not clicked offer, 2 = have clicked offer |
Schedule
| Week | Date |
|---|---|
| 1 | 3/29 |
| 2 | 4/5 |
| 3 | 4/12 |
| 4 | 4/19 |
| 5 | 4/26 |
Example Blast Commands
# Track 1 - Week 1
CONFIRM=true USE_BUCKET_CSV=true \
GOOGLE_CLOUD_STORAGE_BUCKET=handshake-production-notifications-scratch \
GOOGLE_CLOUD_STORAGE_PATH=codex_challenge_track1_week1.csv \
bundle exec rails "notifications:send_notifications['notification_name=codex_challenge¬ification_version=1&attributes[week]=1&attributes[track]=1']"
# Track 2 - Week 1
CONFIRM=true USE_BUCKET_CSV=true \
GOOGLE_CLOUD_STORAGE_BUCKET=handshake-production-notifications-scratch \
GOOGLE_CLOUD_STORAGE_PATH=codex_challenge_track2_week1.csv \
bundle exec rails "notifications:send_notifications['notification_name=codex_challenge¬ification_version=1&attributes[week]=1&attributes[track]=2']"
How to test
Send a test notification to a single user via rails console (staging or local dev):
# On staging: seira staging handshake pods connect --dedicated
# Then open rails console: bundle exec rails c
Notifications::NotificationSendingWorker.new.perform(
Notifications::NotificationSendingWorker.nss_parameters(
name: 'codex_challenge',
version: '1',
attributes: { week: '1', track: '1' },
user_id: USER_ID,
idempotency_id: SecureRandom.uuid
)
)
Additional info
Email
Marketing emails for this campaign are handled separately via Iterable by the marketing team. The notifications team also adds a Codex Creator Challenge banner to the weekly job recommendation digest email.
Implementation
Push Channel
- Firebase
- Template:
Notifications::Push::CodexChallenge
In-App Channel
- Presenter:
Next::Student::InAppNotifications::V1::CodexChallenge - Category:
handshake_blast
Aliases
- Codex Creator Challenge
- Codex x Handshake
- Codex Campaign Notifications