Metadata-Version: 2.5
Name: university-notifications
Version: 0.1.0
Summary: University Notifications: in-app, email, push and SMS notifications with preferences, quiet hours and digests for the University platform.
Project-URL: Homepage, https://github.com/NzeStan/University
Project-URL: Documentation, https://github.com/NzeStan/University/blob/main/docs/modules/notifications.md
Project-URL: Source, https://github.com/NzeStan/University
Project-URL: Changelog, https://github.com/NzeStan/University/blob/main/CHANGELOG.md
Author-email: Ifeanyi Stanley <nnamaniifeanyi10@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: africa,django,drf,email,fcm,notifications,push,sms,university
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: Django
Classifier: Framework :: Django :: 5.2
Classifier: Framework :: Django :: 6.0
Classifier: Framework :: Django :: 6.1
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: university-core<0.2,>=0.1
Provides-Extra: test
Requires-Dist: drf-spectacular>=0.27; extra == 'test'
Requires-Dist: pytest-cov>=5; extra == 'test'
Requires-Dist: pytest-django>=4.8; extra == 'test'
Requires-Dist: pytest>=8; extra == 'test'
Description-Content-Type: text/markdown

# university-notifications

Notifications for the [University platform](https://github.com/NzeStan/University):
in-app, email, push (FCM, Expo) and SMS. Includes per-category preferences, quiet hours, digests,
aggregation and retries. This is an optional *level two* module that depends only on
`university-core`.

- **Event-driven.** Mentions, comments, replies, reactions, reposts, follows, moderation
  decisions, appeals, institution verification, community invitations and role changes, and
  security alerts become notifications. None of those modules imports this one.
- **Private by design.**
  - No content copies: titles are rendered when read, from the actor's current name.
  - Blocks are respected, and moderators' identities are never shown.
  - Nothing is sent about anonymous posts.
  - Push tokens are never returned by the API.
- **Aggregation.** "Ada and 4 more reacted to your post". Duplicate events are deduplicated.
- **Preferences.** Per-category and per-channel settings on top of Core's notification
  settings. Mandatory categories (security, moderation) always appear in-app. Quiet hours follow
  each person's own time zone.
- **Reliable delivery.** Each delivery is claimed atomically so it is never sent twice, retried
  with exponential backoff, capped per hour, and skipped once read. Daily or weekly email digests.
- **Africa-ready.** SMS goes through Core's Termii, Africa's Talking and Twilio providers, and
  push previews can be turned off for shared phones.

```bash
pip install university-notifications
```

```python
INSTALLED_APPS += ["university.notifications"]
```

See [the module documentation](../../docs/modules/notifications.md).
