Blueprint

Push & subscriptions

Web Push (VAPID), subscription APIs, and related models.

Overview

Push uses Web Push with a public VAPID key exposed to the client.

RoutePurpose
GET /api/vapid-public-keyReturns the public VAPID key for pushManager.subscribe
POST /api/notifications/subscribeSaves PushSubscription; optional Binance Alpha and website reminder flags; accepts logged-in uuid or anonymousId (src/app/api/notifications/subscribe/route.ts)
POST /api/notifications/unsubscribeRemove subscription
GET /api/notifications/checkSubscription / notification checks
POST /api/notifications/migrateMigration path for stored subscriptions

Service layer: src/services/push-notification.ts; models such as createOrUpdateBinanceAlphaSubscription in src/models/notification.ts.

Data flow

  1. Client fetches /api/vapid-public-key.
  2. Browser creates subscription → POST /api/notifications/subscribe with JSON body.
  3. Server persists endpoint + keys; cron or event jobs may send notifications (see cron docs for notify-events, notify-website-reminders, etc.).

Key files

  • src/app/api/vapid-public-key/route.ts
  • src/app/api/notifications/**
  • src/services/push-notification.ts
  • src/models/notification.ts (and blacklist: addToBlacklist used from sync flows)

Dependencies

Environment

  • NEXT_PUBLIC_VAPID_PUBLIC_KEY — returned by /api/vapid-public-key.
  • VAPID_PRIVATE_KEY, VAPID_SUBJECT — server-side Web Push (src/services/push-notification.ts).

Database (src/db/schema.ts)

  • push_subscriptions, binance_alpha_subscriptions, website_reminder_subscriptions
Push & subscriptions | Tracker Dog Docs