diff --git a/federation/templates/federation/_notification.html b/federation/templates/federation/_notification.html
index d18ef4d..06fcd6e 100644
--- a/federation/templates/federation/_notification.html
+++ b/federation/templates/federation/_notification.html
@@ -16,7 +16,7 @@
{% if notif.notification_type == "follow" %}
- followed you
+ followed you{% if notif.app_domain and notif.app_domain != "federation" %} on {{ notif.app_domain }}{% endif %}
{% elif notif.notification_type == "like" %}
liked your post
{% elif notif.notification_type == "boost" %}
diff --git a/shared/alembic/versions/w3u1q9r0s1_add_app_domain_to_notifications.py b/shared/alembic/versions/w3u1q9r0s1_add_app_domain_to_notifications.py
new file mode 100644
index 0000000..df086bc
--- /dev/null
+++ b/shared/alembic/versions/w3u1q9r0s1_add_app_domain_to_notifications.py
@@ -0,0 +1,23 @@
+"""Add app_domain to ap_notifications.
+
+Revision ID: w3u1q9r0s1
+Revises: v2t0p8q9r0
+"""
+from alembic import op
+import sqlalchemy as sa
+
+revision = "w3u1q9r0s1"
+down_revision = "v2t0p8q9r0"
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+ op.add_column(
+ "ap_notifications",
+ sa.Column("app_domain", sa.String(30), nullable=True),
+ )
+
+
+def downgrade() -> None:
+ op.drop_column("ap_notifications", "app_domain")
diff --git a/shared/contracts/dtos.py b/shared/contracts/dtos.py
index 30ec3d6..c023580 100644
--- a/shared/contracts/dtos.py
+++ b/shared/contracts/dtos.py
@@ -316,3 +316,4 @@ class NotificationDTO:
from_actor_domain: str | None = None
from_actor_icon: str | None = None
target_content_preview: str | None = None
+ app_domain: str | None = None
diff --git a/shared/infrastructure/ap_inbox_handlers.py b/shared/infrastructure/ap_inbox_handlers.py
index d972631..73eb115 100644
--- a/shared/infrastructure/ap_inbox_handlers.py
+++ b/shared/infrastructure/ap_inbox_handlers.py
@@ -253,6 +253,7 @@ async def handle_follow(
actor_profile_id=actor_row.id,
notification_type="follow",
from_remote_actor_id=ra.id,
+ app_domain=app_domain,
)
session.add(notif)
diff --git a/shared/models/federation.py b/shared/models/federation.py
index 3521d29..3e62139 100644
--- a/shared/models/federation.py
+++ b/shared/models/federation.py
@@ -422,6 +422,7 @@ class APNotification(Base):
target_remote_post_id: Mapped[int | None] = mapped_column(
Integer, ForeignKey("ap_remote_posts.id", ondelete="SET NULL"), nullable=True,
)
+ app_domain: Mapped[str | None] = mapped_column(String(30), nullable=True)
read: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False, server_default="false")
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), nullable=False, server_default=func.now(),
diff --git a/shared/services/federation_impl.py b/shared/services/federation_impl.py
index 3ff199c..46e7948 100644
--- a/shared/services/federation_impl.py
+++ b/shared/services/federation_impl.py
@@ -1620,6 +1620,7 @@ class SqlFederationService:
target_content_preview=preview,
created_at=notif.created_at,
read=notif.read,
+ app_domain=notif.app_domain,
))
return items