July 29, 2026
COMMIT #: 90d9891
Updates
Front End
Digital Coach Packets (GWU-8543)
Updates:
On the Program List on the Coach Packet page...
The brand name was added to the program tile.
The location was added to the program tile.
A State filter to the Teams page when viewing a program's Coach Packet.
Digital Coach Packets (GWU-8455)
Update: Updated the coach packet flow to allow a team’s schedule to display after the event has been completed.
The schedule is view only for users with the following qualifications:
User role: College Coach
College Coach attached to a school
Purchase a coach packet for the specific program
Digital Coach Packet (GWU-8048)
Updates:
Cleaned up the UI of the Recruiting Profile page.
Added a Notes section to the Recruiting Profile page for College Coaches.
Notes can only be seen by college coaches of the same school.
Digital Coach Packet (GWU-7830)
Updates:
Added a tab to the Account sub navigation: Coach Packet
Displays if the user has a College Coach role for any brand.
Coach Packet page
Displays list of programs in which the Coach Packet purchase(s) are associated.
Programs the coach packet was purchased for will be visible for 90 days after the event end date.
COMMIT #: e0a4820
Bugs
Club App
Guest Players (GWU-3430)
Previously: Parents who had a son/daughter added as a guest player to a team in the Club App could not see the events for the team when exporting the schedule to their calendar.
Update: Parents who have a son/daughter added as a guest player to a team in the Club App could can see the events for the team correctly when exporting the schedule to their calendar.
Updates
PF General Updates
Maintenance (GWU-8563)
Update: Added developer subscription emails to exceptions in specific files/methods.
Sales
Invoices (GWU-8339)
Update: The Overpayment to Credit button does not show if the net cash on the invoice is equal to $0.
July 29, 2026
COMMIT #: 768c277
Bugs
User
Quick Waiver (GWU-8363)
Update: Duplicate-username collisions are now correctly detected regardless of how the database error is wrapped, so concurrent Quick Waiver submissions reliably show the expected "an account already exists for this email" message instead of an unhandled error.
Front End
Orders & Payments (GWU-8568)
Previously: The Pay button on certain payment links (e.g. a completed-transaction receipt link) could fail — either by unnecessarily generating a new cache key when one wasn't needed, throwing an error if no payment cache existed, or losing prepayment/pay-in-full context when redirecting to enter a custom amount.
Update: Fixed the Pay button to correctly handle completed-transaction payment links without forcing a new cache key, avoid errors when no payment cache is present, and preserve prepayment, payment request, and pay-in-full context when redirecting to a custom payment amount.
Updates
Program
Edit Program (GWU-8221)
Update: Expense approval now runs when Operations approves the program, not when Admin does.
Site Settings
Site Settings (GWU-8499)
Update: Added validation rules to brand-level Site Settings: a brand must have at least one Sport, a Brand Subaccount is required for accounting, and a Default Sub-Brand Subaccount is required when sub-brand subaccounts are configured. Also added a check to prevent a brand from being set as a parent/child of itself, directly or through another relationship, on the Global Brands settings page.
Messaging
Messaging Schedule (GWU-8474)
Update: Added an explicit "Include All Divisions" flag that's saved and honored throughout program/division filtering, so selecting all divisions for a program reliably includes every division, including ones added later, rather than a snapshot of division IDs.
Club App
Google Analytics (GWU-8394)
Update: Implemented Google Analytics events for the Buy Now feature on the PlayerFirst Club App.
PF General Updates
Azure Front Door Integration (GWU-7481, GWU-8548)
Update: Added two new domain-binding workflows to the Domains settings page: "Add Binding — External DNS" for domains that stay with an external DNS provider (returns a TXT record for validation), and "Add Binding — Migrate to Azure DNS" which creates and binds an Azure DNS zone, points the domain (apex + www) to Azure Front Door, and returns the nameservers to set at the registrar.
July 28, 2026
COMMIT #: ef15437
Bugs
Front End
Bulk Registration (GWU-8312)
Update: When selecting an existing club during team registration, the club's main contact name is now shown alongside the club, helping registrants confirm they've picked the right club before continuing.
Location
Court Timelines (GWU-7986)
Previously: Editing a rental or game time on the Court Timelines page (drag-and-drop, availability windows, or the detail panel) could save the wrong time, because the browser's local timezone was used instead of the brand's configured timezone — causing times to shift when an admin's computer was in a different timezone than the brand.
Update: All schedule editing on Court Timelines now consistently interprets and converts times using the brand's actual configured timezone (passed from the server) instead of the browser's local timezone, so edited times save correctly regardless of where the admin is located.
Communication
Create Message (GWU-8535)
Previously: When creating a message, the [ATHLETE_FIRST_NAME] token would list all first names from athletes on the account.
Update: A [ROSTER_FIRST_NAME] token was added that will address only the first name of the roster ID being targeted.
Updates
PF General Updates
Club ID (GWU-7735)
Update: Phase 1 of a rework of how clubs are managed and matched across PlayerFirst: rebuilt the Clubs List admin page (moved from Communication to User) with new Brand and Sport filters, pagination, and a notice for clubs shared across multiple sites; added an "Owned by Brand" field to Club Details and restricted creating/editing clubs to Root Admins only; when registering teams via Bulk Registration (CSV upload), clubs are now automatically matched by Name + Hometown + State, with ambiguous or missing-location rows flagged with a clear error; a club's saved city/state locks as read-only once valid during manual registration, but stays editable if the stored location is missing or invalid; added a database migration (CreatedUtc on Clubs) and new automated test coverage.
Front End
Cookie Consent Banner (GWU-8271)
Update: Replaced the "Necessary Only" / "Accept" cookie banner options with "Customize" / "Accept All." "Customize" now opens a preferences modal where users can review their cookie choices.
AES
User Roles (GWU-8490)
Update: When an AES billing account is synced into PlayerFirst and isn't dropped, it's now automatically granted the standard "User" role on the brand tied to its invoice, ensuring AES-created accounts have proper brand access without requiring manual role assignment.
GearUp
API (GWU-6027)
Update: Added GearUp integration for team uniform/gear ordering: new GearUp Orders admin page to view uniform orders by brand, purchase date range, unassigned athletes, and unassigned team stores; new GearUp Team Stores admin page to view and filter team stores by brand, sport, and program; added "GearUp Team Store Link" and "GearUp Store ID" fields to Edit Program; added supporting database tables/migrations and new automated test coverage.
GearUp
Program, Team, Sales (GWU-8491, GWU-8265)
Update:
Added a Team Store section above the Exposure section when editing a program.
Added a field labeled GearUp Team Store Link.
Added a field labeled GearUp Team ID.
On the Team>GearUp Orders page...
Added a Brand filter.
On the Team Management>Roster Management page...
Add a new option under the Email icon: "Email GearUp Player Pack link to selected athletes".
Added logic to the GearUp Orders page to display if a Roster ID is assigned to a GearUp order.
July 27, 2026
COMMIT #: 61e9c08
Bugs
Front End
Registration (GWU-8557)
Previously: When a cart included an installment/payment plan, the "Due Later" total on checkout could incorrectly be overridden by the plan's due-at-checkout amount, showing the wrong figure instead of the actual remaining balance due later.
Update: Removed the payment-plan-specific override so the "Due Later" total on checkout now consistently reflects the correct scheduled/waitlisted balance, regardless of whether a payment plan is selected.
COMMIT #: e2a1c73
Bugs
Sales
Invoices (GWU-8481)
Previously: On the Invoices page, receiving a payment could be incorrectly rejected due to a rounding mismatch between the Base, fee, and tax amounts. Separately, the payment fee type shown on saved payment methods (ACH vs. credit card vs. check) could be misidentified when the method's type wasn't clearly reflected in its display name.
Update: Fixed the Base/fee/tax rounding check so it no longer produces false mismatches, and fee-type detection for saved payment methods now checks the method's actual type flags first before falling back to name matching. Also added a clickable balance amount in the payment allocation modal that auto-fills the full remaining balance into the applied amount field.
Updates
Sales
Subscriptions (GWU-8441)
Update: Discount codes can now be applied to subscription upgrades, using the same eligibility rules (active date window, remaining uses, user eligibility) as cart discounts. Added a discount preview on the Subscription Upgrade page so customers can see the applied discount before confirming, along with related styling updates to the upgrade and discount details pages.
Global Settings
Class Manager (GWU-8498)
Update: The "Sport(s)" suggest field on Create Finance Projects (Class Manager) now also includes non-sport categories in its suggestions, not just traditional sports.
July 23, 2026
COMMIT #: 46550aa
Bugs
Sales
Item Details (GWU-7008)
Previously: On the Item Details page, cancelling/deleting a line item calculated available discount, scholarship, and refund amounts inconsistently, didn't factor in platform fees when showing Net Cost/Balance, and could allow an attempt to cancel an item that still had unresolved allocations elsewhere on the invoice.
Update: Item Details now shows Platform Fees as its own line and factors it into Net Cost and Balance.
Updates
Sales
Payments (GWU-4370)
Update: Added an "Allocate Payments" step to the customer Payments flow, letting a customer paying against multiple invoices/line items at once specify how much of their payment applies to each line, rather than only splitting evenly. Amounts for platform fees or items due in full aren't editable in this view. Also refreshed the notice/warning banner styling on the Payments pages for consistency.
PF General Updates
Intercom (GWU-8515)
Update: The Intercom help widget now loads in the background as soon as an admin's page finishes mounting.
Sales
AR Communication (GWU-5888)
Update: Pre-AR (upcoming payment) reminder emails and the accounts-receivable dashboard now include scheduled payments that don't yet have a payment method on file within their notification window.
July 21, 2026
COMMIT #: d0f21bf
Updates
Front End
Product Purchase (GWU-4815)
Update: Removed the "Sign Waivers?" modal that appeared on the order confirmation page after a gate or parking purchase.
July 20, 2026
COMMIT #: 51bddc5
Bugs
User
Import Users (GWU-8519)
Previously: When importing users via spreadsheet, each parent/guardian on an athlete's record was always assigned the athlete's own address.
Update: The Import Users template now supports separate address fields (Address Line 1, Address Line 2, City, State, Zip) for Parent 1 and Parent 2. If a parent's own address is provided, it's saved to that parent's profile instead of defaulting to the athlete's address.
Updates
PF General Updates
Field Labels (GWU-8516, GWU-8508)
Update: Standardized how the sport-specific "Field"/"Court" label is generated and displayed across schedule imports, bracket views, tournament setup, locations, and reporting.
July 15, 2026
COMMIT #: ce95b24
Bugs
Communication
Create Message (GWU-8383)
Previously: Emails sent through the Create Message workflow were displaying abnormally low delivery rates.
Update: Resolved the issue causing emails to be sent with low delivery rates, restoring normal delivery performance for outbound communications.
COMMIT #: fb38761
Bugs
Sales
Invoices (GWU-8475)
Previously: When recording an external ACH or credit card payment on an invoice, transaction fee calculations and overpayment checks didn't correctly account for the external payment type.
Update: Fixed transaction fee math and the overpayment limit check for external ACH and credit card payments so Amount and Net Charge values calculate correctly.
Updates
PF General Updates
Cross Brand PII (GWU-8450)
Previously: Several admin pages and reports allowed a brand's admin to view or export another brand's athlete, parent, and coach contact information (names, emails, phones, addresses) that they should not have had access to.
Update: Restricted the affected pages — including Waiver Completion, Retention List, Team Reporting, User Problems, Possible Duplicates, User Profile Sources, College Commitments, Bulk Subscribers, and the public recruiting profile pages. Results and contact details are correctly scoped to the affiliations an admin has access to.
Access App
Sales Dashboard (GWU-8465)
Update: Updated the Sales Dashboard to display total invoiced amounts instead of total paid, improving page load speed.
Exposure
API (GWU-8395)
Update: Allows brands to add fields and update schedules directly in Exposure after the initial sync, without switching back to PF to trigger another sync.
API (GWU-8374)
Update: Bracket games imported from Exposure now get an automatically generated title (e.g. "Championship" and "Consolation Championship") based on their position in the bracket.
July 13, 2026
COMMIT #: a78abff
Updates
Team
Team Manager (GWU-8382)
Update: Added a Phone Number field to the Add Coach/Manager new-user form.
Sales
Payments (GWU-8492)
Update: When a Stripe payment succeeds, but PlayerFirst has no matching record, the system now attempts to automatically recover and apply the payment by matching it back to its originating cart/order via Stripe metadata before falling back to a manual-reconciliation alert.
July 9, 2026
COMMIT #: 3e9dce9
Bugs
Front End
PF Web Builder (GWU-8259)
Update: Fixed Meta Image Display when editing a web page's SEO.
Team
Team Management (GWU-8461)
Update: When sending a custom message to a custom recipient list, the template selection now also reapplies correctly when a custom list is used on the Compose step.
Messaging
Message History (GWU-8330)
Update: When using the "Resend to Unopened/Opened" flow, filtering now scopes across all emails in the same thread, correctly limiting the resend list to profiles who did/didn't open any message in that thread, and clears the CC list if no matching recipients remain.
User
Users (GWU-5225)
Update: Quick Waiver submission now checks for an existing user by username/email before creating a new account, reusing the existing account instead of creating a duplicate. Also disabled the Next/Continue buttons on submit to prevent duplicate double-clicks.
Updates
Program
Edit Programs (GWU-4462)
Update: Added guardrails to prevent deleting a program or division that has purchases on it. Attempting to delete a program blocked for this reason (or one whose associated products have purchases) now shows an explanatory alert instead of deleting; the same guard applies to division deletion.
Sales
Paid Email Receipt (GWU-7553)
Update: Updated the "upcoming payments" text on the paid email receipt to name the specific payment method that will be charged next, resolved from the earliest pending scheduled payment on the invoice, with a generic fallback when no method is on file.
Front End
FE Web Builder (GWU-8167)
Update: Added a new Countdown component to FE Web Builder, allowing brands to insert a live countdown timer to a date or to the start of an upcoming program directly into program list content.
User
NCSA Opt-Ins (GWU-8454)
Update: Updated the NCSA opt-in consent text in the registration workflow to reflect the latest required disclosure language from NCSA.
Messaging
Create Message (GWU-5503)
Update: Selecting "Only recipients who have NOT purchased the product" on a product filter now automatically scopes the audience to the product's program and its divisions (rather than the whole brand), and clarified the checkbox label to "Only select recipients in the product's program who have NOT purchased the product."
July 6, 2026
COMMIT #: 32e41c2
Bugs
Program
Exposure Sync (GWU-8453)
Previously: When syncing bracket games from Exposure, a game could reference itself as its own winner/loser advancement game if its bracket number matched another field on the same game, creating a self-referencing (recursive) link.
Update: Winner/loser game lookups now require a valid bracket number and explicitly exclude the game itself, preventing a bracket game from linking to itself.
Division Details (GWU-8331)
Previously: On the Division Details page, the "Waivers Completed" gauge counted registrations across the entire program rather than just the divisions currently selected in the filter, producing an inflated/incorrect completion percentage.
Update: The "Waivers Completed" gauge on Division Details now scopes both the roster and registered-count data to the selected divisions only. Also renamed the Player Grid's "Players" table heading to "Registrations" for clarity.
Team
Schedule Games (GWU-8375)
Update: Teams are now excluded from scheduling (Schedule Games, Timeline, Flight Selector team counts) only when every registration item for that team is still in an open cart — teams with at least one completed registration are correctly included. Also hardened the unwaitlist process to clear roster and related order items even without a direct roster navigation link.
Updates
Sales
Sales Dashboard (GWU-8449)
Update: Sales Dashboard revenue totals (overview and velocity charts) now sum actual received payments instead of the full charge amount, so partially-paid orders no longer inflate reported revenue.
July 1, 2026
COMMIT #: c1346c5
Bugs
Shop
Shop (GWU-8447)
Previously: On the Add to Cart panel's program list, the link to each program was built with raw, unencoded query string concatenation, which could throw a null reference error when the request query string was empty or malformed, and could produce broken/invalid links. Additionally, the underlying view model builder could throw a null reference error if program IDs or product IDs were not provided.
Update: Replaced manual query string concatenation with a safe query string builder for program links, preventing malformed URLs and null reference errors. Added null-safe defaults for program IDs and product IDs when building the Add to Cart view model.
Payments (GWU-8411)
Previously: The scheduled payment processor could apply a partial payment against the wrong scheduled installment — when consuming payments due, it did not scope which scheduled transaction rows were being closed out, allowing an unrelated (orphaned) scheduled row to be reduced or cleared instead of the correct line-item installment. Additionally, rescheduled remainder transactions were incorrectly copying prior failure fields onto the new open row, and platform fee discount amounts were not being rounded, causing off-by-fractions-of-a-cent discrepancies.
Update: Scheduled payment consumption now explicitly tracks and clears only the scheduled transaction rows tied to the payment method group actually being charged. Rescheduled remainder rows no longer inherit failure count, last failure timestamp, or decline details from the original transaction. Platform fee discount calculations are now rounded to the nearest cent.
Updates
PF General Updates
Web Logging (GWU-8448)
Previously: When a shopping cart's item view drifted out of sync with its underlying cart items (a normal, self-correcting condition that triggers an automatic re-evaluation), the system logged this as an error, generating unnecessary error-log noise.
Update: Removed the error logging for this expected drift-and-recovery case, since the cart is automatically re-evaluated and corrected without any issue. No change to the underlying cart behavior.
Sales
Payments (GWU-8424)
Update: Added support for recording a Payment Gateway Transaction ID ("Payment Intent ID") when logging an external credit card or ACH payment on an invoice. The ID must be a valid payment-intent reference and is only accepted for external payment types. A "Payment Intent ID" field now appears on the Receive Payment form when an external method is selected.
Front End
Endpoint Authentication (GWU-8410)
Update: Updated the tournament broadcast and settings endpoints so JWT-authenticated admin users can call them without providing a scoring code. Previously these endpoints required a Director's Scoring Code on every call; now, if the caller has admin-level access to the tournament's affiliation (via JWT), the scoring code is no longer required. Non-admin callers must still supply a valid scoring code as before.
