Skip to content

Notifications ​

Ascendly delivers in-app notifications when scorecard and related events affect you or your team. The same inbox and delivery rules apply on web and the Windows desktop app.


Where to find them ​

ClientBellFull inboxDelivery preferences
WebHeader nav/notificationsAccount / settings
DesktopTitlebar (next to window controls)/notificationsSettings → 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 scorecard.{kind}.submitted_for_you for:

sbs · non_sbs · atw · attendance · productivity · additional_points · incidents

When a manager soft-deletes an entry that affects you, you receive scorecard.{kind}.deleted_for_you. Deletes are recoverable from the web recycle bin while the entry month is open — see Scorecard § Recently deleted.

ATW entry requests ​

Type keyWho receives it
scorecard.atw.request_submittedManagers reviewing the request
scorecard.atw.request_approvedEmployee who submitted the request
scorecard.atw.request_rejectedEmployee who submitted the request

Employees submit requests from desktop My ATW (or web when enabled). Managers approve/reject on the web ATW page.

Evaluation follow-up ​

Type keyPurpose
scorecard.eval.follow_upEmployee pings managers about missing SBS / Non-SBS evaluations

Scheduled reminders (worker) ​

Type keyPurpose
scorecard.evals.missing_teamLeftover monthly gap ping (off by default). Prefer the lock reminders below.
scorecard.weekly_lock.approachingWhen weekly locking is enabled and a week’s lock is within remind_hours_before (default 24h). Body includes how many people in that manager’s scope are short for that week (not later weeks).
scorecard.monthly_lock.approachingWhen monthly locking is enabled and the month’s scheduled lock is within remind_hours_before. Body includes how many people in that manager’s scope are short for the month.

Lock emails are not the Configurations page. Scorecard → Configurations → Scheduled locking is what actually locks periods and shows page banners. System → Notifications types Weekly lock approaching / Monthly lock approaching send in-app + email before that lock, from the worker job weekly_lock_reminders (about every 30 minutes). They do not use the daily 09:00 clock on the notification type. Preview scan reports the next lock even outside the window; Send now only delivers once the remind window is open.

See Scorecard § Scheduled locking.

News — birthday greetings ​

Posting a birthday greeting on News notifies the celebrant with a link to that year’s thread. This path is not listed in the System → Notifications catalog (it is emitted by the news domain).

Not notified today ​

  • Weekly Kudos publish (employees see cards on the desktop widget via poll)
  • Learning assignment / due-date reminders (not built)

Admin configuration ​

Super admins (access level 5) manage catalog 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)
  • On lock / missing-evals types: Also post to the Teams channel (one shared notice; see Teams channel)

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 and the Worker, eligible notifications can also send email to the employee's work address (personal_data.email_address). Test emails and Compose email run on the API; scheduled reminders send from the Worker, which needs the same NOTIFICATION_EMAIL_* variables.

RuleBehavior
User prefsPer-type in-app and email toggles on the delivery preferences panel
Quiet hoursEmail suppressed during configured quiet window (user timezone)
Type catalogAdmins can restrict which channels a type supports
ImpersonationMirror 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.

Teams channel ​

Super admins (level 5) connect one Microsoft Teams channel at System → Teams (/system/teams). This is a shared notice board, not personal chat:

  1. In Teams, add a Workflow to the destination channel: Post to a channel when a webhook request is received.
  2. Paste the HTTPS URL in Ascendly (treat it as a password).
  3. Send a test card. Compose announcements anytime. Automated lock and missing-eval posts stay off until Enable automated Teams posts is on at System → Teams and the type checkbox is on at System → Notifications.

Automatic posts (one per event, not one per manager):

  • Weekly / monthly lock approaching
  • Missing evaluations — department counts only, no employee names

Personal types (submitted_for_you, ATW approve/reject, eval follow-up, birthdays) never post to the channel. Users do not get a Teams delivery toggle. If Teams is down, the bell and email still send; failures show under Recent posts.

v1 cards appear from Workflows. An Ascendly Teams app/bot is later. Optional server override: TEAMS_WEBHOOK_URL.

API: GET/PUT/PATCH/DELETE /v1/system/teams/connection, POST /v1/system/teams/test, POST /v1/system/teams/compose, GET /v1/system/teams/posts.


Web and desktop parity ​

Both clients call the same REST API (GET /v1/notifications, mark read, delivery prefs). Shared behavior:

ConcernRule
TimestampsAPI stores UTC; relative labels (“5m ago”) parse datetimes as UTC
Hooks & formattingDesktop 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 catalog, wire it in the shared web module; desktop picks it up automatically.