Guild Activity Feed

Problem

The guild activity feed on the guild hall page and kiosk is currently mocked. Need to wire it to real data. This feed is visible to all members and displayed on the physical kiosk in the shop — privacy implications are serious.

Privacy framework

Anything shown in the guild feed is visible to every member and anyone standing near the kiosk. The bar for inclusion is: would showing this to a stranger in the shop be unambiguously fine?

Show by default (no real-world info leaked)

  • Level ups — pure game mechanic
  • GM bonus XP awards — public recognition, the GM is choosing to highlight someone

Opt-in only (future, when party/friends features exist)

  • Check-ins — reveals real-time location and schedule patterns. Stalking vector.
  • Event attendance — reveals where someone was and when. Same risk.

Never show, period

  • Purchases — what you buy is personal. Amount, items, all of it.
  • Redemptions — spending patterns are personal.
  • Tier changes — implies financial info (upgrading/downgrading subscription).

Display guidelines

  • Don’t show precise timestamps on kiosk/guild feed. “Shadowmere leveled up to Level 12” is fine. “3 minutes ago” on a kiosk tells people who’s in the shop right now.
  • Use nickname (or “Lv 6 Rogue” fallback) per existing privacy.showNickname setting.

Data sources

Level ups

  • Not currently tracked as events. Level is recalculated as a side effect in awardPoints() when XP crosses a threshold.
  • Need to emit a record when a level up occurs (compare before/after level in the award flow).

GM bonus XP

  • Already exists: LoyaltyTransactions with type: bonus and source: manual.
  • Can query and display directly.

Implementation scope (phase 1)

Only level ups and GM awards. Everything else waits for party/friends features and more granular privacy controls.

  • Privacy decision documented in memory: project_guild_activity_privacy.md
  • Guild hall page: src/app/(frontend)/dashboard/guild/page.tsx
  • Mock feed: src/app/(frontend)/dashboard/guild/guild-activity-feed.tsx
  • Loyalty engine: src/lib/loyalty.ts