September 24, 2026
COMMIT #: 1ff62e4
Updates
Program
Projections & Sales (GWU-8636)
Update: Added a new "Projections & Sales" page under Program, giving admins a CRM-style sales sheet to track leads/prospective registrations — filterable by program, club, division, status, gender, season, and date range, with per-row notes and support for bulk-creating and bulk-editing rows. Bulk Registration now links a completed registration back to the sales sheet row it came from, so leads that convert to actual registrations are automatically mapped instead of staying unresolved on the sales sheet.
COMMIT #: 673a306
Bugs
Program
Payment Plans (GWU-8865)
Previously: When both a team-level and an individual payment plan existed for the same registration, the system could incorrectly apply the team-level plan instead of the more specific individual one.
Update: Individual payment plans now correctly take priority over team-level plans, regardless of scope, so an athlete or account with their own plan gets that plan applied instead of the team default.
Communication
Messaging (GWU-8857)
Previously: System emails were sent from an address built using the brand's full configured host, which could include a subdomain, producing an invalid or unexpected "From" address instead of the brand's actual domain.
Update: These system email addresses now correctly use the brand's top-level registrable domain rather than its full host string.
Updates
Messaging
Messaging History (GWU-4633)
Update: The filter summary shown for a sent message now includes previously omitted selections, so the full audience criteria is visible when reviewing message history.
Sales
Subscription Status (GWU-8813)
Previously: Cancelling a subscription immediately treated it as inactive everywhere, even though the customer had already paid through the end of the current term and cancellation should only stop renewal.
Update: A cancelled subscription now correctly stays active until its paid term actually ends, matching how subscription status is defined elsewhere in the system.
Team
GearUp Orders (GWU-8869)
Previously: The GearUp Orders report could list the same bundled order multiple times when it had more than one matching record.
Update: The GearUp Orders report now shows each bundled order only once, preferring the record with a matched roster and falling back to a single deterministic record when none match.
September 23, 2026
COMMIT #: a29d2d1
Bugs
Program
Registration Details (GWU-8864)
Previously: On the Registration Details page, clicking the pencil (edit) icon next to any program threw a server error and redirected admins to a 500 error page, making it impossible to open or edit any program's settings.
Update: Fixed the server error thrown when clicking the edit icon on the Registration Details page so that admins are now correctly brought to the Edit Program page with the selected program's settings loaded and ready to edit.
COMMIT #: e1cbde9
Updates
Team
Gear Up Orders (GWU-8863)
Update: Fixed the GearUp Orders save behavior so that toggling a line item to reviewed and saving correctly retains all existing program and athlete data, and the line item displays as expected without clearing matched fields.
September 22, 2026
COMMIT #: bba9b72
Bugs
Front End
Registration Page (GWU-8806)
Previously: Following the "Display Tryout Dates" feature, tryout dates could still appear on the public program list/page even when tryout registration wasn't actually enabled for the program, and new programs defaulted to having tryout dates visible.
Update: New programs now default to tryout dates hidden, and tryout dates only display publicly when tryout registration is actually enabled.
Teams (GWU-8815)
Previously: Adding or saving a coach/manager contact could be incorrectly blocked when their email or phone number was shared with another household member.
Update: Coach/manager contact matching now prioritizes name similarity ahead of email/phone matches.
Location
Field Timeline (GWU-8835)
Previously: When two venues in an Exposure or GotSport sync had a court with the same name, the import could merge or misassign them to the wrong venue, and re-running a sync could create duplicate location or field records instead of reusing the existing ones.
Update: Court matching now correctly scopes by which venue the court actually belongs to, so identically named courts at different venues stay separate. Re-syncing no longer creates duplicates, and location/venue name matching is now whitespace-tolerant.
Updates
Sales
Invoices (GWU-8839)
Update: Dispute-related transactions now exactly mirror the allocations of the original payment, ensuring disputes on multi-item orders allocate correctly. The Invoices page's "Reverse" button is now also correctly restricted from showing alongside "Refund" on the same transaction.
PF General Updates
Access App (GWU-8591)
Update: Added new API endpoints powering a Sales Rollup view for the Access app's admin experience, along with a Root Admin login mode that grants full cross-brand visibility for that view.
Front End
Suggest Controls (GWU-8426)
Previously: Autosuggest fields across the site could show an item already selected again in the dropdown, letting it be added a second time or causing confusing duplicate entries.
Update: All suggest controls now default to hiding already-selected items from the dropdown, and typing a duplicate value is now cleanly ignored instead of adding it again.
Program
Edit Program (GWU-7936)
Update: Added a "Featured Program" setting to Edit Program. Featured programs display at the top of public program lists regardless of date, ordered by soonest upcoming start date when multiple are featured, and show a "Featured Program" badge on their card.
Registration Details (GWU-8476)
Update: Added an optional memo field to the Update Registration Cost tool, saved to the invoice's admin notes and included in the account holder's notification email. When a cost decrease leaves an invoice overpaid, the tool now shows the credit/refund amount and can automatically settle the overpayment as either an account credit or a refund.
September 21, 2026
COMMIT #: d0b156a
Updates
Sales
Shop (GWU-8659)
Update: Added a "Featured Takeover" option to Add-Ons, alongside the existing Required/Automatic options. A featured add-on can now show as a full-screen takeover during the waiver/quick-registration flow, with accepted $0 add-ons automatically placed as an order without requiring checkout.
Global Settings
Global Settings (GWU-1556)
Update: Added a Change Log button to the Global Waiver Form Fill settings page, letting admins view the version history of a waiver form's content, filterable by date range and field, powered by an expanded change-tracking system for form fields.
COMMIT #: b2bf653
Updates
PF General Updates
Terminology Update (GWU-8788)
Update: Renamed "Injury" to "Unable to Participate" throughout the PlayerFirst.
QR Codes (GWU-8838)
Update: QR code images are now cached after first generation and served directly on repeat requests, instead of being regenerated from scratch every time the same QR code is requested.
Sales
Invoices (GWU-8801)
Update: When a customer opens a Stripe dispute, the disputed amount is now automatically reversed from cash received and written off as bad debt.
If the dispute is later resolved in the brand's favor, the bad debt write-off is automatically reversed and the funds are reinstated.
Invoices (GWU-8836)
Previously: An invoice that had already been written off with bad debt could still have its remaining scheduled installments automatically charged, attempting to collect on a balance the brand had already written off.
Update: Automatic scheduled payment processing now skips any invoice with $1 or more of net bad debt recorded against it, preventing further auto-charges on written-off balances.
Front End
Roster Management (GWU-5138)
Previously: In adult-athlete-only divisions (no guardian on the account), the Remind flow could still look for a guardian email to send waiver reminders to, even though there is no guardian for an adult registration.
Update: The Remind flow now correctly shows and uses the athlete's own email for adult-athlete-only divisions, instead of expecting a guardian email that doesn't exist.
Program
Registration Details (GWU-8722)
Update: Added "Access" and "PF Pay" tabs directly to Registration Details, consolidating Access App visibility/schedule/scanning/code settings and PF Pay settings that previously lived only on the separate Tournament Attributes page.
September 17, 2026
COMMIT #: 6c09465
Bugs
Sales
Invoices (GWU-8121)
Previously: When an admin applied a single payment across two or more invoices at once, the amount recorded in PlayerFirst could fail to match what was actually charged in Stripe, with no indication the payment had been split.
Update: Fixed how split payments are applied so the recorded amounts match Stripe, added a note on the transaction to flag when a payment was split across invoices, and added an email alert when a payment mismatch is detected.
Invoices (GWU-8479)
Previously: Auto-reallocate could fail to correctly reallocate a payment on an invoice, in some cases applying a negative amount to a line item that had already been deleted.
Update: Fixed auto-reallocate so it correctly skips deleted line items and reallocates payments as expected.
Communication
Create Message (GWU-4806)
Previously: Sending a transactional email & SMS with "Include Username" checked would send the email but silently fail to send the SMS Message.
Update: Fixed SMS sending so it goes through correctly when "Include Username" is selected.
Team
Team Management (GWU-8619)
Previously: If the "Total Customer Cost" column was hidden on the Team Management table, editing the "Team Cost" field threw an error in the background and the change silently failed to save.
Update: Editing "Team Cost" or "Total Customer Cost" now saves correctly regardless of which of the two columns is currently shown or hidden.
Front End
Team List (GWU-8819)
Previously: On the front end Teams page, a program whose divisions were also scheduled in Leagues & Tournaments could show the same division name as two separate headers with teams split between them.
Update: The Teams page now groups by the Leagues & Tournaments division whenever a schedule exists, so teams from the same division no longer appear under duplicate headers.
Updates
Program
Registration Details (GWU-8176)
Previously: A team code containing a non-breaking space or certain other characters could cause the Move Team page to reject the change with an HTML character error.
Update: Fixed input handling on the Move Team page so these characters no longer cause an error.
Admin
Program Approval Notifications (GWU-8261)
Update: Added a "Program Expenses" column to the Program Approval Notifications table, linking directly to a program's Expense Approval action.
Travel First
Stay to Play (GWU-8822)
Update: Added a "Registration Totals" column to the Programs table on Stay to Play, showing each program's registration total (excluding waitlisted and removed registrations).
September 16, 2026
COMMIT #: fa4d4ed
Updates
Schedule
Leagues & Tournaments (GWU-8746)
Previously: Deleting a division in the flight/division editor could leave behind stale data, causing teams from the deleted division to still appear as suggested teams.
Update: Fixed division deletion so it fully clears associated data and deleted teams no longer appear as suggestions.
PF Web Builder
SEO (GWU-8274)
Update: A Brand Voice field was added to the Brand tab of a site's Site Settings page. The setting impacts the AI-generated SEO descriptions used when editing a web page.
API
GotSport (GWU-8768)
Update: Team logos synced from GotSport now display in the Access App.
A team logo uploaded in PlayerFirst will take priority.
September 15, 2026
COMMIT #: 155602d
Bugs
Program
Bulk Registration (GWU-8800)
Previously: Attempting to advance in the Program>Bulk Registration process could throw an error for users without the Shop Enter Credits role.
Update: Updated the Bulk Registration process so it no longer errors for users who don't have the Shop Enter Credits role.
Schedule
Leagues & Tournaments (GWU-8802)
Previously: Opening the flight editor for a division that had teams not yet assigned to a pool could crash the page.
Update: Fixed the flight editor so it no longer crashes when a division has unassigned teams.
Those teams still show under Unassigned.
Front End
Recruiting Profile (GWU-8550)
Previously: A saved Recruiting Twitter/X value didn't display on the athlete's recruiting profile — only Instagram displayed.
Update: The athlete's recruiting profile now shows a Twitter/X icon and link alongside Instagram when a Twitter/X value is saved.
Updates
PF General Updates
Admin Toolbar (GWU-4918)
Update: Removed the (?) help button beneath the PlayerFirst logo in the admin toolbar.
This button was located at the top right of the backend dashboard.
Sales
Invoices (GWU-8780)
Update: Root Admins can now schedule payments past a program's servicing date.
Team
GearUp Sync (GWU-8793)
Update: Improved GearUp team store matching so it only matches within TMS and no longer matches across brands.
API
GotSport Schedules (GWU-8762)
Update: Added webhook handlers to receive score and schedule updates from GotSport.
Communication
SMS Messaging (GWU-8805)
Update: Adjusted the SMS content guardrails to allow messages that tell users to "check your email,".
September 14, 2026
COMMIT #: 054eaaa
Bugs
Sales
Subscriptions (GWU-8607)
Previously: After an admin canceled a tiered upgraded subscription effective at the end of the term, it immediately moved to the Inactive section of the user's Payments page even though it was still active until the termination date.
Update: A canceled upgraded subscription now stays under the Active section on the user's Payments page until its actual termination date.
Invoices (GWU-8235)
Previously: A payment reconciliation issue could cause a payment's recorded amount to be doubled or otherwise misreported in the ledger.
Update: When a payment doesn't reconcile, PlayerFirst now records a new offsetting transaction to correct the ledger instead of altering the original one, and sends an email alert whenever a mismatch is detected.
Updates
Sales
Invoices (GWU-8042)
Previously: Updating a saved payment method's name in Admin didn't carry over to invoices — the invoice and payment schedule kept showing the old name.
Update: Updating a payment method's name now updates the name shown on upcoming scheduled payments and in the Payment Methods table. Payments already made keep the name that was in use at the time.
Invoices (GWU-6929)
Update: Added a guard rail that blocks deleting an invoice once it has received a cash, check, credit card, or ACH payment, even if that payment was later refunded. Deleting an eligible invoice now automatically reverses any applied concessions (correctly reallocated to their line items) and removes the line items. Admins now see an explanation whenever an invoice can't be deleted, and a heads-up about concession reversal when it can.
Communication
Subscription Renewals (GWU-7470)
Update: Added automated warnings ahead of an upcoming subscription renewals.
SMS Messaging (GWU-8776)
Update: SMS messages are now automatically checked for marketing-style wording before sending. Messages flagged for marketing-style wording will not allow the user to send.
SMS Messaging (GWU-8795)
Update: One-time SMS messages (like verification codes and password resets) now automatically include "Reply STOP to End" and a mention of PlayerFirst when not already present, to meet carrier compliance requirements.
Global Settings
MFA SMS (GWU-8784)
Update: Added a global setting to turn SMS-based MFA/one-time codes on or off. When it's off, requests for an SMS-based one-time code are rejected.
September 10, 2026
COMMIT #: 77ac3e9
Bugs
Sales
Invoices (GWU-7664)
Previously: The SaaS Sales report could double-count or miscalculate sales.
Update: Rewrote the sales calculation so each charge is counted exactly once.
Invoices (GWU-8685)
Previously: A payment plan discounted down to a 100% scholarship or prorate could leave the invoice in a broken state instead of settling as fully paid.
Update: A payment plan fully covered by a scholarship/prorate now correctly generates an offsetting concession transaction and settles the invoice as fully paid.
Invoices (GWU-8673)
Previously: When a Bill To contact's name contained a trailing apostrophe or other special character, the allocation modal would render almost entirely cut off, preventing admins from applying concessions to the invoice.
Update: Fixed the allocation modal to display correctly regardless of special characters in the Bill To contact's name.
Communication
Message History (GWU-8570)
Previously: "Re-send to Opened" / "Re-send to Unopened" could be attempted on messages that weren't originally composed with a selectable recipient list, which had no recipient data to rebuild the resend from.
Update: The resend buttons are now disabled with an explanatory warning when a message wasn't sent from a web-built recipient list, preventing a resend attempt that can't actually work.
Front End
Waivers (GWU-8712)
Previously: The waiver "Find Athlete" email-selection step could fail to show all valid email addresses to choose from.
Update: Fixed the waiver email lookup to consistently include all eligible guardian and athlete email addresses for the athlete's account.
Edit Profile (GWU-8517)
Previously: The core email-format validator was accidentally case-sensitive due to a regex configuration bug, causing valid email addresses with uppercase letters to be rejected wherever this validator was used.
Update: Fixed the regex configuration so uppercase and mixed-case email addresses validate correctly everywhere this shared validator is used.
Log In (GWU-8774)
Previously: When logging in using Multi-Factor Authentication, selecting the "Phone on Account" option to receive a one-time code via SMS was not successfully sending the code.
Update: Logging in using Multi-Factor Authentication and selecting the "Phone on Account" option works as expected.
Program
Registration Details (GWU-8530)
Previously: On the Registration Details Basics tab, clicking the "Remove Logo Image" button caused it to become disabled and turn grey without removing the logo.
Update: Fixed the Remove Logo Image button so that clicking it correctly removes the attached logo.
Updates
Program
Divisions (GWU-7834)
Update: The following updates were made to the Divisions tab...
Updated the options when editing Tryouts Override to match options on the Edit Divisions/Edit Multiple Divisions pages
The Adult Registration/Tryout overrides now read "Adult Athletes Only / Youth Athletes Only" and "Include Tryouts / Disable Tryouts" instead of generic "Yes/No."
Locked the Name, Session, and Group columns from being drag-reordered.
Communication
Create Message (GWU-4631)
Update: Added a "Next" dropdown on the compose step with Preview, Save for Later, and (when eligible) Send Message options.
Program
Registration Details (GWU-8711)
Update: Added an "Automatic Roster Sync" setting to the GotSport integration, letting a program's rosters sync from GotSport on a recurring schedule instead of only via manual import.
Registration Details (GWU-8529)
Update: Added a "Remove List Image" button to the Registration Details page.
Registration Details (GWU-8710)
Previously: Moving an athlete's registration into a division that was still open for tryouts could silently demote an already-accepted season registration back into a tryout charge.
Update: A registration that already holds an accepted season spot is no longer demoted to a tryout registration just because the destination division is open for tryouts, unless the admin explicitly answers "No" when asked whether to accept from tryouts.
Registration Details (GWU-6273)
Update: Added a "Display Tryout Dates" setting, so a program's Tryouts Start/End dates can be shown on public program pages and the program list, alongside the regular event dates.
User
Users (GWU-8314)
Update: Added a new User Profile Duplicates admin page that detects likely duplicate user profiles by name and merges them automatically.
Team
Coach Packet Orders (GWU-8601)
Update: Added a new Coach Packet Orders reporting page listing Coach Packet purchases with filters for brand, program, purchase date, and approval status.
September 3, 2026
COMMIT #: 376f9bd
Bugs
Front End
Registration (GWU-4499)
Previously: When an admin/manager was moderating a purchase on behalf of another client, the "Bill To" name and address suggestions at checkout could still reflect the previous client rather than the one currently selected, and could carry over stale billing/shipping selections between clients.
Update: The Bill To name and address fields now correctly rebind to the client actually selected for a moderated purchase, and previous billing/shipping selections are cleared when switching to a different client.
Sales
Invoices (GWU-8747)
Update: Root Admins can now always see and use external ACH/credit card payment options and manual invoicing on the invoice page, matching the fix already applied elsewhere.
Updates
Communication
Order Confirmation Emails (GWU-7829)
Update: The confirmation email for a Coach Packet purchase now includes a "Log In" button linking to the coach packet portal, plus School and Email rows populated from the coach's captured answers.
Shown only on Coach Packet passes, not regular passes.
Team
Coach Packet (GWU-8679)
Update: Coach Packet access now follows the coach email captured during checkout, matched against the coach's own account email(s), regardless of who made the purchase.
Team Management (GWU-8748)
Previously: Setting a Team Chat public date earlier than the event's start date on Team Management threw an unhandled error instead of a clear message.
Update: This validation now shows a clear on-page alert ("Team Chat Public date/time cannot be earlier than the Event Start") instead of an unhandled error.
September 2, 2026
COMMIT #: 18406a5
Bugs
Sales
Invoices (GWU-8057)
Previously: On a split invoice with a platform fee, once the club paid the team's portion in full, the "Total to Split" amount could still show a leftover balance equal to the platform fee.
Attempting to update a split allocation on an already-fully-paid team could also incorrectly fail or create an unnecessary split request.
Update: Fixed the split-invoice balance calculation so platform fees are factored in consistently, and a fully paid team registration no longer shows a false remaining balance.
Updating a split allocation on a fully paid team is now a safe no-op instead of erroring or creating a stray split request.
Invoices (GWU-8740)
Previously: A Root Admin without the specific "Create External Payments" role could be blocked from entering External ACH or External Credit Card payments, since Root Admin wasn't included as an automatic fallback for that permission.
Update: Root Admins can now always create external ACH/credit card payments.
Program
Registration Details (GWU-8690)
Previously: On the division-filtered registrations grid, the "School" column could show an incorrect or blank school name because it read from the wrong underlying school field, out of sync with the school shown when viewing the whole program.
Update: The School column now consistently pulls from the athlete's actual profile school across both the division-filtered and whole-program views. Also renamed the column from "Athlete School" to "School."
Updates
Front End
Roster (GWU-1802)
Previously: Opening a dropdown menu inside a data table could leave other open dropdowns visible at the same time, and a newly opened dropdown could render partially off-screen without scrolling into view.
Update: Opening a dropdown menu in a table now closes any other open one, and automatically scrolls the newly opened menu into view.
Communication
Media Manager (GWU-7898)
Update: Added a shared "College Logos" folder to Media Manager, browsable read-only by any brand admin, for referencing common college logo assets without needing them uploaded per brand.
PF Web Builder
Tab Settings (GWU-7602)
Update: Enabling "Share Page" on a program page tab now shows a confirmation dialog explaining the effect, and automatically applies the tab's current visibility to every other program at the moment it's shared.
Disabling Share Page also now confirms before removing the page from all other programs.
User
Age Verification (GWU-8666)
Update: Athlete first and last names on the Age Verification results grid are now clickable links that open the corresponding user account page in a new tab.
September 1, 2026
COMMIT #: e634690
Updates
Program
GotSport API (GWU-7231)
Update: Added a beta GotSport integration on Edit Program. Admins can enter a GotSport Event ID and import team rosters and (once the tournament is finalized in GotSport) the schedule directly into PlayerFirst, plus a full re-sync option for testing.
Schedule
GotSport API (GWU-7230)
Update: Added a beta GotSport integration on the Schedule page.
PF General Updates
Brand Export (GWU-8719)
Update: Added a Brand Export tool that exports a brand's profiles, tags, rosters, and programs to an Excel file for brand offboarding.
Downloads notify admins and log the number of personal records exported.
Sales
Invoices (GWU-7693)
Update: Create Account Credit can now split a single credit across multiple accounts.
Checking "Assign the credit to multiple accounts" opens a new Assign Credit to Multiple Accounts page to divide the total and track how much has been assigned so far.
Team
Team Reporting (GWU-5233)
Update: Added a "Split Invoice Due" column to the Team Reporting Rosters tab, showing each athlete's remaining balance on a split invoice.
The column only appears when split invoicing is enabled for the program, division, or team in scope.
