Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

02 - User Personas (Webhooks Module)

Personas that drive the Webhooks module surfaces. The module is a developer/integration tool: its primary users are technical. Derived from src/modules/webhooks/** capabilities; nothing outside source is asserted.


1. Tenant Developer — "Nadia" (primary)

AttributeDetail
RoleSoftware developer / system integrator at the school (or vendor integrator on behalf of the tenant)
ContextBuilds or maintains external systems (attendance hardware, SMS gateway, analytics, BI) that must react to StudyLyon events
ToolsAPI docs, Swagger (/api/v1/webhooks), webhook signing library, delivery logs
Permissionswebhook.create, webhook.read, webhook.update, webhook.delete (permissions.constants.ts:89-92)
GoalsRegister an endpoint once; subscribe to exactly the events that matter; verify signatures (X-Webhook-Signature, HMAC-SHA256, webhook-delivery.worker.ts:70-82, 103-105); confirm deliveries land; retry failures
Frictions todayNo event-type whitelist - free-form events: string[] (create-webhook.dto.ts:20-24); secret returned in plaintext by every CRUD read (webhooks.service.ts:31-47); logs capped at 50, unpaginated (webhooks.service.ts:88-93)
Success metricEndpoint receives events reliably; signature verifies first time; delivery log shows green

2. School Admin / IT Coordinator — "Mr. Adeyemi"

AttributeDetail
RoleNon-technical school administrator with elevated RBAC role
ContextApproves and operates vendor integrations that consume StudyLyon events
Permissionswebhook.read, webhook.update (pause/resume)
GoalsSee which integrations are active; pause a webhook when a vendor behaves badly (POST /webhooks/:id/pause, webhooks.controller.ts:78-83); view delivery health without reading raw JSON
Friction todayNo aggregate health surface beyond per-webhook metrics (webhooks.service.ts:142-156); failure reasons are raw responseBody strings (webhook-delivery-log.schema.ts:28-29)
Success metricCan explain "why is this integration slow" from the metrics tile alone

3. Platform / Security Reviewer — "Dr. Okafor" (forward-looking)

AttributeDetail
RoleTenancy-wide auditor (platform admin bypasses tenant scope, base.repository.ts:20-30)
ContextReviews signature schemes, secret handling, replay risk
GoalsSecret rotation policy; timestamped signatures
Friction todaySignature has no timestamp / replay window (webhook-delivery.worker.ts:103-105); no rotation endpoint (PATCH only, webhooks.controller.ts:39-43)
StatusDrives the security QA items in 14_QA_Checklist.md; persona is a stretch goal, not a shipped surface

4. Vendor DevOps — "Anjali" (forward-looking)

AttributeDetail
RoleExternal SaaS provider consuming StudyLyon events (planned inbound public scope, IMPLEMENTATION_PLAN.md:48)
ContextDelivers their webhook to StudyLyon in the future (e.g. test-series integration, IMPLEMENTATION_PLAN.md:856)
StatusNo receiver exists in source; surfaced only to scope (planned) work - not a current target persona

Persona - screen mapping

PersonaScreens (05)
Tenant Developer1 list, 2 create (event picker), 3 detail, 4 edit, 5 logs, 6 log detail, 7 test, 8 retry
School Admin1 list, 3 detail (metrics + pause/resume), 5 logs
Security Reviewer3 detail (secret), 14 QA items

Notes

  • The event picker must present the actual event types emitted by the platform (src/infrastructure/bullmq/event-queue-map.ts:6-43) - the API accepts any string, so the client is responsible for offering valid options (create-webhook.dto.ts:20-24).
  • webhook.read gates both the webhook itself and its logs/metrics (webhooks.controller.ts:27-37, 52-56, 72-76) - no separate log permission.