Unreleased
In progressv3.0.0
30 Aug 2026Site revamp: rebuilt layout, a new homepage hero, an updates/changelog page, a docs knowledge base, and richer onboarding.
Added
- New homepage hero: compact grid-textured section, single-row CTAs, a non-interactive live map preview card linking down to the Tournament Explorer (#152).
- Nav and footer rebuilt structurally after Pepiros's SiteHeader/SiteFooter: theme-aware sticky nav (brand | links | utilities), Docs and About as hover/click dropdowns, Log In/Sign Up for signed-out visitors, a four-column footer with a brand+CTA block (#151).
- Homepage marketing sections after the Tournament Explorer: a "Why TourneyRadar" band, a feature card grid, and a closing CTA band (#153).
/updates: parses the realCHANGELOG.mdinto release cards, plus a "what's new" popup that nudges returning visitors once per new version (#154)./docs: a knowledge base with maintainer-written guides (FIDE registration, how TR helps you register, finding a tournament near you, how TR's data works, wishlist + digest, for organizers, understanding FIDE ratings) and player-contributed docs, capped at 2 published per player per week, enforced at the database level (#155).- Onboarding: a new first step capturing self-reported role, referral source, and intended use, ahead of the existing location/categories/digest steps (#156).
- ICS calendar export on tournament detail pages (#20).
- Playwright E2E test harness + CI workflow (#17).
- Shared
queryTournaments()helper with real pagination (Previous/Next, page counts) and server-driven search on the tournaments page (#56). - Accessibility:
aria-labels andaria-liveresult counts on both search boxes (#61). - PostHog analytics via a reverse proxy (
/ingest) to dodge adblockers, with identify/reset wired to Supabase auth state changes so sessions don't bleed across users on shared devices. supabase/migrations/: first tracked migration, addingcurrent_player_id()and RLS policies forplayers(#54). Nothing in the schema was version-controlled before this.- CI: secret-scan step fails the build on a committed Supabase project URL or JWT.
- CI:
tsc --noEmittypecheck step, previously only caught by the Vercel preview build and not run at all on Dependabot PRs. - README contributors section: auto-updating avatar grid from the GitHub contributors graph, replacing nothing (there was no prior list).
- Animated demo GIF referenced in the README.
- Account icon in the nav (desktop top-right, mobile drawer bottom) linking to the wishlist when a player is signed in; hero "Sign up, it's Free!" CTA hides once they're signed in.
- Dedicated
/feedbackpage (centered card, star rating, GitHub-star nudge on thanks) replacing the inline corner-popup form; the popup is now a teaser that routes there, and the footer gets a permanent Feedback link. Both fire afeedback_button_clickevent (Umami + PostHog) tagged by source. - In-app
/api-docspage documenting the publictourneyradar-api(/v1/*) endpoints, quick-start code samples (JS/curl/Python), and response shapes, linked from nav, mobile drawer, and footer.
Fixed
/api/tournamentslimitparam clamped to[1, 200]instead of silently accepting NaN, negative, or huge values; tournaments page no longer fetches all rows unbounded (#56)./api/tournaments: badlimit/pagevalues now rejected with 400 instead of silently falling back to defaults. Home page map no longer silently drops markers past row 1000 (a bare.limit(1000)against a 1600+ row dataset); replaced with a paginated fetch that walks the full result set (#56)./api/wishlist: GET/POST/DELETE trusted a client-suppliedplayer_id, letting any caller read, add to, or delete another player's wishlist; now resolved from the authenticated session, with a 401 for anonymous callers (#54).- Four pages built their own inline Supabase client with a committed project URL and anon key as a fallback; all now import the shared client, which throws on missing env vars instead of silently using the baked-in credential. The exposed anon key still needs rotating in the Supabase dashboard (#52).
- Home page's live search-result announcement only ever reported pagination state; now leads with the match count and echoes the search term, with distinct phrasing for zero results (#61).
- Scraper: Europe region split into europe-west/europe-east; merge job now resilient to partial matrix failures.
- Scraper failures now logged to
scraper_logsinstead of being silently swallowed. - Mobile nav drawer duplication and hamburger icon stroke color (#25).
AuthContext.tsxconsole.error scope corrected; stray console.log removed fromlib/geocoding.ts.- Supabase client lazy-initialized in the cron route (was breaking the Vercel build).
- E2E CI: Supabase env vars/secrets passed properly instead of hardcoded in the workflow.
prize_distribution/schedulefields properly typed, replacingany.
Changed
- Nav account icon is now a small dropdown (Wishlist, Sign out) instead of a bare link straight to the wishlist.
- Homepage nav and hero rebuilt: slim fixed nav, 3-mode theme toggle, signup CTA in place of the old login link, and a rebuilt mobile view (nav drawer, tournament table, drawer CTA).
- CI: e2e skipped on Dependabot PRs, which don't have access to the required secrets.
- Routine dependency bumps (Next.js, React, React DOM, TanStack Query, ESLint config, Playwright, Firebase, @next/third-parties, @supabase/supabase-js, Tailwind PostCSS).
- README Next.js badge bumped to 16.
v2.0.0
12 May 2026Public relaunch: OSS governance, a working scraper pipeline, and a cleaned-up README/API reference.
Added
- GitHub Actions scraper cron, running every 6 hours.
- Weekly and monthly analytics.
- Full OSS governance setup: LICENSE, CONTRIBUTING, CI/CD workflows, issue/PR templates.
Fixed
- Scraper parallelized into 4 regional matrix jobs to fix a 30-minute job timeout.
- Scraper scope reduced and moved to a weekly schedule after cron debugging.
- Restored 140 federation codes, capped scraping at 20 tournaments per country.
- Chart x-axis labels readable across all date ranges.
Changed
- README and CONTRIBUTING rewritten; API reference and demo GIF placeholder added.