Skip to main content
Petanque Life
← Back to all features
09

Communication & Media

148 features · 15 subsystems

Communication tools, content management, live streaming, and media management for the petanque community.

News & Content Management

F09.01
Planned
How it works
  • F09.01.01 Shipped

    News article creation and publication (per federation level)

    ✅ PL-F0901a
  • F09.01.02 Shipped

    Content categories (results, announcements, interviews, opinions)

    ✅ PL-F0901a
  • F09.01.03 Shipped

    Multi-language content support

    ✅ PL-F0901a
  • F09.01.04 Shipped

    Editorial workflow (draft > review > publish)

    ✅ PL-F0901a
  • F09.01.05 Shipped

    Featured/pinned content

    ✅ PL-F0901b
  • F09.01.06 Shipped

    News feed aggregation (from all federation levels)

    ✅ PL-F0901b
  • F09.01.07 Shipped

    RSS feed generation

    ✅ PL-F0901b
  • F09.01.08 Shipped

    Content scheduling (publish at future date)

    ✅ PL-F0901b

Notification System

F09.02
Platform+
How it works
  • F09.02.01 Shipped

    Email notifications (SendGrid)

    ✅ PL-F0902a
  • F09.02.02 Shipped

    SMS notifications (46elks)

    ✅ PL-F0902a
  • F09.02.03 Shipped

    Push notifications (FCM)

    ✅ PL-F0902a
  • F09.02.04 Shipped

    Notification templates (customizable per federation, per language)

    ✅ PL-F0902a
  • F09.02.05 Shipped

    Notification preferences per user (channels, frequency, quiet hours)

    ✅ PL-F0902a
  • F09.02.06 Shipped

    Competition-specific notifications (draw published, next match, results)

    ✅ PL-F0902b
  • F09.02.07 Shipped

    License renewal reminders (notification type)

    ✅ PL-F0902b
  • F09.02.08 Shipped

    Ranking change notifications (notification type)

    ✅ PL-F0902b
  • F09.02.09 Shipped

    Federation circular distribution (bulk send)

    ✅ PL-F0902b
  • F09.02.10 Shipped

    Notification delivery log (history per user)

    ✅ PL-F0902b
  • F09.02.11 Shipped

    Engagement attribution capture — EngagementAttribution-events (email_opened/clicked/bounced, webinar_attended, resource_downloaded, signup) konsumeras från notification-pipen och webinar/resource-event-bus — PL-T223

    ✅ PL-T223
  • F09.02.12 Shipped

    Engagement snapshot builder — idempotent aggregat per (federation_id, club_id, period_type, period_start) med viktad engagement_score 0–100 — PL-T223

    ✅ PL-T223

In-App Messaging

F09.03
Planned
How it works
  • F09.03.01 Shipped

    Direct messaging (player to player, official to player)

    ✅ PL-F0903
  • F09.03.02 Shipped

    Group messaging (team, club, commission)

    ✅ PL-F0903
  • F09.03.03 Shipped

    Federation announcements (broadcast to all members)

    ✅ PL-F0903
  • F09.03.04 Shipped

    Message read receipts

    ✅ PL-F0903
  • F09.03.05 Shipped

    File sharing in messages

    ✅ PL-F0903
  • F09.03.06 Shipped

    Message search

    ✅ PL-F0903

Match Recording & Live Production Studio

F09.04
Planned

Turn any phone/tablet into a camera and produce professional-looking match broadcasts with minimal equipment.

How it works
  • F09.04.01 Shipped

    Record a match directly from the app (one phone = one camera)

    ✅ PL-F0904a
  • F09.04.02 Shipped

    Multi-device camera setup (2-4 phones/tablets as camera sources for same match)

    ✅ PL-F0904a
  • F09.04.03 Shipped

    Camera role assignment (wide court view, close-up, cochonnet cam, player cam)

    ✅ PL-F0904a
  • F09.04.04 Shipped

    Automatic camera switching (AI-based or rule-based: switch to active end of court)

    ✅ PL-F0904a
  • F09.04.05 Shipped

    Manual camera switching (director/commentator selects which camera is live)

    ✅ PL-F0904a
  • F09.04.06 Shipped

    Picture-in-picture mode (main feed + small secondary camera)

    ✅ PL-F0904a
  • F09.04.07 Shipped

    Camera sync (all devices synchronized to same timeline)

    ✅ PL-F0904b
  • F09.04.08 Shipped

    Audio from any camera device (or separate microphone device)

    ✅ PL-F0904b
  • F09.04.09 Shipped

    Live score overlay (auto-synced from match scoring in app)

    ✅ PL-F0904b
  • F09.04.10 Shipped

    Player name/photo overlays when camera focuses on them

    ✅ PL-F0904b
  • F09.04.11 Shipped

    Mène counter and match progress bar

    ✅ PL-F0904b
  • F09.04.12 Shipped

    Boule count indicator (how many boules each team has left)

    ✅ PL-F0904b
  • F09.04.13 Shipped

    Tournament bracket/standings overlay

    ✅ PL-F0904c
  • F09.04.14 Shipped

    Sponsor logo overlay (configurable per competition)

    ✅ PL-F0904c
  • F09.04.15 Shipped

    "Lower third" graphics (player stats, ELO, ranking)

    ✅ PL-F0904c
  • F09.04.16 Shipped

    Custom text overlay (commentator can add text messages)

    ✅ PL-F0904c
  • F09.04.17 Shipped

    Commentator mode (separate device for commentary audio)

    ✅ PL-F0904c
  • F09.04.18 Shipped

    Director mode (separate device to switch cameras and control overlays)

    ✅ PL-F0904c
  • F09.04.19 Shipped

    Drawing tools on screen (draw arrows, circles to demonstrate tactics)

    ✅ PL-F0904d
  • F09.04.20 Shipped

    Telestrator (draw on paused/live video like sports TV)

    ✅ PL-F0904d
  • F09.04.21 Shipped

    Instant replay (mark moments, replay from any camera angle)

    ✅ PL-F0904d
  • F09.04.22 Shipped

    Slow-motion replay

    ✅ PL-F0904d
  • F09.04.23 Shipped

    Split-screen comparison (show two angles simultaneously)

    ✅ PL-F0904d
  • F09.04.24 Shipped

    Pre-match player cards (show stats, ELO, recent form before match)

    ✅ PL-F0904d
  • F09.04.25 Shipped

    Post-mène summary graphic (auto-generated after each end)

    ✅ PL-F0904e
  • F09.04.26 Shipped

    Direct stream to YouTube Live (RTMP integration)

    ✅ PL-F0904e
  • F09.04.27 Shipped

    Direct stream to Twitch

    ✅ PL-F0904e
  • F09.04.28 Shipped

    Direct stream to Facebook Live

    ✅ PL-F0904e
  • F09.04.29 Shipped

    Multi-platform simultaneous streaming

    ✅ PL-F0904e
  • F09.04.30 Shipped

    In-app live viewing (watch directly in Petanque Life)

    ✅ PL-F0904e
  • F09.04.31 Shipped

    Stream quality settings (adapt to available bandwidth)

    ✅ PL-F0904f
  • F09.04.32 Shipped

    Stream schedule and notification (followers get alerted)

    ✅ PL-F0904f
  • F09.04.33 Shipped

    Embeddable live player for federation/club websites

    ✅ PL-F0904f
  • F09.04.34 Shipped

    Live viewer count and chat integration

    ✅ PL-F0904f
  • F09.04.35 Shipped

    Local recording (save to device even without streaming)

    ✅ PL-F0904f
  • F09.04.36 Shipped

    Cloud recording (save all camera feeds to cloud storage)

    ✅ PL-F0904f
  • F09.04.37 Shipped

    Automatic highlight generation (key moments based on score changes)

    ✅ PL-F0904g
  • F09.04.38 Shipped

    Manual highlight clipping (mark start/end of interesting moments)

    ✅ PL-F0904g
  • F09.04.39 Shipped

    Post-match edit: re-cut with different camera angles

    ✅ PL-F0904g
  • F09.04.40 Shipped

    Automatic match summary video (condensed highlights + score)

    ✅ PL-F0904g
  • F09.04.41 Shipped

    VOD archive (all recorded matches searchable by competition, player, date)

    ✅ PL-F0904g
  • F09.04.42 Shipped

    Share match recording (link to specific match video)

    ✅ PL-F0904g
  • F09.04.43 Shipped

    Video linked to match record (watch the video from the match detail page)

    ✅ PL-F0904h
  • F09.04.44 Shipped

    Audio-only mode (commentary without video for low bandwidth)

    ✅ PL-F0904h
  • F09.04.45 Shipped

    Score-only live feed (text updates when video isn't possible)

    ✅ PL-F0904h
  • F09.04.46 Shipped

    Offline recording with later upload (record locally, upload when connected)

    ✅ PL-F0904h
  • F09.04.47 Shipped

    Adaptive bitrate streaming (auto-adjust quality)

    ✅ PL-F0904h

Social Media Integration

F09.05
Planned
How it works
  • F09.05.01 Shipped

    Auto-post results to social media (Facebook, Instagram, X)

    ✅ PL-F0905
  • F09.05.02 Shipped

    Social media content templates

    ✅ PL-F0905
  • F09.05.03 Shipped

    Hashtag management

    ✅ PL-F0905
  • F09.05.04 Shipped

    Social media analytics

    ✅ PL-F0905
  • F09.05.05 Shipped

    User-generated content curation

    ✅ PL-F0905

Photo & Video Management

F09.06
Planned
How it works
  • F09.06.01 Shipped

    Photo gallery per competition/event

    ✅ PL-F0906
  • F09.06.02 Shipped

    Photographer accreditation management

    ✅ PL-F0906
  • F09.06.03 Shipped

    Photo consent management (GDPR)

    ✅ PL-F0906
  • F09.06.04 Shipped

    Video highlight creation tools

    ✅ PL-F0906
  • F09.06.05 Shipped

    Media library with tagging and search

    ✅ PL-F0906
  • F09.06.06 Shipped

    Press kit generation per event

    ✅ PL-F0906

Document Management

F09.07
Platform+
How it works
  • F09.07.01 Shipped

    Federation document repository (statutes, regulations, templates)

    ✅ PL-F0907
  • F09.07.02 Shipped

    Document versioning and history

    ✅ PL-F0907
  • F09.07.03 Shipped

    Document access control (public, members, officials only)

    ✅ PL-F0907
  • F09.07.04 Shipped

    Form templates (license application, transfer request, etc.)

    ✅ PL-F0907
  • F09.07.05 Shipped

    Digital signature integration

    ✅ PL-F0907

Sociala medier-integration

F09.08
Planned

Platform-specific auto-publishing of match results, player cards, and highlight videos to Facebook, Instagram, X/Twitter, and TikTok. Result graphic generator, player card templates, competition trailers, and social media calendar.

How it works
  • F09.08.01 Shipped

    Auto-post to Facebook after match result

    ✅ PL-F0908a
  • F09.08.02 Shipped

    Auto-post to Instagram with player card

    ✅ PL-F0908a
  • F09.08.03 Shipped

    Twitter/X integration for match results

    ✅ PL-F0908a
  • F09.08.04 Shipped

    TikTok publishing of highlights

    ✅ PL-F0908a
  • F09.08.05 Shipped

    Resultat-grafikgenerator (Open Graph match-result image cards)

    ✅ PL-F0908b
  • F09.08.06 Shipped

    Player card-generator med anpassningsbar mall

    ✅ PL-F0908b
  • F09.08.07 Shipped

    Tävlings-trailer auto-genererad från schema

    ✅ PL-F0908b
  • F09.08.08 Shipped

    Social media calendar per klubb/federation

    ✅ PL-F0908b

Marketing vs transactional emails (gränsdragning)

F09.09
Shipped

*Introducerad: PL-T152. Se `docs/engineering/integrations/email-distributor.md` och `docs/engineering/operations/newsletter-playbook.md`.*

How it works
  • F09.09.01 Shipped

    Delad EmailDistributor-abstraktion — send_transactional vs send_bulk-metoder i samma interface, samma backend (Mailjet/ACS/Null)

    ✅ PL-T152
  • F09.09.02 Shipped

    Delad suppression-lista (newsletter_suppressions) — hard-bounce/complaint från transactional blockerar även marketing till samma adress och vice versa

    ✅ PL-T152
  • F09.09.03 Shipped

    Separata quota/rate-limits — transactional har ingen throttle, marketing cap:ar via campaign throttle_per_hour

    ✅ PL-T152
  • F09.09.04 Shipped

    Quiet-hours-policy — marketing-sends pausar 22:00–07:00 recipient-local; transactional oberörda; override kräver fresh-auth

    ✅ PL-T152
  • F09.09.05 Shipped

    Separata audit-actions i sys_audit_entries — notification.* för transactional, newsletter.* för marketing; gör det trivialt att revidera varje typ för sig

    ✅ PL-T152

Broadcaster realtidsfeed

F09.10
Planned

Per-tenant realtidsfeed för broadcasters, regi-team och stats-providers

  • F09.10.01 Shipped

    BroadcasterFeed-dokument med slug, event_id, scopes, latency_budget_ms

    ✅ PL-T216
  • F09.10.02 Shipped

    Token-utfärdande JWT ES512 med kid + scopes + broadcaster_id; HS512-fallback för tester

    ✅ PL-T216
  • F09.10.03 Shipped

    SSE-streaming /broadcast/public/feeds/{slug}/stream med scope- + event-validering

    ✅ PL-T216
  • F09.10.04 Shipped

    In-memory pub/sub-broker med 60-sekunders replay-fönster

    ✅ PL-T216
  • F09.10.05 Shipped

    Last-Event-ID-reconnect spelar upp missade events efter avbrott

    ✅ PL-T216
  • F09.10.06 Shipped

    Token-revoke roterar kid → äldre tokens fail:ar med token_revoked

    ✅ PL-T216
  • F09.10.07 Shipped

    Publish-endpoint validerar event_type mot whitelist (422 om okänd)

    ✅ PL-T216
  • F09.10.08 Shipped

    Replay-endpoint /broadcast/feeds/{feed_id}/replay för admin debug

    ✅ PL-T216

Broadcast graphics package

F09.11
Planned

Versionerad grafik-paket för OBS / vMix / Wirecast browser-sources:

  • F09.11.01 Shipped

    BroadcastGraphicsPackage-dokument med theme + templates[]

    ✅ PL-T216
  • F09.11.02 Shipped

    Färgvalidering (#rrggbb) på theme-fält

    ✅ PL-T216
  • F09.11.03 Shipped

    Mall-uppdatering bumpar paketets version automatiskt

    ✅ PL-T216
  • F09.11.04 Shipped

    Embed-endpoint /embed/scorebug/{template_slug} returnerar HTML/JS för OBS

    ✅ PL-T216
  • F09.11.05 Shipped

    Browser-source-token validerar mot browser scope och package-binding

    ✅ PL-T216
  • F09.11.06 Shipped

    "Set default"-paket per tenant; en åt gången

    ✅ PL-T216
  • F09.11.07 Shipped

    Admin-preview-endpoint renderar mall som standalone HTML för QA

    ✅ PL-T216

Press-kit generator (utbyggd)

F09.12
Planned

Versionerad, flerspråkig press-kit per event eller säsong. Embargo-

  • F09.12.01 Shipped

    BroadcastPressKit-dokument med locales[], content{}, assets[], version

    ✅ PL-T216
  • F09.12.02 Shipped

    Locale-content-validering (varje content-key måste finnas i locales[])

    ✅ PL-T216
  • F09.12.03 Shipped

    Publish bumpar version, sätter published_at, audit-loggar publish

    ✅ PL-T216
  • F09.12.04 Shipped

    Public render-endpoint /broadcast/public/press-kits/{event_id}/{lang}

    ✅ PL-T216
  • F09.12.05 Shipped

    Embargo blockerar anonyma viewers (403) tills embargo_until passerat

    ✅ PL-T216
  • F09.12.06 Shipped

    Approved press-credentials med broadcaster/press outlet-typ bypassar embargo

    ✅ PL-T216
  • F09.12.07 Shipped

    Saknad locale returnerar 404

    ✅ PL-T216
  • F09.12.08 Shipped

    Releases, approved-quotes, fact-sheets som strukturerade fält per locale

    ✅ PL-T216

Content syndication (RSS/Atom/JSON Feed)

F09.13
Planned

Per-tenant syndication-feeds för downstream-republishers. Tre format:

  • F09.13.01 Shipped

    ContentSyndication-dokument med slug, formats[], whitelist, embargo

    ✅ PL-T216
  • F09.13.02 Shipped

    RSS 2.0-renderer i application/rss+xml

    ✅ PL-T216
  • F09.13.03 Shipped

    Atom 1.0-renderer i application/atom+xml

    ✅ PL-T216
  • F09.13.04 Shipped

    JSON Feed 1.1-renderer i application/feed+json

    ✅ PL-T216
  • F09.13.05 Shipped

    Outlet-whitelist tomt = öppen feed; satt = anonym GET returnerar tom body

    ✅ PL-T216
  • F09.13.06 Shipped

    Per-outlet rate-limit OutletRateLimiter returnerar 429 + Retry-After: 60

    ✅ PL-T216
  • F09.13.07 Shipped

    Embargo-minutes filtrerar bort items publicerade senaste N minuter

    ✅ PL-T216
  • F09.13.08 Shipped

    Locale-filter på item-nivå för flerspråkiga publicister

    ✅ PL-T216

Syndication outlet onboarding

F09.14
Planned

Self-service ansökningsflöde för broadcasters / sportjournalister /

  • F09.14.01 Shipped

    SyndicationOutlet-dokument med name, contact, api_key_ref (sha256), is_active

    ✅ PL-T216
  • F09.14.02 Shipped

    Public apply-endpoint /broadcast/public/syndication/outlets/apply

    ✅ PL-T216
  • F09.14.03 Shipped

    Approve returnerar api_key exakt en gång + sätter is_active=true

    ✅ PL-T216
  • F09.14.04 Shipped

    Double-approve blockeras med 409

    ✅ PL-T216
  • F09.14.05 Shipped

    API-key-verifiering matchar sha256(api_key) mot api_key_ref

    ✅ PL-T216

Media accreditation (utbyggd)

F09.15
Planned

Per-event accrediterings-kort med QR + entry-scan-logg + intervju-

  • F09.15.01 Shipped

    MediaCredential-dokument med journalist + outlet + zones + valid_from/to

    ✅ PL-T216
  • F09.15.02 Shipped

    Public apply-endpoint /broadcast/public/credentials/apply

    ✅ PL-T216
  • F09.15.03 Shipped

    Admin review-endpoint stänger till approved eller denied med reason

    ✅ PL-T216
  • F09.15.04 Shipped

    QR-endpoint utfärdar JWT med credential_id + kid + valid_from/to claims

    ✅ PL-T216
  • F09.15.05 Shipped

    Scan-endpoint /broadcast/media/scan returnerar 7 stabila detail-strings vid 401

    ✅ PL-T216
  • F09.15.06 Shipped

    Revoke roterar qr_payload_kid → gamla QR fail:ar med token_revoked

    ✅ PL-T216
  • F09.15.07 Shipped

    Entry-scans loggas med gate, riktning, zon, scanned_by

    ✅ PL-T216
  • F09.15.08 Shipped

    MediaInterviewSlot-dokument för bokningsbara mixed-zone-fönster

    ✅ PL-T216
  • F09.15.09 Shipped

    Slot-booking validerar approved-status; double-book → 409; full slot → 409

    ✅ PL-T216
  • F09.15.10 Shipped

    Lyckad booking länkar slot_id till credential.interview_slot_ids

    ✅ PL-T216