fix: recover notification CTR with celebratory copy and dynamic push headings#3682
fix: recover notification CTR with celebratory copy and dynamic push headings#3682
Conversation
…headings Post-#3657 data showed CTR declines across 7 notification types. Root causes: lost celebratory tone in achievement/milestone types, and bland push headings replacing the curiosity-inducing "New update" default. Title changes: - user_given_top_reader: restore "Great news!" opener (-84.6% without it) - achievement_unlocked: add "You earned" for personal warmth - squad_member_joined: add "Say hi!" CTA - Upvote milestones: geeky tiered copy (dev/gaming references) replacing dashboard-stat "number. remark" format Push heading changes: - Dynamic headings for squad_post_added ("New post in {squad}"), squad_new_comment and article_new_comment ("{name} commented") - achievement_unlocked: "Achievement unlocked" -> "Level up!" - upvote milestones: "Milestone reached" -> "New milestone" Preserves all improvements from #3657 (source_post_approved +106.5%, post_bookmark_reminder +23.4%, comment_mention +17.6%). Made-with: Cursor
|
🍹 The Update (preview) for dailydotdev/api/prod (at db495f5) was successful. ✨ Neo ExplanationThis is a standard application version rollout, updating all services and scheduled jobs to a new build, with accompanying database and ClickHouse schema migration jobs being run for the new version.Root Cause AnalysisA new version of the application has been built and is being deployed. Every Kubernetes resource is being updated to point to the new container image, replacing the previous build across all services. Dependency ChainThe new application image cascades across the entire platform:
Risk analysisNo stateful resources (databases, storage) are being replaced or deleted. The migration jobs are the most operationally significant part of this deployment — they run schema changes against the database and ClickHouse before (or alongside) the new application version rolling out. Deployments use rolling updates by default in Kubernetes, so no downtime is expected for live services. Resource Changes Name Type Operation
+ vpc-native-api-clickhouse-migration-a0865745 kubernetes:batch/v1:Job create
~ vpc-native-update-source-public-threshold-cron kubernetes:batch/v1:CronJob update
~ vpc-native-post-analytics-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-tags-str-cron kubernetes:batch/v1:CronJob update
~ vpc-native-generate-search-invites-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-zombie-images-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-tag-recommendations-cron kubernetes:batch/v1:CronJob update
~ vpc-native-worker-job-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-check-analytics-report-cron kubernetes:batch/v1:CronJob update
~ vpc-native-validate-active-users-cron kubernetes:batch/v1:CronJob update
~ vpc-native-sync-subscription-with-cio-cron kubernetes:batch/v1:CronJob update
~ vpc-native-calculate-top-readers-cron kubernetes:batch/v1:CronJob update
~ vpc-native-user-profile-analytics-history-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-expire-super-agent-trial-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-highlighted-views-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-current-streak-cron kubernetes:batch/v1:CronJob update
~ vpc-native-agents-digest-cron kubernetes:batch/v1:CronJob update
~ vpc-native-generic-referral-reminder-cron kubernetes:batch/v1:CronJob update
~ vpc-native-squad-posts-analytics-refresh-cron kubernetes:batch/v1:CronJob update
~ vpc-native-private-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-post-analytics-history-day-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-user-profile-analytics-clickhouse-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-zombie-opportunities-cron kubernetes:batch/v1:CronJob update
~ vpc-native-hourly-notification-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-trending-cron kubernetes:batch/v1:CronJob update
- vpc-native-api-clickhouse-migration-cbaddc6b kubernetes:batch/v1:Job delete
~ vpc-native-clean-zombie-user-companies-cron kubernetes:batch/v1:CronJob update
~ vpc-native-user-profile-updated-sync-cron kubernetes:batch/v1:CronJob update
~ vpc-native-personalized-digest-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-user-posts-analytics-refresh-cron kubernetes:batch/v1:CronJob update
~ vpc-native-temporal-deployment kubernetes:apps/v1:Deployment update
+ vpc-native-api-db-migration-a0865745 kubernetes:batch/v1:Job create
~ vpc-native-bg-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-clean-zombie-users-cron kubernetes:batch/v1:CronJob update
~ vpc-native-clean-stale-user-transactions-cron kubernetes:batch/v1:CronJob update
~ vpc-native-ws-deployment kubernetes:apps/v1:Deployment update
~ vpc-native-clean-gifted-plus-cron kubernetes:batch/v1:CronJob update
~ vpc-native-update-achievement-rarity-cron kubernetes:batch/v1:CronJob update
- vpc-native-api-db-migration-cbaddc6b kubernetes:batch/v1:Job delete
~ vpc-native-personalized-digest-cron kubernetes:batch/v1:CronJob update
... and 5 other changes |
|
@claude please review this pr |
|
Claude finished @nimrodkra's task in 1m 43s —— View job PR Review
Summary: This is a clean, well-scoped copy and push heading change. No logic, data model, or migration changes. The dynamic push heading implementation is solid with proper fallback handling. A couple of minor notes below.
|
Change "3 upvotes." to "3 upvotes!" to match all other milestones. Made-with: Cursor
Summary
Context
Post-#3657 data showed CTR declines across 7 notification types. Two root causes: removing celebratory tone from achievement/milestone types turned them into system messages, and replacing the curiosity-inducing "New update" heading with bland specific headings removed the reason to tap.
Changes target only the declining types. All improvements from #3657 are preserved (source_post_approved +106.5%, post_bookmark_reminder +23.4%, comment_mention +17.6%).
Risk
String-literal changes plus a small function addition in onesignal.ts for dynamic push headings. No logic, data model, or migration changes. Dynamic headings fall back to existing static strings if title parsing fails.
Test plan
Made with Cursor