// ACHIEVEMENTS.LOG / MAY 22, 2026
◈ TECHNICAL

Real-Time In-App Notifications

Spend alerts, invite events, and key lifecycle changes now surface as bilingual in-app notifications alongside email delivery.

Important events no longer require checking your inbox. The portal now delivers notifications in-app, in the user's preferred language, with persistent read/unread state.

Notification kinds

Design

Notifications are stored in a dedicated notifications table keyed on uid or org_id. Each record carries a kind discriminator, bilingual title_en/title_it and body_en/body_it fields, a read_at TIMESTAMPTZ column (null = unread), and a link URL pointing to the relevant resource. Email delivery runs in parallel — the in-app record and the email are dispatched from the same event handler so neither can silently skip.

Event trigger → notifications.write() + smtp.send_async() → portal badge update