PROTOTYPE Clickable mockup · simulates the finished app ◃ Product overview
Petanque Life Operator Console
Production OP

Support workbench

Unified ticket handling with reporter context, canned responses and known-issue matching — plus operator quality, CSAT, sys communications and growth tools. sys_finance is denied ticket access.

Unified inbox · email ingest (support@) + in-app + Slack-forwarded · idempotent on external_ref · F21.10.01
TicketSubjectReporter · tenantSourceStatusAssignee
#4471 License card not rendering astrid@nordvikpetanque.se · Nordvik email open · high maria.ek
#4470 Wrong ranking after Sunday sweep hakan@granholmpk.se · Granholm in-app open · normal
#4468 Payment stuck on Swish kassor@sjostadboule.se · Sjöstad slack escalated:engineering jonas.holm
#4462 Double-charged event fee marie@petitcochonnet.fr · Provence email resolved maria.ek
States
⏳ Loading tickets…
🎉 Inbox zero — nothing open.
⚠ Ingest webhook failing — see webhook inbox.
Ticket #4471 · thread timeline (inbound / reply / canned / note / escalation / status / assignment) · F21.10.02
License card not rendering
Astrid Sjöberg · astrid@nordvikpetanque.se · Nordvik Boule · last 20 audit rows attached (incl. impersonation trails)
inbound · 09:44
"My license card is blank since I switched phones…"
canned applied · 10:02 · maria.ek
license-card-refresh (variables filled, previewed)
note · 10:05
Matches KI-081 — passkey re-onboard case.

Every mutation writes metadata.ticket_id; the console sends x-sys-ticket-id so collateral reads during impersonation carry the same tag (F21.10.07).

Known-issue matches · fuzzy score, top 3 via SSE · F21.10.08
KI-081 · score 9.2
License card blank after passkey re-onboard → apply suggested canned response
KI-077 · score 2.1 · KI-063 · score 1.4
Session replay · per-tenant opt-in, PII scrubbed · F21.10.05
Nordvik Boule: opted in · 2 replays in window · signed URL 15 min · 30 d retention · email/phone/IBAN/personnummer redacted at ingest.
Log search from ticket · F21.10.06
Inline tail: 14 ApiUsageEvent rows for reporter + tenant window.
App Insights deep-link → · Loki deep-link →
Canned responses · declared variables, live preview · F21.10.03
license-card-refreshvars: first_name (default: there)
Hi {{first_name}}, pull down to refresh your license card…
ranking-sweep-explainervars: —
Rankings recompute nightly at 03:00 UTC…
refund-confirmationvars: amount
We have refunded {{amount}} to your original payment method…
Known-issues library · draft/active/resolved/archived · maintained by sys_engineer/sys_security · F21.10.08
KI-081 · License card blank after passkey re-onboard active
workaround: force sync in app settings
KI-077 · Swish callback delayed on weekends active
auto-heals; escalate only past 2 h
KI-063 · Duplicate players after federation import resolved
fixed in v2026.06.1 — merge tool for leftovers
Support notes · per user / tenant · pinned-first, expiry sweep · F21.10.09
preferencevipcompliancewatchcontext
📌 vip · Nordvik Boule — federation pilot contact; loop in lena.vik on anything billing.
by maria.ek · no expiry · never shown to the user (except GDPR subject-access snapshot)
fresh-auth on mutation
Operator-quality metrics · 7 d / 30 d windows · cross-operator view needs sys_engineer/sys_security · F21.10.10
OperatorTickets (30 d)First response / resolutionCSATReviews
maria.ek 38 resolved / 41 assigned 28 min / 4.1 h 4.8 CSAT 6 pass / 0 fail
jonas.holm 24 resolved / 29 assigned 41 min / 6.8 h 4.5 CSAT 4 pass / 1 fail
lena.vik 31 resolved / 31 assigned 22 min / 3.2 h 4.9 CSAT 5 pass / 0 fail
Leaderboard by chosen metric · self-query always allowed, cross-operator otherwise 403.
Peer-review queue · weekly 2% sampling + CSAT-low auto-flags · F21.10.11
Review R-2214 · jonas.holm · impersonation session 28 Jun
flag_reason: csat_low (rating 2)

Self-verdicts and duplicates blocked · reviewer identity blinded after 90 d.

CSAT · one-shot signed invite (14 d TTL) on resolve · F21.10.12
4.7
platform average, 30 d · 214 responses · rating ≤ 2 auto-flags the resolving operator
Own aggregate visible to every operator; per-operator breakdown requires sys_security.

The broadcast composer with mandatory test-send (≤ 30 min, per-operator — 412 otherwise, F21.12.01/05) lives on Broadcast; login + post-login system announcements on System announcements.

Banner library · reusable templates → activations with windows + audience · F21.12.02
maintenancewindow 5 Jul 01:00 → 03:00 · all tenants
Planned maintenance Sunday 01:00–03:00 CET
incidentactive now · tenants: Sjöstad · roles: all
We are investigating elevated latency
featurewindow 1–14 Jul · role: admins
New: multi-stage play formats
Release-notes publisher · internal | external → /public/changelog · F21.12.03
v2026.07.1 external Multi-stage formats, faster rankings, 12 fixes
v2026.06.2 internal Escrow console, ops hardening
Sys operator inbox · broadcast replies + inbound mail · assign/close · F21.12.04
✉ Re: Competition module news — "does this apply to district leagues?" · unassigned
✉ Inbound: press question from Boule Magasinet · assigned lena.vik
1:1 direct message to user · F21.12.06
fresh-auth

Rate limit 5 DM/operator/user/24 h · user opt-out (dm_muted) suppresses channels and is recorded in the receipt.

Webinars · create auto-provisions Calendar + Meet · F21.21
Getting started for club admins SCHEDULED
9 Jul 18:00 · host lena.vik · 48 registered
Competition module deep-dive SCHEDULED
21 Jul 18:00 · host jonas.holm · 31 registered
Spring onboarding recap PUBLISHED
12 May · 112 attended · recording published

Lifecycle: DRAFT → SCHEDULED (publish refuses without Meet URL) → ENDED → PUBLISHED (recording) · cancel e-mails attendees + deletes the Calendar event · interest-lead preview shows matching topic subscribers (F21.21.06).

Newsletter suite · lists, segments, templates, campaigns, automations · F21.23
July product newsscheduled 8 Jul 09:00
list: platform-admins · segment: active admins · A/B subject (2 variants)
Win-back — lapsed clubsrunning · 214 enrolled
automation: 90-day win-back · flow: trigger→wait→send→branch
June newsletteropen 41% · click 9.8%
sent 5 Jun · 4 812 recipients · winner: variant B (+3.1 pp)
Lists + CSV import w/ consent attestationVisual segment-builder (AND/OR, live count)MJML template editor + gallery7-step campaign wizard (A/B, send-time opt, spam-score)Lifecycle: test-send → schedule → pause/resume/cancelAnalytics: timeline, per-variant Wilson-CI, winnerClick heatmap per linkCohorts: per tenant/role/language + CSVAutomation flows: onboarding / re-engagement / win-backAI assist: subjects, polish, reaction (quota 50/24 h)Deliverability per from-domain (SPF/DKIM/DMARC, halt-sends)Suppressions: global do-not-send w/ reasonAnalytics overview: growth, churn, at-risk
fresh-auth on send/schedule/suppression delete

GDPR subscriber delete cascades events + enrolments but preserves the suppression row · all actions audited as newsletter.*.