Skip to content

Conversation

@rebelchris
Copy link
Contributor

Summary

  • Anonymous users entering through /recruiter/* pages now default to light theme instead of dark
  • Theme is stored in Redis with 30-day TTL for anonymous users
  • Theme is migrated from anonymous trackingId to userId on login/signup
  • Frontend passes normalized referrer identifiers only (e.g., 'recruiter') for privacy

Related Issues

  • Parent: ENG-332
  • Backend implementation: ENG-334, ENG-335

Test plan

  • Added tests for recruiter default theme logic
  • Manual testing: Visit /recruiter page as anonymous user, verify light theme
  • Manual testing: Sign up after visiting recruiter page, verify theme persists

🤖 Generated with Claude Code

rebelchris and others added 4 commits January 13, 2026 15:24
- Fetch UserCandidatePreference with location relation
- Use preferenceLocation.country as primary source, fallback to flags.country
- Ensures user's explicit location preference takes precedence

Co-authored-by: Chris Bongers <rebelchris@users.noreply.github.com>
- Add Redis storage for anonymous user theme preferences (30-day TTL)
- Accept `referrer` query param in boot endpoint
- Return light theme ('bright') for referrer=recruiter, dark otherwise
- Persist theme choice and don't override on subsequent visits
- Migrate theme from anonymous trackingId to userId on login
- Add tests for recruiter default theme logic

Closes ENG-332, ENG-334, ENG-335, ENG-336

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@pulumi
Copy link

pulumi bot commented Jan 14, 2026

🍹 The Update (preview) for dailydotdev/api/prod (at b57e2bc) was successful.

Resource Changes

    Name                                                   Type                           Operation
~   vpc-native-clean-zombie-user-companies-cron            kubernetes:batch/v1:CronJob    update
~   vpc-native-update-highlighted-views-cron               kubernetes:batch/v1:CronJob    update
~   vpc-native-update-tag-recommendations-cron             kubernetes:batch/v1:CronJob    update
~   vpc-native-update-trending-cron                        kubernetes:batch/v1:CronJob    update
+   vpc-native-api-db-migration-66056841                   kubernetes:batch/v1:Job        create
-   vpc-native-api-clickhouse-migration-1253b599           kubernetes:batch/v1:Job        delete
~   vpc-native-daily-digest-cron                           kubernetes:batch/v1:CronJob    update
~   vpc-native-update-source-public-threshold-cron         kubernetes:batch/v1:CronJob    update
~   vpc-native-deployment                                  kubernetes:apps/v1:Deployment  update
~   vpc-native-update-current-streak-cron                  kubernetes:batch/v1:CronJob    update
~   vpc-native-calculate-top-readers-cron                  kubernetes:batch/v1:CronJob    update
+   vpc-native-api-clickhouse-migration-66056841           kubernetes:batch/v1:Job        create
~   vpc-native-bg-deployment                               kubernetes:apps/v1:Deployment  update
~   vpc-native-update-views-cron                           kubernetes:batch/v1:CronJob    update
~   vpc-native-post-analytics-clickhouse-cron              kubernetes:batch/v1:CronJob    update
~   vpc-native-generic-referral-reminder-cron              kubernetes:batch/v1:CronJob    update
~   vpc-native-ws-deployment                               kubernetes:apps/v1:Deployment  update
-   vpc-native-api-db-migration-1253b599                   kubernetes:batch/v1:Job        delete
~   vpc-native-sync-subscription-with-cio-cron             kubernetes:batch/v1:CronJob    update
~   vpc-native-temporal-deployment                         kubernetes:apps/v1:Deployment  update
~   vpc-native-generate-search-invites-cron                kubernetes:batch/v1:CronJob    update
~   vpc-native-personalized-digest-cron                    kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-zombie-images-cron                    kubernetes:batch/v1:CronJob    update
~   vpc-native-post-analytics-history-day-clickhouse-cron  kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-zombie-opportunities-cron             kubernetes:batch/v1:CronJob    update
~   vpc-native-validate-active-users-cron                  kubernetes:batch/v1:CronJob    update
~   vpc-native-user-profile-updated-sync-cron              kubernetes:batch/v1:CronJob    update
~   vpc-native-update-tags-str-cron                        kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-stale-user-transactions-cron          kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-zombie-users-cron                     kubernetes:batch/v1:CronJob    update
~   vpc-native-private-deployment                          kubernetes:apps/v1:Deployment  update
~   vpc-native-update-source-tag-view-cron                 kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-gifted-plus-cron                      kubernetes:batch/v1:CronJob    update
~   vpc-native-personalized-digest-deployment              kubernetes:apps/v1:Deployment  update
~   vpc-native-check-analytics-report-cron                 kubernetes:batch/v1:CronJob    update
~   vpc-native-hourly-notification-cron                    kubernetes:batch/v1:CronJob    update

rebelchris and others added 4 commits January 14, 2026 16:02
- Apply anonymous theme from Redis when user has no saved settings
- Add tests for theme persistence after login
- Add test for DB settings taking precedence over Redis
- Simplify theme determination logic

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
}
if (req.userId !== whoami.userId) {
// Migrate theme from anonymous trackingId to new userId before overwriting
const oldTrackingId = req.trackingId;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure this part is needed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think so right, because on signup you still don't have settings (until you do something) so we need to still read from redis until that's done.

@rebelchris rebelchris merged commit 629e365 into main Jan 15, 2026
15 checks passed
@rebelchris rebelchris deleted the light-mode branch January 15, 2026 08:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants