Mobile & Fan Experience
120 features · 11 subsystems
Mobile applications, spectator/fan features, gamification, and community engagement tools.
Mobile Application
F15.01- F15.01.01 Shipped
Cross-platform app (iOS, Android, Web) via Craft-Easy Admin (React Native/Expo)
✅ PL-F1501a - F15.01.02 Shipped
Player mobile app (profile, competitions, results, rankings)
✅ PL-F1501a - F15.01.03 Shipped
Official mobile app (match management, score entry)
✅ PL-F1501a - F15.01.04 Shipped
Club admin mobile app (member management, communication)
✅ PL-F1501a - F15.01.05 Shipped
Spectator mobile app (live scores, schedule, venue info)
✅ PL-F1501a - F15.01.06 Shipped
Offline mode (score entry without connectivity, sync later)
✅ PL-F1501b - F15.01.07 Shipped
Push notifications
✅ PL-F1501b - F15.01.08 Shipped
QR code scanner (license verification, check-in)
✅ PL-F1501b - F15.01.09 Shipped
GPS-based nearby venue/competition finder
✅ PL-F1501b - F15.01.10 Shipped
Dark mode and accessibility settings
✅ PL-F1501b
Live Match Experience
F15.02- F15.02.01 Shipped
Real-time live scores across all courts
✅ PL-F1502a - F15.02.02 Shipped
Match timeline (point-by-point history)
✅ PL-F1502a - F15.02.03 Shipped
Court view (visual representation of ongoing matches)
✅ PL-F1502a - F15.02.04 Shipped
Follow specific player/team (personalized updates)
✅ PL-F1502a - F15.02.05 Shipped
Live commentary feed
✅ PL-F1502b - F15.02.06 Shipped
Score alerts and notifications
✅ PL-F1502b - F15.02.07 Shipped
Multi-match view (watch multiple courts)
✅ PL-F1502b - F15.02.30 Shipped
Adaptive bitrate stream profile (HLS/DASH renditions, server-managed)
✅ PL-T219 - F15.02.31 Shipped
Picture-in-picture support flag per stream profile
✅ PL-T219 - F15.02.32 Shipped
Commentary language toggle (Accept-Language sortering, default-track)
✅ PL-T219 - F15.02.33 Shipped
Stream geo-block policy (ISO-3166-1 alpha-2, expiry, requires_auth)
✅ PL-T219
Community Features
F15.03- F15.03.01 Shipped
Player profile pages (public)
✅ PL-F1503a - F15.03.02 Shipped
Club profile pages (public)
✅ PL-F1503a - F15.03.03 Shipped
Follow players and clubs
✅ PL-F1503a - F15.03.04 Shipped
Activity feed (followed players' results, upcoming matches)
✅ PL-F1503a - F15.03.05 Shipped
Find-a-player (looking for team members)
✅ PL-F1503b - F15.03.06 Shipped
Find-a-club (new player looking for local club)
✅ PL-F1503b - F15.03.07 Shipped
Forums / discussion boards per club, region, topic
✅ PL-F1503b - F15.03.08 Shipped
Event reviews and photos sharing
✅ PL-F1503b - F15.03.20 Shipped
Multilingual forums (locale-default + i18n_strings, BCP-47-validering)
✅ PL-T219 - F15.03.21 Shipped
Cross-locale forum discovery (locale=* aggregerar alla språk)
✅ PL-T219 - F15.03.22 Shipped
Forum auto-moderation (regel-baserad: profanity-regex, link-spam, all-caps, spam-score)
✅ PL-T219 - F15.03.23 Shipped
Forum mentions + reactions (@user → push-pipeline, emoji-toggle på posts)
✅ PL-T219
Gamification
F15.04- F15.04.01 Shipped
Achievement badges (first competition, 100 matches, etc.) — PL-F1504a
✅ PL-F1504a - F15.04.02 Shipped
Milestone tracking and celebrations — PL-F1504a
✅ PL-F1504a - F15.04.03 Shipped
Prediction game (predict competition outcomes) — PL-F1504a
✅ PL-F1504a - F15.04.04 Shipped
Fantasy petanque (build dream team, earn points) — PL-F1504a
✅ PL-F1504a - F15.04.05 Shipped
Leaderboards (most active player, most competitions, etc.) — PL-F1504a
✅ PL-F1504a - F15.04.06 Shipped
Challenge system (challenge another player to a match) — PL-F1504b
✅ PL-F1504b - F15.04.07 Shipped
Streak tracking (consecutive wins, active weeks) — PL-F1504b
✅ PL-F1504b - F15.04.08 Shipped
Daily/weekly challenges (community-wide skill challenges) — PL-F1504b
✅ PL-F1504b - F15.04.09 Shipped
Club challenges (club vs club in weekly mini-competitions) — PL-F1504b
✅ PL-F1504b - F15.04.10 Shipped
Seasonal quests (play X matches, visit Y venues, enter Z tournaments) — PL-F1504b
✅ PL-F1504b - F15.04.11 Shipped
XP and level system (based on activity, not just wins)
✅ PL-F1504c - F15.04.12 Shipped
Personal bests tracking (best ELO, best tournament result, longest streak)
✅ PL-F1504c - F15.04.13 Shipped
Fan predictions for live matches (predict score, earn points)
✅ PL-F1504c - F15.04.14 Shipped
Pick'em brackets (predict entire tournament outcomes)
✅ PL-F1504c - F15.04.15 Shipped
Celebration UX motor — proportional confetti / banner / badge primitives, registry-governed events, max-1-major-per-session rate limit, audit gate
✅ PL-T163 - F15.04.16 Shipped
Reduced-motion + background-safe celebration playback (web prefers-reduced-motion + native AppState)
✅ PL-T163 - F15.04.17 Shipped
Personal-best comparison primitive with stagger animation
✅ PL-T163
Accessibility & Inclusion
F15.05- F15.05.01 Shipped
Multi-language interface (French, English, Spanish, + federation languages)
✅ PL-F1505a - F15.05.02 Shipped
Screen reader compatibility (WCAG 2.1 AA)
✅ PL-F1505a - F15.05.03 Shipped
High contrast mode
✅ PL-F1505a - F15.05.04 Shipped
Font size adjustment
✅ PL-F1505a - F15.05.05 Shipped
Simplified interface mode (for non-technical users)
✅ PL-F1505b - F15.05.06 Shipped
Age-appropriate interfaces (youth vs. adult)
✅ PL-F1505b - F15.05.07 Shipped
Right-to-left language support
✅ PL-F1505b
Onboarding & Discovery
F15.06- F15.06.01 Shipped
New player onboarding wizard — PL-F1506a
✅ PL-F1506a, ✅ PL-T308 (premium editorial multi-step flow: animerad welcome-sekvens, swipe-stack mobil + split-screen desktop med crossfade <StepIllustration>, persistent draft i AsyncStorage, tenant-aware licens-katalog, konfetti-celebration via shared useCelebrate('onboarding.complete') med reduced-motion-glow, ProgressDots med accessibilityRole="progressbar", focus-shift per steg-shift, skip-affordance på notifikations- och preferenssteg) - F15.06.02 Shipped
"Getting started with petanque" content — PL-F1506a
✅ PL-F1506a - F15.06.03 Shipped
Find your nearest club (location-based) — PL-F1506a
✅ PL-F1506a - F15.06.04 Shipped
Try petanque events listing (beginner-friendly) — PL-F1506a
✅ PL-F1506a - F15.06.05 Shipped
Rules overview for newcomers — PL-F1506b
✅ PL-F1506b - F15.06.06 Shipped
Equipment guide for beginners — PL-F1506b
✅ PL-F1506b - F15.06.07 Shipped
Sport ambassador program — PL-F1506b
✅ PL-F1506b - F15.06.10 Shipped
Public club discovery map (PublicClubProfile + 2dsphere, bbox-search, antimeridian-split)
✅ PL-T219 - F15.06.11 Shipped
Pickup-game schedule per club (PickupSlot + DateOverride, klubblokal-tid)
✅ PL-T219 - F15.06.12 Shipped
Visitor-friendly club flag (filter på publik karta + i app)
✅ PL-T219 - F15.06.20 Shipped
Viewer preference center (ViewerPreference: follow + push + digest, get-or-default)
✅ PL-T219 - F15.06.21 Shipped
Per-player follow + match alerts (cap 200 / 100 / 50, score-tröskel)
✅ PL-T219 - F15.06.22 Shipped
Per-club follow + news feed (digest-källa)
✅ PL-T219 - F15.06.23 Shipped
Personalised digest (DigestBuilderService: daily/weekly, idempotent dispatch-log)
✅ PL-T219 - F15.06.24 Shipped
Quiet hours + push-cadence grouping (IANA-tz, batched_5min/15min/60min)
✅ PL-T219
My Equipment
F15.07Inspired by golf (club fitting) and bowling (ball specs) — track your boules and equipment.
How it works- F15.07.01 Shipped
Boule inventory (brand, model, weight, diameter, hardness, striation pattern) — PL-F1507a
✅ PL-F1507a - F15.07.02 Shipped
Boule serial number tracking (for homologation verification) — PL-F1507a
✅ PL-F1507a - F15.07.03 Shipped
Equipment photo gallery — PL-F1507a
✅ PL-F1507a - F15.07.04 Shipped
Performance notes per boule set (which set for which conditions) — PL-F1507a
✅ PL-F1507a - F15.07.05 Shipped
Equipment wear tracking (usage log, matches played, surface type, total matches counter) — PL-F1507b
✅ PL-F1507b - F15.07.06 Shipped
Equipment wishlist and comparison (wishlist CRUD, compare 2–5 sets side-by-side) — PL-F1507b
✅ PL-F1507b - F15.07.07 Shipped
"What boules do the pros use" — equipment profiles of top players (search, filter, verified badge) — PL-F1507b
✅ PL-F1507b
Weather & Conditions
F15.08Inspired by golf and sailing — outdoor sport conditions matter.
How it works- F15.08.01 Shipped
Weather forecast for upcoming competitions (integrated from weather API) — PL-F1508
✅ PL-F1508 - F15.08.02 Shipped
Weather conditions at venue (temperature, wind, humidity, rain risk) — PL-F1508
✅ PL-F1508 - F15.08.03 Shipped
Terrain condition reporting by venue (crowdsourced: type, condition, hardness, wind, notes, photo) — PL-F1508
✅ PL-F1508 - F15.08.04 Shipped
"Best time to play" suggestions (playability score 0-100, recommended hours per day) — PL-F1508
✅ PL-F1508 - F15.08.05 Shipped
Weather-related tips (condition-triggered: surface, wind, temperature, rain matching engine) — PL-F1508
✅ PL-F1508 - F15.08.06 Shipped
Historical weather data linked to venue analysis (aggregate statistics per club) — PL-F1508
✅ PL-F1508
Social & Community Engagement
F15.09Inspired by Strava, fitness apps, and social sport platforms.
How it works- F15.09.01 Shipped
PL-F1509a
✅ PL-F1509a - F15.09.02 Shipped
PL-F1509a
✅ PL-F1509a - F15.09.03 Shipped
PL-F1509a
✅ PL-F1509a - F15.09.04 Shipped
PL-F1509a
✅ PL-F1509a - F15.09.05 Shipped
PL-F1509b
✅ PL-F1509b - F15.09.06 Shipped
PL-F1509b
✅ PL-F1509b - F15.09.07 Shipped
PL-F1509b
✅ PL-F1509b - F15.09.08 Shipped
PL-F1509b
✅ PL-F1509b - F15.09.09 Shipped
PL-T098
Group membership (auto-provision per klubb, opt-in distrikt/federation) - F15.09.10 Shipped
PL-T098
Nested comments (max djup 2) med @-mentions och reaktioner - F15.09.11 Shipped
PL-T098
Moderator-roller + ban + promote/demote med admin-only guards - F15.09.12 Shipped
PL-T098
Join request-flöde för distrikt/federation-grupper - F15.09.13 Shipped
PL-T098
Content report + moderator-resolve (actioned/dismissed) - F15.09.14 Shipped
PL-T098
Per-grupp settings (visibility, who-can-post, profanity-flag) - F15.09.15 Shipped
PL-T098
Push fan-out policy (members/mentions-only/off) — dispatcher log-only, FCM deferred - F15.09.16 Shipped
PL-T098
GDPR-anonymisering av användarens inlägg + kommentarer - F15.09.17 Shipped
PL-T286
✅ PL-T286 - F15.09.18 Shipped
PL-T286
✅ PL-T286
Augmented Reality & Camera Features
F15.10AR-powered tools for measuring, learning, detecting, and replaying petanque action on mobile.
How it works- F15.10.01 Shipped
PL-F1510
✅ PL-F1510 - F15.10.02 Shipped
PL-F1510
✅ PL-F1510 - F15.10.03 Shipped
PL-F1510
✅ PL-F1510 - F15.10.04 Shipped
PL-F1510
✅ PL-F1510 - F15.10.05 Shipped
PL-F1510
✅ PL-F1510
Premium Mobile-First UX
F15.11Mobile-first redesign av spelar-appen: dual-mode shell (bottom-tab på mobil, sidebar på desktop), hero-baserade startvyer, offline-first licenskort och tenant-branded theming.
How it works- F15.11.01 Shipped
Dual-mode app shell — useDeviceClass({ cutoff: 640 }) växlar mellan mobile bottom-tab-nav (5 slottar: Hemma / Matcher / Ranking / Licens / Mer) och desktop sidebar (260 px) + centrerat innehåll (max 1024 px) utan route-byte eller data-remount. app/src/components/navigation/AppShell.tsx, BottomTabNav.tsx, SidebarNav.tsx.
✅ PL-T157 - F15.11.02 Shipped
Hero-baserad startsida — nästa match som full-bredd-hero med LinearGradient (primary→secondary), Fraunces display-titel, countdown, CalendarClock/MapPin-meta och sticky CTA. Två-up MiniCards (Licens + Ranking) + senaste resultat + discover-getting-started. Pull-to-refresh. app/src/components/home/PlayerHome.tsx.
✅ PL-T157 - F15.11.03 Shipped
Fullscreen licenskort — hologram-gradient-ring (primary→secondary→accent), Fraunces display-titel, 220 px QrPlaceholder, valid-until + status-pin, offline-verification-banner. Läser från verifyLicense() som faller tillbaka på signerad JWT-bundle från cache när offline. app/app/(tabs)/license.tsx, app/src/components/license/QrPlaceholder.tsx.
✅ PL-T157 - F15.11.04 Shipped
Rankings med "Du är #N"-highlight + sparklines — highlight Card ovanför leaderboard med aktuell position + Movement + mini-sparkline; varje RankingRow har position, namn, klubb, Movement-indikator (ArrowUp/Down/Minus) och 56×18 SVG-sparkline. Current-user row har primary-tint-bakgrund + border. app/app/(tabs)/rankings.tsx.
✅ PL-T157 - F15.11.05 Shipped
Matcher-lista med status-badges — MatchRow med Round-badge (eller LIVE-pin för live-matcher), W/L-badge för finished, CalendarClock+MapPin-meta, score + chevron-CTA. Separata sektioner "Upcoming" och "Recent". app/app/(tabs)/matches.tsx.
✅ PL-T157 - F15.11.06 Shipped
"Mer"-fliken — overflow-meny för sekundära sektioner (Profile, Equipment, Discover, Search, Community, Weather, Settings). Logged-in identity-card med avatar + tenant-badges, sign-in-CTA för gäster, grupperade rows med ikon-bubbla + description. Logout-knapp längst ned. app/app/(tabs)/more.tsx.
✅ PL-T157 - F15.11.07 Shipped
Offline-banner på root-nivå — prominent <Banner variant="offline"> med WifiOff-ikon, "senast synkad HH:MM"-text och optional "Sync now"-CTA när pendingCount > 0. Separat från det tunna OfflineIndicator sync-strippen. app/src/components/OfflineBanner.tsx.
✅ PL-T157 - F15.11.08 Shipped
Tenant-branded ThemeProvider — useTenantBranding()-hook hämtar /me/tenant-profile vid activeTenantId-byte och applicerar theme-objektet via applyTenantTheme(). Caching per tenantId via lastAppliedRef — best-effort, inga fel bubblar upp. app/src/hooks/useTenantBranding.ts.
✅ PL-T157 - F15.11.09 Shipped
Banner-primitiv — ny <Banner>-komponent med variants info/success/warning/error/offline, optional icon (lucide), title, message, action-button och dismiss. Matchar admin-appens Banner-API men med offline-variant (warning-palett) unikt för app-paradigmet. app/src/components/ui/Banner.tsx.
✅ PL-T157 - F15.11.10 Shipped
Haptic-feedback-gating per interaktion — useHaptics().fire('selection') på alla bottom-tab-trycky, match-row-trycky, more-entry-trycky; fire('warning') på logout. Respekterar både accessibility-toggle och OS reduce-motion. app/src/hooks/useHaptics.ts.
✅ PL-T157 - F15.11.11 Shipped
QrPlaceholder — deterministisk 25×25 SVG-bitmap från licens-payload, tre klassiska QR-finder-patterns + FNV-1a-hash-seedad LCG. Dokumenterat ej scanbar; federationens skannare läser license-number från visibel text. Swappbar mot riktig QR-komponent utan ändring av omgivande layout. app/src/components/license/QrPlaceholder.tsx.
✅ PL-T157 - F15.11.12 Shipped
Pull-to-refresh på alla primärvyer — RefreshControl på Home, Matches, Rankings, License. Tint = colors.primary. Samma callback som initial load() — enhetligt refresh-beteende.
✅ PL-T157
No features match your filters.