Oakwell Edge Change Log

Recent updates across gameplay, validation, security, and account reliability.

Current app version in pubspec: 1.0.6+36

Release: 1.0.6+36 (October 4, 2026, Current)

Minimum age raised to 14 with confirmation at registration, more granular accuracy scoring, Barnsley FC data-sharing consent, published prizes, and expanded privacy and terms documentation.

Summary

  • This release raises the minimum user age to 14 with an explicit confirmation at registration, makes accuracy scoring more granular to separate tied players, adds optional Barnsley FC data-sharing consent, publishes the season prizes on the Game Rules page, and significantly expands the Privacy Policy and Terms & Conditions.

Eligibility & Registration

  • Raised the minimum user age from 13 to 14 across the App, Terms and Privacy Policy.
  • Added a required "I confirm that I am at least 14 years old" checkbox at registration, with the confirmation timestamp recorded.
  • Relabelled the junior age group to Junior (14-17 yrs).

Accuracy Scoring

  • Accuracy is now calculated from 5 components per match: half-time score, half-time outcome, full-time score, full-time outcome, and first goalscorer.
  • Matches decided by extra time or penalties include a 6th component for the extra-time/penalties outcome.
  • Applied consistently across live scoring, mini-league calculations and admin score reconciliation.
  • More components create finer accuracy separation between players, reducing ties.

Barnsley FC Data Sharing Consent

  • Added an optional registration checkbox allowing users to consent to their details being shared with Barnsley Football Club.
  • Added a matching Profile preference toggle so consent can be withdrawn at any time.
  • Consent choices are timestamped for audit purposes.

Prizes

  • Added a Prizes section to the Game Rules page covering overall adult, junior, stand and mini-league prizes.
  • Terms now state prizes are awarded at the discretion of Barnsley Football Club, with ticket credit prizes subject to the club ticketing terms.

Privacy & Terms Updates

  • Added a data retention table with specific retention periods.
  • Explained the legitimate interests relied upon for fraud prevention and platform integrity.
  • Added a dedicated How to Opt Out or Unsubscribe section.
  • Added a Cookies & Analytics section confirming no analytics or advertising trackers are used.
  • Added a Complaints section with ICO contact guidance to the Terms.
  • Privacy Policy and Terms now dated October 2026.

Release: 1.0.5+35 (September 29, 2026, Previous)

Corrected the displayed stand name for consistent branding.

Summary

  • This maintenance release corrects the displayed stand name for consistent product branding.

Stand Name

  • Corrected the displayed stand name for consistent branding.

Release: 1.0.4+33 (September 7, 2026, Previous)

Consistent squad player names, surname-sorted scorer selection, manual squad exclusions, and a stand selector layout fix.

Summary

  • This maintenance release improves the first goalscorer selection experience by standardising squad player names, sorting them by surname, and allowing outdated API players to be excluded manually. It also fixes a layout overflow in the stand selector during registration.

Squad Player Selection

  • Standardised squad player names to an initial and surname format, for example A. Richards.
  • Sorted first goalscorer player choices by surname for easier scanning.
  • Added a maintained exclusion list for players still returned by the squad API after leaving the club.
  • Kept player display names consistent with scorer validation when results are processed.

Registration Stand Selector

  • Fixed a pixel overflow when viewing long stand names in the registration dropdown.
  • Long stand names now use the available width and display cleanly over two lines.

Release: 1.0.4+32 (September 1, 2026, Previous)

Contact validation, updated stand names, API result notifications, and Android compatibility improvements.

Summary

  • This maintenance release makes contact phone numbers optional, updates the selectable Oakwell stands and their leaderboards, adds API result notifications, and improves Android account management and edge-to-edge display compatibility.

Contact Validation Refinement

  • Made contact phone number optional during registration and profile updates.
  • Users can now sign up and update their profiles without providing a phone number.
  • Email remains a required contact method.
  • Existing profiles with phone numbers retain that data.

API Result Notifications

  • Added local notifications when API match results are received and ready for scoring.
  • Notifies users that new results have been synced and predictions can now be scored.
  • Notifications appear in the system notification center.
  • Improves user awareness of result availability without manual page refresh.

Android Account Management UI Fix

  • Fixed delete account button being hidden behind bottom navigation buttons on Android.
  • Added proper bottom padding to account settings scrollable area.
  • Button now remains accessible without blocking by navigation UI.
  • Improves accessibility on all Android device sizes.

Android Edge-to-Edge Compatibility

  • Added explicit edge-to-edge support for Android system bars.
  • Improved compatibility with Android 15 and later display requirements.
  • Preserved safe content spacing around status and navigation bars.
  • The Android-specific update does not change iOS display behaviour.

Updated Stand Names and Leaderboards

  • Renamed South Stand to BAPP for Bolts Norman Rimmington South Stand.
  • Renamed East Stand to Rapid Response East Stand.
  • Renamed West Stand to Pagen Group West Stand.
  • Added Corporate Hospitality and Accessible Corner Stand.
  • Added admin migration support for existing users and rebuilt stand leaderboards.
  • New registrations can select any current stand name.

Privacy Policy Updates

  • Updated Privacy Policy to clarify that contact phone number is optional.
  • Reflects that email address is required, but phone is optional for registration and profile updates.
  • Clarified that phone number is NOT required for push notifications on iOS or Android.
  • Notifications use Firebase Cloud Messaging device tokens, independent of phone number.
  • Updated in Dart in-app page, in-app HTML docs, and Metravyx website.
  • Ensures transparency and compliance with GDPR regarding optional data collection.

Release: 1.0.3+31 (July 29, 2026, Previous)

Mini Leagues, API fixtures/squads/results sync, extra-time/penalties scoring, and results flow updates.

Summary

  • This release adds Mini Leagues as a first-class feature, introduces API-driven fixtures/squads/results sync, extends match scoring to support extra-time and penalties predictions, and updates the app flow so results and standings are clearer for players and admins.

Mini Leagues

  • Added Mini Leagues with 10-match batches and automatic batch resets.
  • Added a dedicated winners view for previous batch champions.
  • Mini League status is now surfaced alongside the main standings flow.
  • Mini League batch progress now shows actual matches played in the batch, with correct singular/plural wording.

Expanded Scoring

  • Added support for extra-time and penalties predictions on eligible matches.
  • Result entry and scoring now track the extra-time/penalties outcome end to end.
  • Prediction and results screens now show the new outcome point breakdown more clearly.

API Fixtures, Squads, and Results

  • Added API fixture sync callables and scheduled jobs to keep match data current.
  • Added API squad sync and team player upserts to support first goalscorer flows.
  • Added API results sync path to update finished matches and trigger scoring-ready data.
  • Added admin test controls for scheduled results sync diagnostics.

UI and Admin Updates

  • Updated results cards and submission state messaging for clearer match status.
  • Refined the rules and FAQ copy to explain the new scoring model and Mini League behaviour.
  • Simplified registration to two age groups and tightened navigation/header presentation.

Release: 1.0.2+30 (June 25, 2026, Previous)

iOS release mode social sharing fix and share_plus dependency upgrade.

Summary

  • This maintenance release fixes iOS release build social sharing by upgrading share_plus and removing debug-only property access that caused LateInitializationError in production.

iOS Release Build Fix

  • Removed debugNeedsPaint property check that caused LateInitializationError in iOS release builds.
  • debugNeedsPaint is debug-only and unavailable in release mode; removed unnecessary guard.
  • Social sharing now works correctly in both debug (flutter run) and release builds.
  • Verified on iPhone 12 iOS 16.5 with release build.

Dependencies

  • Upgraded share_plus from 10.1.4 to 11.0.0 for iOS platform improvements.
  • 11.0.0 includes iOS-specific fixes and better release mode compatibility.
  • Maintains backward compatibility with existing share_plus API usage.

Release: 1.0.2+1 (June 24, 2026, Previous)

Social sharing for predictions and results with iOS share sheet positioning fix.

Summary

  • This major release adds in-app social sharing for results and predictions with screenshot cards, improves leaderboard visibility with last-match points and rank movement indicators, and fixes iOS share sheet positioning to properly display on all device sizes.

Social Sharing Features

  • Added share buttons to submitted result cards: shares custom text + screenshot of match prediction.
  • Added share buttons to prediction cards: shares custom text + screenshot of your prediction.
  • Uses native iOS/Android share sheets with support for Messages, Mail, Notes, and third-party apps.
  • Screenshots include card visuals: scores, points, match details for social media appeal.

Leaderboard Enhancements

  • Added LAST MATCH column showing points from the latest scored result.
  • Added MOV (movement) column with up/down/no-change directional indicators.
  • Added PTS (total points) column for instant overall standing visibility.
  • Server-driven rank movement ensures consistency across all devices.
  • Refined layout on smaller screens (iPhone 12) for optimal readability.

iOS Share Sheet Positioning

  • Fixed iOS share sheet positioning by calculating card rectangle origin on screen.
  • Share sheet now anchors to the card location instead of defaulting to screen center.
  • Properly displays on iPad and iPhone with correct popup/popover positioning.
  • Resolves sharePositionOrigin must be non-zero errors on iOS.

Additional Improvements

  • Added FAQ entry explaining leaderboard columns and scoring system.
  • Enhanced screenshot capture reliability with frame synchronization and paint verification.
  • Migrated share files to app cache directory for better iOS compatibility.
  • Added file verification (exists + size check) before share attempts.
  • Comprehensive debug logging for troubleshooting share issues.

Release: 1.0.1+29 (June 24, 2026, Previous)

iOS social sharing reliability hardening with app cache directory and file verification.

Summary

  • This release resolves persistent iOS share failures by migrating from temporary directories to the app cache directory, adding explicit file verification, and ensuring proper disk synchronization before share operations.

iOS Share Reliability

  • Migrated from getTemporaryDirectory() to getApplicationCacheDirectory() for more stable file access on iOS.
  • Added file.exists() verification after writing screenshot to ensure file is present.
  • Added file.length() check to confirm bytes were written correctly.
  • Added 50ms post-write delay to ensure iOS has flushed file to disk before share_plus reads it.
  • Prevents LateInitializationError that occurred when share sheet attempted to read file before write completed.

Diagnostics & Error Handling

  • Enhanced logging at each share checkpoint: boundary check, image capture, byte count, file write, file verification, file size, share invocation.
  • Detailed SnackBar error display shows actual exception message for debugging.
  • Improved developer visibility into exact failure point (capture, write, or share call).

Release: 1.0.1+27 (June 24, 2026, Previous)

Leaderboard points display refinement and iOS social sharing reliability.

Summary

  • This release fixes leaderboard points column sizing on smaller devices and improves iOS share sheet reliability with better error feedback.

Leaderboard Points Display

  • Reduced PTS column font size to 15pt and adjusted padding for single-line fit on iPhone 12.
  • Added maxLines constraint to prevent unexpected wrapping on narrow screens.

iOS Social Sharing Reliability

  • Fixed share sheet appearing but not executing on iOS by waiting for frame paint completion.
  • Added debugNeedsPaint guard to ensure widget is fully rendered before screenshot capture.
  • Added user-facing error feedback: SnackBar shows "Unable to share. Please try again." if capture fails.
  • Replaced fixed frame delay with proper endOfFrame synchronisation for more reliable timing.

Dependency & Import Cleanup

  • Removed unused dart:typed_data import from results_page.dart.
  • Added path_provider as direct dependency (was previously transitive).
  • Added YAML language server schema hint to analysis_options.yaml for IDE validation.

Release: 1.0.1+26 (June 24, 2026, Previous)

Leaderboard detail expansion, social sharing cards, and FAQ clarity updates.

Summary

  • This release improves leaderboard transparency, adds social sharing for results and predictions, and documents leaderboard fields in the FAQ.

Leaderboard Detail Enhancements

  • Added LAST MATCH column to show points from the latest scored result.
  • Added MOV column with directional indicators (up, down, no change).
  • Added server-driven rank movement baseline so movement is consistent across devices.
  • Added last scored match linkage so displayed last-match points always map to the latest scored result cycle.

Leaderboard Layout Improvements

  • Refined header alignment so labels sit directly above values.
  • Moved YOU tag beneath the rank badge to free horizontal name space.
  • Tuned card spacing, badge size, and typography for better long display name visibility.

Social Sharing (Results & Predictions)

  • Added in-app share actions for submitted result cards and prediction cards.
  • Shares include custom text plus a screenshot image of the relevant card.
  • Added share_plus integration for Android/iOS native share sheets.

FAQ Update

  • Added new FAQ entry: What is displayed on the leaderboards?
  • Clarifies rank, display name, last match points, movement, total points, and tab scope (Overall / Stand / Age Group).

Release: 1.0.1+25 (June 17, 2026, Previous)

Prediction reminder reliability repair, missing index fix, and new admin diagnostics.

Prediction Reminder Reliability

  • Fixed scheduled reminder failures caused by a missing Firestore composite index.
  • Added required index for matches: isLocked + matchDate (ascending).
  • Reminder scheduler now runs without FAILED_PRECONDITION query errors.

Reminder Audience Accuracy

  • Reminder dispatch now excludes users who already submitted a prediction for that match.
  • Submitted-user detection supports canonical and legacy prediction key formats.
  • Improved reminder logs now include submitted-user counts for easier auditing.

Admin Incident Diagnostics

  • Added callable debugReminderState for user+match delivery diagnostics.
  • Returns token count, prediction presence, kickoff details, and reminder lock status.
  • Helps quickly identify whether misses are scheduler, eligibility, or token-state related.

Scoring Queue Safety

  • Stabilized queue scorer wrapper to call shared core scoring logic consistently.
  • Reduces divergence risk between queue and direct scoring trigger paths.

iOS Biometric Startup Reliability

  • Added missing NSFaceIDUsageDescription to iOS Info.plist to prevent crashes when Face ID unlock is enabled.
  • Hardened biometric device support checks to verify available biometric types before attempting authentication.
  • Prevents app termination on iPhone when biometric permission or hardware availability changes.

Release: 1.0.1+24 (June 16, 2026, Previous)

iOS badge clearing fix after opening notifications and maintained badge package migration.

iOS Notification Badge Behaviour

  • Added automatic app icon badge reset when the app starts on iOS.
  • Added badge reset when the app resumes from background.
  • Added badge reset when a notification tap opens the app.
  • Prevents the red app icon badge from staying at 1 after reading/opening notifications.

Dependency Maintenance

  • Replaced discontinued flutter_app_badger package with maintained app_badge_plus.
  • Preserved badge-clear behaviour with no scoring or gameplay impact.

Release: 1.0.1+23 (June 16, 2026, Previous)

Notification permission UX improvements, broadcast test controls, and results notification repair.

Notification Permission UX

  • Updated the in-app notification explainer to be informational only before the native OS permission prompt.
  • iPhone users now read the explainer, tap OK, then see the standard iOS Allow / Don’t Allow prompt.
  • Updated the explainer copy to refer to your device rather than iPhone so the wording also fits Android.

Admin Broadcast Testing

  • Added optional single-user broadcast targeting by UID for notification testing.
  • Added optional broadcast send delay to help test delivery after closing the app.
  • Broadcast dialog now reports when no FCM tokens are found for the selected UID.
  • Fixed broadcast dialog overflow on smaller screens and with the keyboard open.

Notification Backend Reliability

  • Restored the missing backend results notification helper so results pushes can execute again.
  • Added targeted-send logging and delivery counts for broadcast diagnostics.
  • Confirmed broadcast, reminder, and new fixture notifications all share the same multicast send path.

Release: 1.0.1+22 (June 14, 2026, Previous)

Notification reliability fixes, goal dropdowns increased to 15, and recovery hardening.

Push Notification Reliability

  • Added iOS-safe notification permission flow with fallback OS prompt when navigator context is not ready.
  • Enabled iOS foreground notification presentation (alert, badge, sound).
  • Added APNs high-priority payload details for multicast sends (sound and badge).
  • Improved FCM token persistence so active users are re-registered if token is cached locally but missing in Firestore.
  • Reduced token re-verification reads by checking Firestore at most once per day per user.

Prediction Goal Range Update

  • Increased prediction score dropdown range from 0-10 to 0-15 for home and away goals.
  • Existing half-time to full-time score integrity checks remain in place.

Android Leaderboard Refresh Fix

  • Leaderboard version checks now use server-first Firestore reads with safe cache fallback.
  • Leaderboard data queries (overall, stand, age group, and current user row) now use server-first reads.
  • Prevents Android devices from remaining on stale cached leaderboard snapshots while iOS appears current.

Scoring and Recovery Hardening

  • Added backend prediction document self-heal trigger to restore canonical prediction keys.
  • Added admin callable to backfill legacy prediction keys and optionally rescore touched finished matches.
  • Added in-app admin action: "Repair Prediction Keys + Rescore" on Results and Support admin screens.

Release: 1.0.1+21 (June 13, 2026, Previous)

Leaderboard refresh reliability and simpler fetch/sort behavior.

Leaderboard Refresh Reliability

  • Simplified leaderboard fetches to avoid fragile multi-field Firestore sorting.
  • Leaderboard rows now sort locally after fetch using points, accuracy, and display name.
  • Rebuild Leaderboards now refreshes the data the app reads without needing a new match result.
  • Direct scoring writes now update leaderboard docs immediately from the match trigger path.

Release: 1.0.1+20 (June 12, 2026, Previous)

Silent rescore tools, ordering reliability, and Flutter cleanup.

Admin Correction and Silent Rescore

  • Added a new "Correct Prediction + Silent Rescore" action in admin match tools.
  • Admins can correct first goalscorer for a specific prediction and immediately queue a silent rescore.
  • Admin-triggered rescoring now suppresses results push notifications for correction-only updates.
  • Added dedicated "Silent Rescore" button for leaderboard refreshes without user alert noise.

Leaderboard Ordering Reliability

  • Fixed residual ordering issue where rows could appear out of order after result scoring.
  • Removed temporary rank overwrite during incremental leaderboard updates.
  • Enforced rank recomputation before leaderboard version bump in reconcile flows.
  • Overall, Stand, and Age Group leaderboards now remain sorted by points then accuracy without manual rebuild.

Leaderboard Tie-Break and Placement Updates

  • Leaderboards now apply a deterministic third sort: display name ascending after points and accuracy ties.
  • Added a normalized leaderboard name sort key (displayNameSort) to keep ordering stable across rebuild and incremental update paths.
  • New registrations now receive provisional bottom placement instead of temporary top-table positions while rank recompute completes.
  • Added client-side safety sort so cached/fetched rows still render in points, accuracy, then name order.

Admin Correction Dialog Stability

  • Improved Correct Prediction dialog layout on narrow screens (scrollable content and truncated long scorer labels).
  • Fixed framework assertion when cancelling after focusing User ID field by safely handling focus and deferred controller disposal.

Flutter API Compatibility Cleanup

  • Replaced deprecated color opacity calls with modern withValues(alpha: ...) usage in leaderboard, prediction, and results screens.
  • Updated deprecated dropdown form selection API usage in Predictions screen (initialValue instead of value).

Release: 1.0.1+19 (June 12, 2026, Previous)

UI/readability improvements and leaderboard ordering fixes.

UI/UX Improvements

  • Updated Support and About pages: all text now white for improved contrast and readability.
  • Increased font sizes on Support and About pages for better legibility.
  • Improved button styling: inactive state now light grey with white text, active state white background with red text.
  • Removed duplicate Oakwell Edge logo from About page (logo already displayed in header).

Leaderboard Ordering Fix

  • Fixed leaderboard ranking inconsistency after admin submits match results.
  • Made match scoring queue processing fully serialized to prevent concurrent race conditions.
  • Updated automatic rank recompute to sync all leaderboard display fields (points, accuracy, form) alongside rank updates.
  • Leaderboard now maintains consistent sort order immediately after result submission, matching rebuild behavior.

Release: 1.0.1+18 (June 2026)

Prediction locking, score validation hardening, and notification reliability.

Predictions and Match Locking

  • Added "Predictions Lock 10 Minutes Before Kick-Off" banner on the predictions page.
  • Aligned lock enforcement to 10 minutes before kickoff in both client behavior and backend checks.
  • Updated callable prediction submission guard so late submissions are blocked server-side at lock time.
  • Updated Firestore rules timing condition to match the 10-minute lock policy.

Score Validation Hardening

  • Fixed rule: full-time score cannot be lower than half-time score.
  • Added validation so full-time home/away goals cannot be lower than half-time goals.
  • Applied this rule in three layers: UI validation, dropdown constraints, and Cloud Function enforcement.
  • Improved user feedback with clearer submission messages when validation fails.

Tie-Break Rule Clarification

  • Documented tie-break behavior: if points are tied at season end, overall accuracy percentage decides the winner.
  • Published this rule consistently in predictions footer, FAQ, in-app terms page, and HTML terms document.

Login and Notification Reliability

  • Hardened authentication/profile gate messaging so missing profile data is shown as a profile setup issue, not a generic login failure.
  • Improved recovery path with explicit sign-out action when profile data cannot be loaded.
  • Improved FCM token diagnostics to distinguish no token (for example permission not granted) from Firestore write errors.
  • Adjusted notification setup flow so declining the initial prompt does not prematurely stop the rest of app initialization.

Timezone and Display Behavior

  • Match kickoff times are stored as absolute timestamps and displayed in each user's local device time zone.
  • This means UK users and USA users see local kickoff times while lock calculations remain based on the same absolute kickoff instant.
  • For fixture imports, prefer ISO datetime values with timezone offsets (for example ending in Z) to avoid ambiguity.