Summary
Add secure webhook ingestion routes that can receive membership, pass, guild, and verification events and turn them into dashboard activity records.
Current Behaviour
The dashboard activity feed is static mock data, and the optional webhook utilities are not wired into dashboard route handlers.
Expected Behaviour
The dashboard should have server-side webhook endpoints that verify signatures, parse supported event types, and record or expose resulting activity events.
Suggested Implementation
Create Next.js route handlers under app/api/webhooks/. Use packages/webhook-utils for signature verification. Define an event mapping layer from webhook payloads to the dashboard ActivityEvent model.
Files or Areas Likely Affected
apps/dashboard/app/api/webhooks/
apps/dashboard/lib/activity/
apps/dashboard/lib/env.ts
packages/webhook-utils/src/
apps/dashboard/app/activity/page.tsx
README.md
Acceptance Criteria
Additional Notes
Assumption: durable persistence may not exist yet. If so, use an interface that can support in-memory mock storage now and database storage later.
Summary
Add secure webhook ingestion routes that can receive membership, pass, guild, and verification events and turn them into dashboard activity records.
Current Behaviour
The dashboard activity feed is static mock data, and the optional webhook utilities are not wired into dashboard route handlers.
Expected Behaviour
The dashboard should have server-side webhook endpoints that verify signatures, parse supported event types, and record or expose resulting activity events.
Suggested Implementation
Create Next.js route handlers under
app/api/webhooks/. Usepackages/webhook-utilsfor signature verification. Define an event mapping layer from webhook payloads to the dashboardActivityEventmodel.Files or Areas Likely Affected
apps/dashboard/app/api/webhooks/apps/dashboard/lib/activity/apps/dashboard/lib/env.tspackages/webhook-utils/src/apps/dashboard/app/activity/page.tsxREADME.mdAcceptance Criteria
Additional Notes
Assumption: durable persistence may not exist yet. If so, use an interface that can support in-memory mock storage now and database storage later.