Track all updates, improvements, and fixes to FullOut
fix(college): reparent 26 orphaned college teams off the "Unknown" bucket into real universities
7c3ad030feat(admin): title /admin/partners "Partners" and badge each row Event Producer vs Affiliate
fa105792feat(admin): cross-link Partner <-> EventProducer consoles; resolve EP page by id/slug too
e20985b3feat: discipline data-quality loops (placement, dedup, division reclassification)
fa82fa2efeat(profile): free parent/child account linking (reuse PersonRelationship)
32ae56e8docs: FOV IAP + App Store approval status and handoff
b17cdbd1feat(ep): landing-page traffic + acquisition funnel on EP program dashboard
83110a08docs(brand): correct pink-SVG download label and asset-kit Redline logo reference
9a1fc4eafix(brand): rebuild fullout-pink.svg without mask-seam artifacts; add Redline logo to /redline
96349b42feat(partners): hide redundant Affiliate tab for EP-linked partners; generalize commission-defaults button; GTM doc fixes
9f5b9371refactor(mobile): FOV IAP uses a single consumable product for all levels
2df04d2efeat(brand): update brand-page core palette to 8 colors; use "Redline Championships" on /redline
ff09f4cefeat(mobile): FOV Apple IAP purchase flow + web handoff
5f5491d9fix(security): verify IAP receipt server-side + ownership check on FOV grant
f599c202feat: FOV Apple IAP grant endpoint + appleTransactionId (Verified IAP foundation)
9be7d992feat: attribute Apple IAP/RevenueCat conversions to partners
14182c16fix: prevent a producer from being its own broker
df725e2ffeat: attribution-only partner promo codes at checkout
2c3e2782fix(hubs): bump hub-data cache key to v2 to bust stale Data Cache after the discipline-membership change
c2286a61feat: /redline landing page with vanity-link attribution
7f93ebf6feat(stunt): add discipline-filtered programs map to the STUNT hub
f3af5511feat(profile): make Experience athletic-only; close coach self-assign backdoors
9d30ba50fix(hubs): derive discipline hub competitions from Division.disciplineId, not Competition.disciplineId
93e17c96@ feat: /disciplines landing page, choreographers + coaches in nav, gym map on discipline hubs
670b9093fix: add Restore Purchases to account menu, wired to native StoreKit (Apple 3.1.1)
115b2c0dfeat: Verified in-person grant + payment-provider foundation (Verified IAP phase 1)
1de41538fix(mobile): route all upgrade paths to Apple IAP, drop floating button, fix double username
dc8bf353feat: nest Report/Block into the profile ••• menu
6aef7516fix: only list EP-program-enrolled producers as dashboards in settings
d7d87faffeat: App Store rejection fixes (crash, UGC moderation, support URL)
750ecba2feat: gym data enrichment pipeline (contact discovery, logos, geocoding) with provenance chokepoint
6840f3f9feat: GA4 + Search Console web analytics dashboard in admin
34740b41feat: split company roster into Current and Previously
b1ab1829fix: discipline chips on /gyms now filter the map, not just the table
e12746d8feat: EP member + broker delete/deactivate, and traffic intel on admin EP page
a9306487fix: merge duplicate gyms + identify ghost gym records behind state rankings
899b5c3ffix: verify + correct ranked gym locations, surface state rankings in UX
0e6a1e50feat: Best Cheer Gyms in {State} SEO pages for all 50 states + DC
550c5dd3feat: admin merge UI for duplicate choreographers
068a53cbfeat: choreographer merge/dedup tool for consolidating duplicate company pages
0a21c7a6feat: traffic & click intel on the EP program page
dcd4817ffeat: notify choreo-company owner on affiliation claim, choreographer on confirm
db04e808feat: EP program seats (up to 5) + admin brokers page
44893c57feat: choreographers can list companies they've worked with (self-reported affiliations + owner confirm)
e2624860feat: include event producers (Redline etc.) in search
0d31ac1afix: hide broker relationship from the brokered EP (confidential)
08b09250feat: broker verification link on admin EP editor - when an EP is brokered, show the relationship + a link to that broker's rolled-up portfolio
193ea6b6feat: dedicated EP Broker portfolio page
36d07c92feat: EP partners can create multiple tracking URLs (campaign links) from their program dashboard
43978ae5feat: add Event Producers and EP Settlements (incl. brokers) to admin Revenue & Partnerships nav
ba126baeReorganize admin nav + fix dead-end Settings Admin tab
129dc18cReorganize admin nav + fix dead-end Settings Admin tab
1bc9f9e1Add API docs to footer + Partner API Keys to admin/settings menus
b9f56701Add API docs to footer + Partner API Keys to admin/settings menus
71e50752feat: consolidate partner API invoicing by billing account + direct mark-paid
fac8df2afix: de-duplicate admin nav - Settings > Admin now links to the dashboard instead of a stale link subset; admin dashboard verification card points to the unified queue (credits + gym claims) and drops the dead page-verification link
451e476cfeat: create + manage choreography companies self-serve
03a5ceeefeat: choreography company backend (owner-managed members + external links) + EP/broker program link in settings
5d08b8b8feat: pro profile section order - posts move to the bottom; skills, highlights, and timeline sit above the feed
43df01a1feat: photo gallery reorder for gym/team pages + robust gym-claims flag parsing (env values with trailing newlines)
e8357e03feat: gated events visible in search for authorized viewers + home location setting
16fe5bcefeat: professional profile skin + credit-form dropdown fix + directories list activated pros
e42ae5dffeat: manage coach/choreo credits directly on your profile - owners get add/edit/delete in the Coaching and Choreography tabs, and owner-added credits publish immediately (no admin queue)
7ab4043efeat: coach/choreo are now modules that reskin /@username, not separate pages
4ca2d7a7feat: Division Winner Scores chart now displays ICU named tiers (Novice-Premier) as levels
02c894acfeat: ICU European Championships 2026 results import (Prague, Jul 3-5)
9008ea96feat: Partner Stunt discipline hub at /partner-stunt with Future Flyer and Stunting is a Habit event producers
ecacbfc7feat: differentiate cheer hubs - All Star (/cheer), Sideline (/sideline, Game Day format), High School (/school), College (/college); nav labels updated
ae05ea1ffeat: coach and choreographer pages are now fully self-serve for Pro users - auto-verified on activation, verification form and Unverified labels removed (manual review stays for gym claims)
5ee76770fix: nav search Enter left the dropdown open over results when already on /discover - clear input, close dropdown, and blur before navigating
94f6dd2ePartner API: discipline + division filters, /api/v1/disciplines reference
b45d133aPartner API: discipline + division filters, /api/v1/disciplines reference
05a2a59efeat: gym claiming + gym-admin content tools (flagged off pending soft launch)
771a2fbbfeat: Pro profile activation for coaches and choreographers + choreographer orgs
e924fba3feat: unified personalized search + discipline hub pages
e9ec2814feat: unified personalized search + discipline hub pages
0bc2be84Partner data API + embeds: keyed /api/v1, widgets, admin issuance + invoicing
edc3b929Gated history visible to authorized viewers on team/gym profiles
a7147c02Dedupe ASW duplicate gyms + harden import gym matcher
897bc88dEP Program v1: rev-share settlement, origin tagging, EP/Broker/admin dashboards
e34c8342Division age/size normalization + tolerant division history matching
9979484bMove ASW under The Open Championship Series producer (gated)
0e5822caImport Allstar World Championship historicals (gated) + division repair
58585180API rate limiting (infra, inert until configured) — protect public routes + Disk IO
pendingGating: close nested-include hole + gated-series browsing
a61a8ad0teams/[id]: split heavy getTeam query + drop nested Person filter
b99cb7f1Event producers index: allowlist to Varsity, Redline, The Open, USASF
bec74c39Prospects contacts: show Instagram bio links
5d5560d0Gym Instagram enrichment: verified logos, website, bio, bio-links
b2745b37Redline event logos: host + display; gym enrichment tooling
a2bd5af8Producer events list: client Load-more pagination
3ae1f1eaProspects tab: map-viewport table filter + expandable contact info
4f1a9324Producer page: clarify events scope + make attendee intelligence single-season
ac9f1efeFix prospects=0 for long-lived producers; match prospects-map height
99ab016bAdd Event Producers nav link, taller producer map, gym backfill scripts
3f02eb62Prospects map: legend shows mapped-of-total counts
33ae9093Rename Redline producer to Redline Championships
524a3b3eExpand US_CITY_COORDS with 2,344 geocoded gym home cities
71203412Add gym-cities geocoder to widen map coordinate coverage
995bbdcaProspects map: separate overlapping city dots + layer show/hide toggles
cedecce6Prospects: widen active window to this season + prior season
682af880Prospects map: unified city popup, clickable events, triangle dot layout
db437572Prospects map: draw event dots as the top layer
aa69b041Prospects map: capture all non-attending gyms; events as sized dark dots
a1458b8cProspects map: aggregate gyms by city, size by count, fix occlusion
c86d5713Prospects tab: filter-driven map (events / attended / not-attending)
32433a3fMaps: switch to light Voyager base + always-on state outlines
ce393da1Producer attendee intelligence: fix mobile layout
bad63889Producer attendee intelligence: collapsible, sortable, filterable + blast radius
a7ff0333Producer page: PRO attendee intelligence (gyms, geography, retention, prospects)
7d020a13Producer events map: clearer popup close button
44566e2fProducer events map: stronger dot-size scaling for low counts
0c268c52Producer events map: proportional dot sizing instead of count bubbles
1ccf4b51Team dedup: merge 341 duplicates + durable import chokepoint
98031c5dTeam dedup: merge 341 duplicates + durable import chokepoint (program prefixes, discipline-scoped)
41a1efeaDivision detail page: gating-aware for confidential producer competitions
a13e5588Geocode competition venue cities into US_CITY_COORDS (+120 cities)
2d15d1b0Event producer page: discipline badges on each event
f9a2674aEvent producer page: season filter for events list, map, and stats
4ec78dc5Event producer page: add Instagram link to header
498ad23bProducer badge: render logo at natural aspect with contrasting tile
a334c1a6Producer logos: dark tile for white logos, light tile for dark logos
fbabb2a0Gating perf: filter raw queries on c.isGated, not p.isGated
b0f77306Event Producers: index page, event-location map, producer badges, Varsity/Worlds
e8b2a5bdEvent Producer page: show full clickable events list
a7106ba8Add Event Producers + confidential data gating (Redline / The Open)
SCORES: scorecards now show every captured breakdown column
MOBILE: modals no longer overflow horizontally on phones
ANALYZE: Scorecards moved to the bottom with a Cards/Table toggle
HEADER: profile picture now shows in the top-bar avatar
ANALYZE: Scoresheet tab now shows full team scorecards
PROFILE: dialogs get a mobile side gutter; experience date fields no longer overflow
PROFILE: experience role options — rename Team Parent to Team Rep, add Parent
SCORES: header-driven PDF parser fixes mis-mapped scorecard columns
b3edae14SCORES: breakdown gap-fill toolkit + import pipeline no longer drops scorecard columns
BILLING: payment-failure grace period + iOS subscription safety
BILLING: fix accounts that couldn't log in after checkout + subscription robustness
Fix Supabase egress blowout: cache reference-data loaders
b7e47fb5Surface first-month-free promo framing for free and new subscribers
b5858c3fAdd promo codes to in-app upgrades + PROTRIAL (first month of Pro free)
f53cd29cUpdate tier seed users to FREE/ELITE/PRO and preserve passwords
797a5740Fix ghost sessions + land onboarding on /home
3c84f954@ Affiliate generator: config-driven company fields + Alondra Flores docs
7c086d68@ Pricing accuracy + in-app plan upgrades/downgrades
47f33c95In-app plan upgrades/downgrades (no bounce to Stripe portal)
96fccbedANALYZE: fix mobile tab/filter layout on gym + single-team (F22)
373abffbANALYZE: mobile group-save parity, density drill-down, mobile header
df02343eANALYZE: SYS-1 — canonicalize single-entity surfaces
3b4123fbANALYZE: SYS-3 — URL-persisted, shareable analysis state
329a27acANALYZE: unify group selection/creation, signpost gating, fix UX inconsistencies
d7b28831COMPETITION: Divisions tab — expand Disciplines by default (Levels and Age Groups stay collapsed)
68d6c365COMPETITION: My-Follows team rows link to division; Divisions tab regrouped as Discipline > Level > Age
034fa54fCOMPETITION: My-Follows team rows link to division; Divisions tab regrouped as Discipline > Level > Age
5d25198dADMIN: split Paid vs Granted in analytics; Paid Users / Paid Mix exclude comps
1d394c20SKILL: add affiliate-contract generator + Hailey Smith contracts
8355d3ffADMIN: add MRR / ARR / New MRR / Active Subs to analytics dashboard
c5fe4644CHANGELOG: bump for v0.2.425 (rebase reconciliation)
f8bc3f63ADMIN: add Source column to user mgmt (Paid vs Granted vs Free)
3533703cADMIN: add Source column to user mgmt (Paid vs Granted vs Free)
a4dda85aCHANGELOG: backfill v0.2.422 entry for KlaviyoOnsite hotfix
61a21263HOTFIX: move KlaviyoOnsite inside Providers so useSession has its provider
8584720dHOTFIX: move KlaviyoOnsite inside Providers so useSession has its provider
80e10275KLAVIYO: install client-side onsite snippet + identify-on-login
46e4d2e8KLAVIYO: install client-side onsite snippet + identify-on-login
3d367bcFIX: harden Klaviyo subscribe path + add live-trace debug tooling
26f1cbeFIX: harden Klaviyo subscribe path + add live-trace debug tooling
5b134f9FOLLOWS: surface Follow Requests in nav with pending-count badge
8cd71b7fPRIVACY: retire ONLY_ME tier from UI, stop 404'ing locked profiles
ed99a715FIX: follow-request approval now actually grants profile access
f153beebFOLLOWS: clickable follower/following lists for teams, gyms, profiles
2bc4be80DOCS: capture trigram-index lesson from /discover 504 incident
002d695PERF: fix /discover 504 by removing seq-scan-forcing REGEXP_REPLACE fallback
b3dcd67FEEDBACK: fix stale TeamDivision label + merge mis-attributed Chicago teams
7fa3dcdFEEDBACK: wire Send Feedback into desktop sidebar + email alert on new submissions
7b125ecFIX: exclude heavy /public asset dirs from serverless function bundles
adfdddfBRAND: halftone library + minimum-font rails for social and ads
c97793bBRAND: surface-agnostic style guide export for Claude.ai Projects
dbe6973ANALYTICS: server-side Meta Conversions API for Lead, Purchase, Subscribe
e6e45b4NEWSLETTERS: self-contained export for Claude.ai Projects
54381f0ADS: UTM tracking convention + per-brief campaign slugs
4ce0908BRAND: top-level brand system + Meta ads aligned to email design language
0402cb7TOOLING: Klaviyo template font patcher + HTML clone workaround
adb7efcANALYTICS: wire Meta Pixel conversion events + Stripe success URL plumbing
11b94e6ANALYTICS: install Meta Pixel base + PageView on App Router soft-nav
e048ce6FIX: make subscribeEmailToKlaviyoList idempotent on 409
2e93b00ADS: real NCA 2026 L6 Coed top 3 + gym logo support in meta ad gen
0dff184FIX: Klaviyo signups now flip email-marketing consent at the chokepoint
79cccf5FIX: stop Live tab from showing stale scores when no comp is active
1b379e7FIX: /profile redirect preserves querystring + Skills-launch newsletter URL
56a4fbcTOOLING: Klaviyo DnD template font patcher
301e1d7TOOLING: add transactional email smoke-test script
79fccaeCHANGED: open athlete Skills tab to any signed-in viewer
4fe5312FIX: durable env-var cleaner + referral URL change in 3 Welcome emails
ab0d65aEMAIL: Roll out FullOut email design system across all customer touchpoints
491b24bADMIN: Daily Active Users chart + paginated Recent Users
47d3b7bCHANGED: open athlete Skills tab to any signed-in viewer
d7e295dDOCS: architecture map — single-page HTML view + agent-consumable JSON
051a937FIX: resolve promo code string for Klaviyo Subscription Created event
52d5c21FIX: trim Stripe env vars at the chokepoint to survive trailing whitespace
333b468MARKETING: Klaviyo Welcome flow rebuild — Account Created + Subscription Created events
6a72ffbPERF/SEC: Supabase egress reduction — bot blocking, image CDN, sitemap trim
cf7d8f5PERF/SECURITY: Supabase egress reduction — bot blocking, image CDN, sitemap trim
80898ccSKILLS: paid verification unlocks, Elite/Pro viewing gate, bundle pricing, partner attribution
097d146SCORECARDS: per-column min/max filters on expanded breakdown
1f99cb0SCORECARDS: per-column min/max filters on expanded breakdown
3f63874ANALYZE: refactor — shared helpers, split compare route, hub perf
1d51fcaANALYZE: refactor — shared helpers, split compare route, hub perf
f9bf928DEBUG: D2 scrape inspection scripts
377e85aDOCS: add John Knowles partnership drafts
5c0e6d3DOCS: reorganize LTC contract files under per-partner subdirectory
32270b8PARTNER: cookie attribution is first-touch (matches contract §4.4)
d321882PARTNER+LTC: one-step TIER_FLAT setup + Let's Talk Cheer contracts
4b5ab4cPARTNER: real 30-day attribution cookies (replaces localStorage)
330eeebBRAND: tighten brand page, drop lockup and symbol sections
a4dba1eBRAND: tighten brand page — drop lockup/symbol sections, add wordmark-on-backgrounds reference
6d2b7d5BRAND: public brand guidelines page at /brand with downloadable assets
bceb3b2ANALYZE: Smart Groups — filter-based, auto-updating watchlists
5123289ANALYZE: tabbed drill-downs for team, gym, and group
e23458fANALYZE: rebuild landing as structured hub (briefing + watchlists + tools)
be7faa4ANALYZE FIX: Pressure Splits crash when a round is missing
94aa32aANALYZE: Pressure / Clutch splits — finals vs prelims choke detection
42bc6ceANALYZE: division benchmarks in KPI widgets + Division Snapshot
69a3f98ANALYZE: server-side saved dashboards + Pro-to-Pro sharing
bf4359dANALYZE: elevate custom groups — active-group context + save-as-group
c76b721ANALYZE: Compare Gyms — side-by-side multi-gym analytics (Pro)
453d259ANALYZE: Edge Finder — Moneyball-style division gap analysis
653a2ebANALYZE: repair broken KPI math, deduction pie, and chart tooltips
4280d45SCORECARD: gate CSV export to PRO + clarify pricing label
43dc8ebSCORECARD: sort/filter every column, sub-sub-group, CSV export
b34af2cSCORECARD: sort/filter every column, sub-sub-group, CSV export of current view
6b400d0PROFILE: punctuation-tolerant gym/team search + remove Social Links from Highlights tab
93022fbFEED: new Global tab + author team/gym byline on every media post
4c7e9deDATA: backfill Worlds 2026 Prelims + Semi-Finals scores (was Finals-only)
56c07e9PRIVACY: 4-tier profile visibility (Only me / People I follow / FullOut users / Everyone)
b843885PROFILE: 4-tier privacy controls (Only me, People I follow, FullOut users, Everyone)
bdd54ceNAV: align expanded/collapsed sidebar shape; move Post button above Collapse
3bc5bdcNAV: add Post button to desktop sidebar
fcb3c02NAV: stop Profile from highlighting on My Stuff routes
a353f54NAV: fix bottom nav floating mid-screen in iOS PWA — portal to body + force composite layer
1a0ef5ePAYOUTS: escape apostrophe in Awaiting review description
9e8314eSCHEDULE: import 2026 D2 Summit performance order from Varsity PDF
a7655dfPARTNERS: lookup by email OR username in Add Partner form
4b07faaDEBUG: check out scripts from recent investigations
c383a41OG: refresh subtitle to lead with concrete benefits
775b632PAYOUTS: partner-requested payouts with admin queue, email + in-app alerts
b35b9b6BADGES: fix Elite tooltip label — was reading "Prep subscriber"
0005f53UI: cleaner division detail rows — drop medal emojis, surface gym name
c460c98UI: align mobile bottom-nav Post button with icon+label rhythm
9b9decfBADGES: refresh tier verification colors — Pro = brand pink, Elite = soft cyan
79fe001URLS: route person search results to /people/<username>, not opaque ID
c188cc7SKILLS+VERIFY: by-level visualization, click-to-add, pink hero, 20s video cap
3a89f32SUBSCRIBE+CANCEL+TRIAL: trial-end Klaviyo event, Resume button, banked months UI, cancellation banner
5828d4bPROMO: clearer admin form copy + Stripe coupon-mapping unit tests
69f6e5cFIX: don't bounce off /login when ?switch or ?add and useSession is stale
a0b234aCHORE: gitignore /og-previews/ — local design-review PNG dumps
dd309a6SUBSCRIBE+CANCEL: surface referrer profile + trial copy on subscribe; cancel at period end
29490e5ADJUST: bump OG card text sizes/weights + load real Inter font
c3776d5FIX: team KPI strip overlapping sidebar + truncating labels at lg
7aa4a70FIX: inline FullOut logo as base64 so OG entity routes actually find it
ec772c1FIX: bundle public/Logos with OG image routes via outputFileTracingIncludes
cf7fa16ADJUST: bigger FullOut logo + Build Your Legacy tagline + higher contrast on OG cards
02a54b5FIX: drop explicit openGraph.images so file-based OG cards take effect
45a4dc1ADD: branded opengraph-image cards for profiles, gyms, teams + brand fallback
0230b40ADD: opengraph-image.tsx for /build-your-legacy
47b0f05FIX: escape apostrophes in referral admin + card so prod build passes
8472f37SKILLS+VERIFY: rebuild skills system on USP rubric + ship FullOut Verified Phase 1+2
d557426AFFILIATE+REFERRAL: namespace campaign URLs, stackable referral months for everyone
bb98c0fFIX: desktop sidebar avatar disappearing in md-to-lg viewport range
547393fLEGAL: Children's Privacy Policy + COPPA-compliant signup with verifiable parental consent
2ada1fdLEGAL: Children's Privacy Policy + COPPA-compliant signup with verifiable parental consent
66f6428UI: tighten radii globally + fix mobile overflow on gym page and post action bar
84d7d74DATA: check in Worlds 2026 Finals scraper + importer (already run in prod)
4ff707cDATA: durable team-name dedupe — strip gym prefix on write + backfill
fd877f3OPS: temporarily disable SMS notifications while we investigate volume
140fc34FIX: feed shows latest round per team-comp, sorted by when score actually landed
241b67cUI: clear nav search on pathname change + widen team stats breakpoint to xl
26b1bf4DATA: durable Division-name dedupe — normalize on write + consolidate existing dupes
6872835UI: team page — clickable Level/Age/Size chips, drop medal emoji, score-signature dedupe
41847e3FIX: route scraped-score imports through alias-aware gym/team matchers
e97c6a7DATA: merge Spirit of Texas Houston into Spirit of Texas
94d74d4DATA: cleanup prefix-artifact team names in Woodlands Elite chain
68f7cb9UI: deterministic initials-avatar fallback when logo/photo missing
0550eb2UI: show gym + round on feed performance cards
4016b7fUI: smarter discover-page ranking — follow-boost, starts-with, quality tiebreakers
3a5a6dfUI: tighten feed card radius; fix avatar fallback for non-letter usernames
33c1874UI: smarter search — follow-boost, follows-on-focus, substring highlight
f5b8b38UI: hide stray feed-tabs scrollbar; unify feed card style across breakpoints
93707c4UI: show rank in performance trends tooltips (gym + team pages)
3d258c5UI: surface division + placement on /home performance cards, link to division group page
f85db28DEBUG: add paid-tier audit script
3bf4de9FIX: resumable + hash-skipped imports so live events update fast
cfad39fUI: cleanup competition page — collapsibles, rank numbers, Insights tab
88feb02UI: align navbar bottom border with page content shell
a4b4194FIX: admin tier changes ignored until user re-logs in
269298bFIX: live-scores feed showing stale rows as "1m ago"
7d52e26FIX: move iOS-zoom @media block out of @layer base
1eac475UI: add "My Teams & Gyms" panel to competition page
e047bf5FIX: iOS Safari auto-zooming on input focus
97f3f35FIX: team cards on /discover missing logo when gym only has photoUrl
70a2957FIX: competition page showing Prelims when Finals have scored
7744c8bFIX: Varsity scraper dropping Finals for divisions with Prelims
ca9a488FIX: Varsity scraper was dropping Finals for divisions that also had Prelims
3ba94afFIX: canonicalize Division.level at the write layer (Youth Summit 2026)
1d46473FIX: live-monitor now harvests SCRAPE_COMPLETE jobs (admin-sync race)
db7186cLIVE: tighten live-monitor cadence to 10 min (was 45 min)
8d2d622LIVE: tighten live-monitor cadence to 10 min (was 45 min)
b90cad9DOCS: consolidate brand positioning across overview + brand guide
9fc394bFIX: guard against session.user.id=undefined in dashboard layout
918dc1cDATA: strip "TBD" prefix from competition names at all ingest + display paths
07b7440DATA: audit + merge 19 duplicate gyms created by STUNT import
1b92bdcUI: consolidate /search + /explore + /discover into single search page
6982286PCL: add International Cheer + NBA disciplines, link national teams
a5e86bbPCL: backfill gym/team logos and create missing program stubs
ba5f1e6PCL: link athlete experiences to real gym/team IDs
d5a888cUI: add /gyms/[id]/athletes + /teams/[id]/athletes roster pages
99c533dUI: render discipline badges across search, team listings, gym rosters, and athlete profiles
465d760PERF: speed up schedule filters by removing nested Division where-clauses
d4c792eSTUNT: import Youth Summit 2026 schedule (551 performances)
e7d8a61STUNT: import 849 PSAL HS matches with point scores (2015-2026)
d4a775cUI: fix unreadable gym popup on /gyms map
bdefa9fSTUNT: import 5 historical club championship finals (2022-2024)
35ebc72PROFILE: build Chris Muniz athlete/coach profile + career history
e1885a6STUNT: import 2025 Youth Club Nationals brackets (22 matches)
6887486STUNT: webpoint Gym team-coverage diagnostic
ad0f224STUNT: ingest entire 545-program webpoint directory + 188 logos
57060fcSTUNT: import 42 more teams from webpoint via interactive browser
7df2b58STUNT: import 51 non-college teams from stuntthesport.org
c8aea21STUNT: webpoint scraper using persistent Chromium profile
41bc870PDF extractor: NCA cheer-21 + flex-no-toss templates, max-value validation
c98f75fSTUNT discipline launch — full hub, ~2k match results, scoring + standings
48e7d26STUNT discipline launch: hub, ~2k matches, scoring + standings
4c8e728Pricing page: align features with actual tier gates, add audit skill
b565778Cross-surface polish: consistent heading styles, profile max-width
0e2c884Athlete profile: PDF export, empty states, motion, perf, a11y
3520fa1Athlete profile: KPIs in header, remove profile type badges, auto-derive discipline
648577cAthlete profile: add See Less toggle on results, taller timeline with uncropped tooltips
a0a1a1dAdd season-based athlete filtering and confirmation system
439ba4aDivision page: remove confusing charts, add analyze button, clean up line chart
ca0c8faCompetition page: Pro tier division modal, wins filter on gym map
00a9ecbCompetition page: admin tier override, division limit, glass upgrade modal
419da28Design overhaul: Teams + Gyms pages, design system foundation, tier gating
8a94d2ePerf: faster builds and page loads — force-dynamic, parallel queries, lazy charts
d0dd2a9Add force-dynamic to search page to prevent static generation DB timeouts
3b589ccMove sidebar collapse toggle above logout divider for clarity
e8afdabUpdate hero background image to Group 198
151d438Fix mobile sticky CTA: hide near final CTA, cap button width
2b3e467Add bottom padding to final CTA so it clears sticky mobile bar
a2c3030Hero headline: single line, all white, lighter weight
7d4bca1Add maintenance toolkit, growth docs, search avatars + gitignore cleanup
2c4b724Dedupe 130 gyms + 317 teams + fix Cheer Athletics city data
a51cf41Make FullOut logo larger, shrink Build Your Legacy to match width
321571dRedesign landing page: dark mode, broader positioning, team preview
4515cd2Group nav into My Stuff / Explore / More collapsibles
3332157Fix PDF extractor + UI polish + dedupe R1/R2 scores
3fbd9d1Dedupe 622 more same-gym prefix-artifact Team rows
50eccdaDedupe 419 duplicate Team rows + prevent recurrence
bb07f42Dedupe 419 duplicate Team rows + prevent recurrence
b98ab8dDedupe 419 duplicate Team rows + prevent recurrence
321d1edAdd onboarding routes and harden team import safety
6b07bb5Fix gym season filtering and franchise team resolution
888a2bfFix schedule import: strict gym matching + franchise-aware team lookup
1786835Match desktop sidebar to mobile drawer (parity nav)
1df74c1Add My People and News to mobile drawer nav
3b6bd0bFix empty mobile drawer: rich Twitter/X-style personal hub
ca567d5Nav redesign: mobile header + 4-tab bottom bar + audience-aware /my
d1b2c93Allow logged-in users to view landing page at /
2b94705Fix schedule display: Summit routine codes + /schedules dedupe
d2a8260Fix Stingray Allstars franchise mapping: split 291-team HQ into 15 locations
2f5e25dFix Vercel build: add missing src/components/growth/ directory
95df868Import The Cheerleading Worlds (2004-2025) + 2026 schedule + franchise remap
ac0d26eC:/Program Files/Git/home Instagram redesign + /scores cleanup + perf pass
b3ec2f1Schedule filters + grouping: dynamic Division + Discipline
ae17f3ePhase 3e: Elite 14-day trial + invite friends + Klaviyo events + brand polish
7773c7bTrack college cheer + dance: NCA Collegiate 2026 setup
23374eaUpdate hero search helper copy on landing page
103ed48Content queue: swap Buffer schedule for in-app post flow
8d18cd2Phase 3c + 3d: Kill ambient upgrade nags + Pro tier /go-pro showcase
3357d19Phase 2: Restructure core logged-in experience
b78c893Content factory: add athlete, rankings, gym generators + LLM captions
4dbd262Phase 3a + 3b: Expand /welcome to 6 steps with pain setup, friends finder, soft paywall
bd65a2aPhase 1: Content lock + Athletes tab + upgrade audit + docs realign
76e8a97Link profile mockup and feature cards to /build-your-legacy, use pink logo
24ca775Add showcase pages, viral loop, and search conversion funnel
96b40eeAdd sitemap, robots, and per-route metadata for SEO
e8e3484Optimize hub data queries: batch N+1, cache, remove nested relation filters
03164beAdd landing-focused SEO metadata to root route
608b246Add profile-focused landing page for logged-out visitors
67a4f79Overlap profile avatar on cover photo like Twitter/X
87f01c4Fix mobile overflow on competition cards by adding min-w-0
31f8dd1Improve weekend preview card and add job numbers to content queue
49d3659Increase content card font sizes to match scorecard generator minimums
c6459c3Fix Vercel build: move serverExternalPackages and outputFileTracingIncludes under experimental
4975dc5Add uniform brand icons to gyms listing page
f1b6784Add collapsible "More" section to sidebar nav for Leaderboards and Analyze
2a0cfe4Fix satori module not found on Vercel by using direct ES imports
572ba6bRemove broken "From the Cheer Community" Instagram gallery from hub
0a634ccEnforce minimum font sizes on social media content cards for mobile legibility
fa721a3Add calendar preview, upgrade CTA, feed rename, switch account, and mobile nav polish
9ebe5efAdd upgrade-to-Pro CTA in sidebar for free-tier users
4606bc2Redesign nav and competitions page: add My Feed, rename Schedules to Competitions
ff457e4Make Recent Top Scores cards clickable and hide scoreless competitions from Last Week
6490a52Improve hub home page: news layout, scores, podcasts, social ordering
d512e86Fix build: remove unused @ts-expect-error directives in image-renderer
7df1fa3Simplify people page: replace filter sidebar with search box and grid/list toggle
f6f6ed2Add missing scores tab components that broke the build
8b15726Add PCL team detail pages with season stats and news coverage
0e7ecc7Lazy-load scores tabs, auto-poll on empty feed, add Vercel ignoreCommand
bdee7b1Add setup scripts for hub content management
5b6843bAdd content blocks CMS, YouTube support, podcast fetch
62d47c8Hub v2: visual overhaul, admin feed management, IG scraper, content blocks
ebcb4daAdd IG profile pics via unavatar.io + improve leaderboard display
bad2183Fix CSP for RSS images + hydration mismatch on date
6c08696Fix hub 500: remove onClick handler from server component
7580e14Fix hub 500: wrap ALL data fetches including getHubConfig in catch
f645e4eFix hub 500: wrap all data fetches in safe catch handlers
42af3edFix home page 500: remove invalid discFilter from competition query
2b2a5d0Visual overhaul: sharper corners, richer hub with images and scores
8b4cf65Transform home page into content hub + simplify navigation
41ef07fIncrease scraper timeouts and limit concurrent scrapes
5371aabFix live monitor timeout: switch to fire-and-forget scrape with async harvest
b58a14cFix score notifications not firing: add notifiedAt tracking to prevent silent skips
62fdb9cFix mobile bottom nav floating mid-screen in WebView browsers
ff76906Remove temporary VAPID debug endpoint
b1b31d3Debug: add push send test to VAPID endpoint
3661710Add temporary VAPID debug endpoint
1f7069dAdd try/catch around push sends in score notifications
545307bFix reminder engine: prevent duplicates and catch push errors
602046eAuto-resync push subscription with server on page load
22b38e1Auto-enable reminders when saving a schedule
38437d4Fix push notification subscription pruning: only delete on 404/410
275ca9eImprove schedule filter performance: debounce search input
1961282Add schedule PDFs to public/uploads for download links
45c1521Fix announcement image font: use satori + resvg for proper Bebas Neue rendering
b437d6aAdd schedule PDF links to competition pages and generic schedule importer
6d6caffMove analytics section above social copy templates on partner dashboard
cc805deWiden partner dashboard to max-w-5xl and add social copy templates
e8964deFix delete button being clipped by overflow-hidden on profile content cards
d9ea0b6Add value prop, 30-second pitch, and social copy templates to partner dashboard
7682f93Fix mobile video decode errors by limiting resolution and deferring preload
dbd5802Add partner exclusive offers: free trial on monthly, discount on annual
c6eec9aShow partner referral banner on subscribe page when arriving via partner link
507915bAdd admin partner dashboard preview and edit settings dialog
d2618a2Organize admin dashboard into labeled sections alphabetized by title
81a30b9Add partner referral system with analytics, campaigns, payouts, and OG tags
26a548bAdd partner referral system, video description editing, and settings updates
6076a1fRemove skills, badges, timeline, and experience from home feed to reduce spam
c36a433Add debug logging to Resend email sending for password reset troubleshooting
6535bfbFix broken profile pics on admin users page by using Avatar component
bcd166fFix mobile timeline: add proper vertical timeline with chronological skills
740d109Fix team selection UX in Add Experience dialog
c766748Fix gym and team search in Add Experience dialog
b9a08ebAdd username column, profile pic, profile links, and username search to User Management
1ec2976Fix build: remove reference to non-existent partnerConversion model
730ead9Remove highlights from explore page search results
4132157Add admin ability to delete user accounts from User Management
8b73902Fix ESLint build error: remove reference to unconfigured rule
7858067Add density map page with geocoded gym locations
2b371bbFix hydration mismatch in FollowButton SVG icons
3da00c5Add post dialog, compose page, density map link, and misc improvements
6a6fed1Fix following count: show all follows, not just people
7a9b7e4Add cover photo API route and 3:1 banner aspect ratio
1cdd3a3Include cover photo component with canEdit/personId props
d9b68c0Fix follow system: correct following count and unique constraint
aacb31cFix live monitor stalling: auto-reclaim stuck scrape jobs
b41d284Constrain home feed to 600px max width on desktop
8e3ca4bFix username casing: preserve original case on profile update
a3a6344Fix cover photo: use 3:1 Twitter ratio and stop using profile pic
cd2aa33Add auto follow-back from @FullOut to new users on registration
d8458a0Fix missing slug fields in division scorecard serialization
50d5a77Add caption display to post permalink page
d1c6155Add color-coded category groups to scorecard headers
fe9911eAdd share scorecard feature for Elite+ users
0b128bbImprove video upload error handling for Mux asset limits
d167ed5Add update mode option to import pipeline
8e63de2Add gym history tracking and alias-based matching
20dbd2cAdd score notifications for saved schedule teams
a6fa0c4Fix home feed post: show photo preview in caption step and use upchunk for video
79e3d10Add "This Week" section to schedules and remove inconsistent discipline badge
a83a2e1Remove deleted items from feed instantly without refresh
078f877Add delete button for owned photos/videos in home feed
59e203fFix video in feed navigating to post page instead of playing inline
a034766Fix video upload: add Mux domains to Content-Security-Policy
60e660dShow uploads instantly (optimistic UI) and fix iPhone PWA video uploads
f52654fFix @mention crash in captions and improve iPhone PWA video upload reliability
c30f5b8Fix video upload CORS for iPhone/iPad and add step diagnostics
fde68e4Fix iPhone video upload failure and improve upload UX
65732beFix PDF scorecard links blocked by popup blocker
c8a670cRemove temporary debug step tracking from upload error toasts
989b66dReplace XHR video upload with Mux chunked uploader for mobile Safari
c0839a6Add step-by-step debug info to upload error toasts for iPad diagnosis
f8af4f1Convert HEIC to JPEG client-side before upload to fix iPad Safari failures
b65a4dcAdd HEIC support and extension fallback to all image upload endpoints
6630f27Fix server-side photo upload rejecting iPad files with empty MIME type
ef41cc8Fix iPad Safari upload failures ("string did not match expected pattern")
eb2d784Optimize page loads: lazy team search, HEIC uploads, mobile crop dialog, hydration fixes
26c958fFix dance teams in feed 404 and video upload rejection for HEVC codecs
21a629dReplace Google Drive scorecard upload with direct browser download
11de730Fix semifinals being treated as finals across the codebase
f15a908Hide legacy "Prep" tier label from sidebar for free users
1d8ed2eAdd data quality infrastructure: quality score, All Star filter, PDF completeness loop
4902225Add inline caption editing for photos and videos in feed
e99f724Add followers/following list dialogs to profile page
551e05aUnify feed to single column, add delete button to post page
4689969Add profile tab navigation and highlights feature
bf9290aFix home feed missing media, add content delete buttons, clarify cover photo
0eb5dadSimplify cover photo, unified upload, captions & @-mention tagging (Phase 7)
48053b6Add feed upload tabs, profile content section, and collapsible sections (Phase 6)
c32c14cFix video manager admin bypass and tier config fallback
250e1d8Add photo/video media to follower feed (Phase 5)
9431468Fix clean-data loop stage escalation and robust duplicate team merging
6fcb4f3Add permalinks, upload gate, share/report buttons, admin media review (Phase 4)
2ea4fb9Add video upload UI and profile gallery (Phase 3)
36abf7fAdd Mux video upload API and webhook handler (Phase 2)
c1c2ab6Add direct media upload foundation (Phase 1)
79a28e2Fix Results module showing all rounds instead of only finals
fb39368Fix Results module showing all rounds instead of only finals
998ea8aFix division results showing duplicate teams for non-standard round labels
ef4f7bfFix division results showing duplicate teams for non-standard round labels
359140aFix round value case mismatch — DB uses "Finals" not "FINALS"
9595090Fix scrape-job-processor build error and commit pending changes
3e99520Fix null safety in scratch files to unblock build
8c1f67eFix NCA badge to count all series wins + add series page season filter and analytics
3b6fdbeAdd Competition Series to Explore page search results
11dada9Add section headers to search dropdown and tab navigation to search page
a042f0eFix notification click not navigating on iOS PWA
a21aa88Add Source PDF link to schedule page header
f0b7ac9Move stage before competition name in notifications
41c8040Add stage name to end of performance notifications
cbecb74Add @types/pdf-parse to fix build error
ccf9aaaExclude root scratch files from TypeScript build
f359b9fSurface actual push subscription error messages to the user
536db2fAdd push subscribe error feedback and better error logging
9ab65d4Improve push permission denied message with platform-specific reset instructions
7e6def7Fix gym name contamination and improve generic team name validation
af01386Add explicit Enable Push button to notification settings
924acf7Fix iOS push detection: check actual PushManager support instead of blanket-blocking iOS
e0e9f8dFix silent push notification failures: validate subscriptions, fix counting, add logging
9b57187Fix SSR crash: wrap useIsIOSPWA in useEffect to avoid window/navigator on server
8201e29Refactor PWA notifications: iOS detection, reorganize alerts page, improve notification URLs
592e0a1Fix PDF print: constrain column widths, allow text wrapping
3a0170bFix saved schedules not appearing until manual reload
d13b469Replace SMS notification settings with "Coming Soon" label
19623f3Fix push notifications not sent: trigger push subscription on bell toggle
65ef8dfAdd color-coded column groups to PDF export matching website
0ecc01cMove filter sidebar toggle below folder toggle, remove from card header
4eb9a56Add toggle to hide/show the scorecard filter sidebar
6e4b7d3Move grouping, sorting, and display controls into collapsible sidebar
2377d8dFix PDF export: wrap score column headers and use landscape layout
0ab8476Show Scorecards link on all analyze modes, apply layout tweaks
14fe798Fix rescrape: disable bulk scrape when RESCRAPE_ENABLED to prevent month contention
1701763Add PDF scoresheets feature to PRO tier on pricing page
8b28c66Fix Railway crash: validate Supabase URL before creating client
be36db9Fix backfill script: correct Varsity API parsing and round stripping
62ab36aFix broken search: invalid regex character range in REGEXP_REPLACE
687dfe4Add PDF scoresheet storage & PRO-tier access
10aca34Fix scorecard column header text color and improve level parsing in import scripts
2f9cc43Add Scorecards button to gym dashboard, move filters into scorecard panel
5bef286Convert Whole Gym page from tabs to single scrollable page
fe5ccb7Move Scorecards to top-level navigation, remove from Whole Gym tabs
d97415bPass gymSlug and username to GymDashboard in analyze page
17afcfcAdd rt_drivers and st_drivers aliases to score mapper for DOD fields
e2a3ffeAdd standalone scorecards page with saved scorecards & folders
270e170Fix gym scorecard header rendering and readability
ce94d9dImprove scraper pipeline: gym name splitting, level parsing regex, program filter sweep, and normalized competition search
e9e52f8Handle status poll timeouts gracefully in scrape job processor
686daaaAdd data quality overhaul: validation framework, rescrape orchestrator, and auto-changelog
da46cffScraper & import pipeline improvements, schedule review system
3950f3fAdmin feedback system, notifications, and map improvements
0e5b61eCompetition schedules feature with PDF import and mobile optimization
5bb93faGroups dashboard redesign and multi-day competition date fixes
de77096Account switcher, email verification, and UI enhancements
bba9135Prisma relation naming fixes and type safety improvements
6304b2cBlog system, username search, and profile enhancements
4d51bbdProfile photo upgrades and explore polish
0afef81Major Feature Expansion - Monetization, Exports, Glossary
8949a30Initial Release - Analytics Dashboard
695a050This changelog follows the format inspired by Keep a Changelog. All notable changes to FullOut are documented here.
Each release includes the version number, release date with timezone, git commit hash, and a detailed summary of all changes organized by type.