Notifications
Ascendly delivers in-app notifications when scorecard events affect you or your team. The same inbox and delivery rules apply on web and the Windows desktop app.
Where to find them
| Client | Bell | Full inbox | Delivery preferences |
|---|---|---|---|
| Web | Header nav | /notifications | Account / settings |
| Desktop | Titlebar (next to window controls) | /notifications | Settings → Notifications |
Unread count appears on the bell. New items can also show as toasts while you are signed in. Desktop can optionally mirror toasts as native OS notifications (user preference).
What triggers notifications
Scorecard entries (seven submission types)
When someone submits an entry for you (as the evaluated employee), you receive an in-app notification such as scorecard.atw.submitted_for_you. Types follow the pattern scorecard.{kind}.submitted_for_you for SBS, Non-SBS, ATW, Attendance, Productivity, Additional Points, and Incidents.
When a manager soft-deletes an entry that affects you, you receive scorecard.{kind}.deleted_for_you with who deleted it and a short summary. Deletes are recoverable from the web recycle bin while the entry month is open — see Scorecard § Recently deleted.
ATW entry requests (employees)
Employees can submit ATW entry requests from the desktop app (or web when enabled). Managers receive review notifications; employees receive approved or rejected outcomes.
Scheduled reminders (worker)
The background worker can emit:
- scorecard.evals.missing_team — managers when direct reports have evaluation gaps in the current month. Schedule and timezone are configured by admins.
- scorecard.weekly_lock.approaching — when weekly locking is enabled and a week’s scheduled lock is within the configured reminder window (
remind_hours_before, default 24h). See Scorecard § Weekly locking.
Admin configuration
Super admins (access level 5) manage notification types at System → Notifications (/system/notifications):
- Enable or disable each type
- Edit title/body templates
- Configure scheduled types (time + IANA timezone; UI shows local time)
Users control delivery per type: in-app and email on/off independently (when email is enabled on the server).
Email delivery (Gmail)
When NOTIFICATION_EMAIL_ENABLED=true and Gmail delegation is configured on the API, eligible notifications can also send email to the employee's work address (personal_data.email_address).
| Rule | Behavior |
|---|---|
| User prefs | Per-type in-app and email toggles on the delivery preferences panel |
| Quiet hours | Email suppressed during configured quiet window (user timezone) |
| Type catalog | Admins can restrict which channels a type supports |
| Impersonation | Mirror notifications to the impersonator's inbox skip email |
Super admins can send a test email from System → Notifications (POST /v1/system/notifications/email-test).
Env vars: NOTIFICATION_EMAIL_ENABLED, NOTIFICATION_EMAIL_IMPERSONATE, NOTIFICATION_EMAIL_FROM, NOTIFICATION_APP_BASE_URL. See engineering api/.env.example.
Web and desktop parity
Both clients call the same REST API (GET /v1/notifications, mark read, delivery prefs). Shared behavior:
| Concern | Rule |
|---|---|
| Timestamps | API stores UTC; relative labels (“5m ago”) parse datetimes as UTC |
| Hooks & formatting | Desktop imports web/src/notifications/* — do not maintain separate copies |
| Scorecard side-effects (desktop) | When a scorecard.* notification arrives, desktop Home / BSC cards refetch so ATW points and BSC % stay in sync after deletes |
If you add a notification type on the API, wire it in the shared web module; desktop picks it up automatically.
Related docs
- Scorecard — entry CRUD, soft delete, recycle bin
- Desktop app — employee Home, My ATW, notification bell
- Platform & admin — sign-in domains, system status, admin email
- Dashboard overview — BSC self view (live scores after entry changes)
- Progress report — shipping status
