Changelog

The same list that signed-in hosts see under "What's New" in the host dashboard — a chronological record of every feature, improvement, and fix.

June 22, 20262026.06.22

  • NewSpoken announcer — the clock can now call the room out loud: "Shuffle up and deal" at the start, the new blinds at each level, when play pauses and resumes, the start of a break, "take your seats, cards are back in the air" when a break ends, and a heads-up to color up chips. Turn it on alongside the sound alerts. It uses a recorded announcer voice and now works on iPad and iPhone, where the browser's built-in speech was previously silent.
  • ImprovedAnnouncements no longer double up — with the host screen and the TV clock open in the same browser, each level change is announced once instead of two voices talking over each other.
  • FixedRecording a minigame result is now safe to tap twice — a double-tap or a flaky connection can no longer log the same minigame win as two separate results.

June 10, 20262026.06.10

  • New"You've been moved" alert on the player companion — when table balancing reseats you, a one-time banner shows your new table and seat (e.g. "Now at Table 2 · Seat 5"), then fades on its own. No more wondering where to go after a break.
  • FixedMoving a player into a seat held by another active player no longer drops the player who was sitting there — in some cases the displaced live player's seat assignment could silently disappear instead of swapping. They now swap seats correctly.
  • FixedPayouts can no longer exceed the prize pool when a structure mixes fixed dollar amounts with percentages — e.g. $60 to 1st plus 50% to 2nd on a $100 pool. The percentage share is now capped at whatever the pool has left after the fixed amounts, so the payouts always reconcile to the pool.
  • FixedThe clock now auto-advances correctly even after you step back to an earlier level — previously, using Prev Level (or jumping to a lower level) could silently disable auto-advance, leaving the timer sitting at 0:00 until you advanced by hand.
  • FixedThe "outside the season window" warning no longer misfires for evening tournaments — it was reading the game's date in UTC, which rolled a 7pm game to the next calendar day and falsely flagged games played on the season's last night.
  • FixedCreating or cloning a tournament is now all-or-nothing — a hiccup mid-create can no longer leave a half-made session with no clock that shows in your list but can't be run.
  • FixedAccepting, declining, or revoking player-submitted requests (knockouts, rebuys, minigames) now requires the matching host/co-host permission — a player-role member or a co-host without that permission can no longer resolve them.
  • ImprovedPages and API calls you don't have access to now return a clean "not authorized" / "sign in" response instead of a generic server error.

June 9, 20262026.06.09

  • NewSeasons — group a run of tournaments into a league season and track a points standings across all of them. Create a season with an optional start/end date, then assign tournaments to it when you create or clone them (or link existing ones). The Seasons page shows the full standings — games played, points, best finish, and average — and you can delete a season when it's done.
  • NewPick a season at tournament creation — the new-tournament wizard has a season selector, so each night's game lands in the right league standings from the start. Cloning (rehosting) carries the season forward too.
  • NewSeason standings filter on the leaderboard — narrow the org leaderboard to a single season instead of all-time, so league nights and one-off games don't blur together.
  • NewSeason tab on the player companion — when a tournament is part of a season, players see the live season standings (and their place in it) right alongside the clock and feed.
  • NewHand-for-Hand mode — near the bubble, tap Hand-for-Hand to freeze the level timer so the blinds can't go up while tables finish their hands in lockstep. It shows as a clear badge on the host screen, the TV clock, Present mode, and every player's companion, and resumes the countdown cleanly when you turn it off.
  • ImprovedSoft "outside the season window" flag — if you link a tournament that was played before or after the season's date range, the Seasons page marks it so you can catch a mis-linked game, without ever hard-blocking the link.

May 22, 20262026.05.22b

  • NewPayout schedule auto-pilot — saved schedules from Settings now apply themselves on /sessions/new when Expected Players matches a row (no more clicking Apply), and the session keeps re-evaluating live as players actually pay in. If 8 was expected but 12 show up, the session's payout structure automatically shifts to the 12-player row. Matching is exact-first, then falls back to the highest row ≤ paid count.
  • NewCustom payouts are dollar amounts, not percentages — on the new-tournament wizard and setup template editor, Custom mode now takes $ inputs and shows a dollar total instead of a 100% sum constraint. Top 3 / Top 5 presets keep their percentage semantics (they're proportional by design).
  • FixedDoor Mode "Outstanding" label no longer truncates to "OUTSTANDI" on phone viewports — renamed to "Owed" so it fits the 5-column stat rail at 390px.
  • FixedPlayers page PIN icon buttons bumped from 22×22 to 36×36 to clear the 32px touch-target floor (10 instances per roster — now reliably tappable on phones).
  • FixedSchedule-driven payouts ($ amounts) now display correctly on the Present screen — was rendering "0%" because the consumer only read percentage and ignored amount.

May 22, 20262026.05.22

  • NewManual prize pool — set a fixed prize pool when creating a tournament instead of having ChipClock auto-calculate from buy-ins. Useful for sponsored events, freerolls with fixed payouts, or when the pool is set by the venue. Now editable after creation too (not just at setup).
  • NewSaved payout schedules — admins configure named payout schedules in Settings (e.g. "6 players → $300 pool: 1st $180 / 2nd $90 / 3rd $30"). When creating a new tournament with a matching expected player count, the schedule appears as a one-click dropdown to apply prize pool + payouts together.
  • NewWinner banner on the Clock pane — when one player remains, the running clock view shows a celebratory banner with the winner's name and a one-tap End Tournament CTA. No more hunting for the action when the heads-up bust happens.
  • NewExpected Tables field on new tournament setup — sits next to Expected Players in Step 1. With seat-on-pay enabled, players now spread evenly across the planned tables from the start instead of filling table 1 first.
  • NewRename tables inline from the Run screen — tap any table name on the Tables view to rename it. Empty value reverts to "Table N". Changes broadcast to player companions and the TV clock.
  • NewEliminate (bust) + Undo elimination in the player ⋯ menu — Android swipe gestures aren't always reliable (touch-action conflicts with diagonal scroll detection), so the busting flow now also lives in the menu on every device.
  • ImprovedPlayer menu rebuilt as a portal-rendered popover — was previously trapped inside SwipeRow's overflow:hidden container and getting clipped to a 0-height strip on phones. Survives any overflow / transform ancestor now.
  • ImprovedBigger tap targets on per-table seat buttons (now 40px minimum with active-state feedback) — reliably tappable on phones for opening the move-player sheet.
  • ImprovedPlaying / out counter above the phone players list — shows live count of active vs busted players so eliminations register visibly, not just via a toast.
  • ImprovedTournament status changes (end, cancel, pause, resume) now broadcast in real time to other tabs and devices — TV clock, present mode, and co-host phones no longer wait for the 5-second polling tick to catch up.
  • ImprovedPayouts now allocate using largest-remainder math so the sum always equals the prize pool. Three positions at 33.33% from $100 used to total $99.99 — now totals $100 exactly with one position picking up the extra cent.
  • ImprovedFloor view's table display no longer double-seats players when a roster row has multiple elimination records — replaced the LEFT JOIN with an EXISTS subquery for stable dedup.
  • FixedSaved payout schedules in Settings + the new-tournament wizard now actually load. JSONB columns come back as strings from the database pooler; the page was trying to access them as parsed objects and silently getting undefined.
  • FixedAmount-based payout schedules now display the right dollar amounts in the player companion clock, the player Deal calculator, and the host Tools Deal view. Was showing $0 across all positions because the consumers only read percentage.
  • FixedTournament results entry page now correctly uses the manual prize pool when set — was silently falling back to the auto-calculated pool, producing wrong pre-filled payouts.
  • FixedSeat-on-pay no longer 500s under concurrent door-table check-ins. Two paid check-ins reading the same snapshot could pick the same seat; the second INSERT now retries with a fresh snapshot up to five times.
  • FixedMoving a player into a seat held by an eliminated player no longer fails with "Failed to assign tables". The transactional 3-way swap cleans up stale assignments or rotates the live occupant via a temp seat to dodge the unique index.
  • FixedSigning out of a tournament page now lands you on the homepage instead of a 404. The POST→GET redirect now uses 303 status so the browser follows it with a GET.
  • FixedPlayers no longer appear at two seats on the table oval — the array-index fallback was masking sparse seat data and rendering each player twice.
  • FixedEnding a tournament redirects to the results page instead of a 404 — the old library route never existed.
  • FixedCheck-in UPSERT now creates the check-in record when first marking a player as paid — was previously a no-op UPDATE that silently dropped the payment status.
  • FixedUndo elimination button now actually calls undoEliminate instead of re-checking the player in (which lost their elimination position).

May 1, 20262026.05.01

  • NewCo-hosts on live tournaments — Tools drawer has a new Co-hosts section. Add an existing org member with one tap, or generate a 30-minute QR code that hands the running tournament off to anyone (signs them in or up, scopes them to this game only). Pro tier supports up to 5 co-hosts per session, league tier is unlimited. Built for the real case: host gets eliminated, hands the iPad to a friend, walks out the door.
  • NewSend co-host invite to a checked-in player's phone — pick from the list of checked-in players in the Co-hosts section and tap Send. The invite arrives as an emerald banner on their /live/[id] companion (no QR, no copying URLs). One tap on their phone signs them in or signs them up, and they land on the host view.
  • NewHand-off audit trail — manager_added / manager_removed events show up in the live timeline and end-of-tournament recap, so it's clear who took over and when.
  • ImprovedPrev / Next level buttons on the host clock are now gated by a confirm dialog showing the target level — no more accidental skips when you brush the screen mid-walk. Prev disables at level 1, Next disables on the last level.
  • ImprovedRevoke an accepted minigame is now confirmed — destructive action no longer fires on a single tap.
  • ImprovedNew-tournament setup form: expected-players input got its own labeled row with a wider field, blind structure inputs (SB / BB / Ante / Min) bumped to a readable size on mobile, payout-percentage inputs likewise. Double-digit values fit cleanly on Samsung Android portrait.
  • ImprovedLogin page now honors a `?next=` parameter (relative paths only) so the co-host hand-off round-trip lands you back on the right page after sign-in.
  • FixedTools drawer trigger button on the host desktop layout no longer floats on top of the Cash strip's Add-ons cell — it's part of the row now.
  • FixedPer-session minigame photo cap (50 / session) was silently never enforced — the cap query was checking the wrong JSONB key. Now correctly counts uploads against the limit.
  • FixedTV clock and host phone Clock tab don't crowd the timer against header chrome on narrow Samsung-Android-portrait viewports anymore.

April 18, 20262026.04.18

  • NewRedesigned host UI — the admin is rebuilt from scratch around a Linear-inspired aesthetic: dense but calm, monochrome with a single emerald accent, status pills, slide-overs instead of modals. Feels like a serious live-ops tool instead of a collection of tabs.
  • NewNew Today landing page — first thing you see is a big Jump-in card when a tournament is running (with pulse + elapsed time), a stat rail of live/player/completed counts, and your five most recent tournaments. No session? Quick-start and From-template buttons are one click away.
  • NewNew Run screen — one URL per live session (/org/{slug}/run/{id}) with three panes: Clock, Floor (players + tables visual + request queue), and a Tools drawer. Desktop gets the full 3-pane layout; phone gets a bottom tab bar optimized for walking around with the session in your pocket.
  • NewDoor Mode — tap Door Mode from Run or Tools for a fullscreen check-in view. Big tap targets, live cash strip (collected / expected / outstanding), and a walk-up add sheet with name + optional PIN + payment method (Cash / Card / Venmo / Pay later).
  • NewPresent Mode (iPad-dock) — a new auth'd presentation mode at /run/{id}/present. Broadcast-scale clock with stat rail and payouts, and a tap-to-wake host controls overlay (pause/resume/next/prev). Wake-locked so it stays on during play.
  • NewRebuilt TV clock at /clock/{id} — Apple-Sports-style broadcast layout with a 12-column grid, huge tabular-nums clock, next-break countdown, top-3 payouts pill row, and a QR footer for the player companion.
  • NewCash Strip above the Floor — shows Collected / Expected / Outstanding / Rebuys / Add-ons at a glance, so you know where the cash reconciliation sits without doing math at 11pm.
  • NewSwipe to eliminate (on phone) — swipe left on a player row to bust them, with a 5-second undo toast. Swipe right to quick-check-in.
  • NewDeal calculator in the Tools drawer — chip counts, ICM (up to 9 players), chip-chop, and scheduled payouts side-by-side. Save as ICM, as chip-chop, or custom amounts — no more navigating away from Run during final-3 dealmaking.
  • NewDealer draw + Seat draw back in Floor — Dealer draw picks one random active player per table and marks them on the oval; Seat draw (renamed from Random Draw) reseats everyone with an 8-second Undo toast. Both accessible from Floor view on any device.
  • NewTable visual back on Floor — ovals with seat circles, dealer chips highlighted, click any seat to open a move-player sheet with open seats per table.
  • NewColor-up suggestions in the Tools drawer — shows which chip denominations can be colored off at the current level, with the wording 'Color off all X chips.'
  • NewMinigame results view in the Tools drawer — host sees every accepted minigame report with submitted photos, timestamp, and a revoke button. Badge count on the button tells you when something new landed.
  • NewInline rebuy + add-on row actions — the player row's ⋯ menu now has Add rebuy / Add add-on / Undo last rebuy or add-on, gated on the session's cutoff level so you can't accidentally record one past the deadline.
  • NewRequest queue accept/decline — pending knockout, rebuy, and minigame reports from the player companion now have explicit accept/decline buttons in Floor. No more wandering into a separate tab.
  • ImprovedAudio toggle + test chime moved to the Run header — visible on every device, with localStorage persistence so it remembers your preference across sessions.
  • ImprovedPersistent 'jump-back-in' badge in the topbar while a session is live — you can browse Players / Templates / Settings and always return to the live tournament in one click.
  • ImprovedNew session-aware status pills (Running / Paused / Break / Completed / Cancelled) with the same color language on Today, Run, TV, Present, and the live badge.
  • FixedDeal calculator penny-rounding — saving whole-dollar custom amounts over odd prize pools no longer produces off-by-a-cent differences on reload ($230 stays $230).
  • FixedAuto-advance no longer double-fires when the host has Run and Present open on two devices at the same time — an Idempotency-Key on the level-advance request collapses concurrent POSTs into one server-side mutation.
  • FixedPost-mutation UI refresh now always pulls fresh state — previously an internal debounce could silently no-op the refetch, making check-in / elimination / rebuy visibly lag until the next 5-second poll tick.
  • FixedUndoing a Seat Draw is atomic in the user's eyes — partial network failures keep the snapshot around and offer a Retry action toast so you can try again instead of being stuck in a half-restored state.

April 17, 20262026.04.17c

  • NewLive tournament history — the host page and player companion now both have a History tab showing level changes, eliminations, rebuys, pauses, deals, and minigames in real time. Knocked-out players watching from home get to follow the whole game.
  • NewProactive plan-status banner — your free-tier roster usage is shown on the new-session setup and check-in tab, so you know your ceiling before you hit it during check-in.
  • NewOffline indicator on the host page — if the host device loses network, a yellow banner appears so you know the clock and eliminations on screen may be stale.
  • ImprovedPaused clock now shows a yellow border and badge — easy to notice in a noisy room when the timer is frozen.
  • ImprovedEnd Tournament confirm now spells out that recorded eliminations are locked once you confirm, and the duplicate footer button is hidden when only one player remains.
  • ImprovedUNPAID badge on the check-in list and a warning on results entry when unpaid players are about to be excluded from the prize pool — prevents underpayments at the end of the night.
  • ImprovedWarning + confirmation when saving tournament results that already exist, so a stray tap doesn't silently replace them.
  • ImprovedBlind structure editor redesigned for mobile — larger buttons, no more forced horizontal scroll on 360px phones, break rows properly labeled for screen readers.
  • ImprovedLarge prize pools no longer overflow the stat cards on narrow screens (they format with thousands separators and tabular digits now).
  • ImprovedEmpty check-in state now shows a "No players yet" card with guidance, replacing the bare search box.
  • ImprovedConfirm dialogs now default focus to Cancel, trap Tab/Escape correctly, and announce themselves to screen readers.
  • ImprovedMinigame photo uploads verified by magic bytes (defense against disguised file types); per-session cap of 50 photos to bound storage abuse.
  • FixedPayout structures that sum to more than 100%, contain duplicate positions, or have negative positions are rejected at save time — no more overpayment surprises at the end of the night.
  • FixedRecording an elimination for a player who isn't checked in now returns a clear error instead of creating a phantom record that shows up in the leaderboard.
  • FixedDuplicate finish positions in results entry are rejected — every position must be unique.
  • FixedForgot your PIN and had the host reset it? You can use the new PIN immediately — previously a locked-out player could stay locked out for 15 minutes even after a reset.
  • FixedTwo venues running tournaments behind the same Wi-Fi no longer share a rate-limit quota — each tournament session gets its own bucket.
  • FixedMalformed requests return a clear 'invalid input' error instead of a generic 500 server error across every mutating endpoint.

April 17, 20262026.04.17b

  • NewAgent quickstart — POST /api/quickstart creates a trial organization, a demo tournament, and an admin API key in a single request. The returned Bearer token can immediately run the clock, add players, and record eliminations. Trial orgs auto-delete after 7 days.
  • NewDaily cleanup cron — expired trial orgs and their ghost owners are swept at 03:00 UTC.
  • NewAgent-oriented documentation — /llms.txt rewritten to lead with the quickstart curl; new /llms-full.txt with full agent workflows, error-code table, idempotency rules, and rate-limit summary.
  • NewMarketing pages — /agents, /features, /faq (with FAQPage schema), /about, /for/leagues, /for/home-games, /vs/the-tournament-director, /vs/blindvalet, and a public /changelog.
  • NewSEO foundation — /robots.txt (allow-lists GPTBot, ClaudeBot, PerplexityBot, and more), /sitemap.xml, generated OpenGraph + Twitter cards, and Organization/WebSite/SoftwareApplication JSON-LD on every marketing page.
  • ImprovedOpenAPI spec expanded with the /api/quickstart operation, per-tag guidance written like agent instructions, and an info.description that leads with the one-curl quickstart flow.
  • ImprovedLanding page rewritten around the league thesis with a dual CTA (Start free + Try via agent) and a dedicated agent-ready callout card.
  • ImprovedPrivacy and Terms last-updated dates refreshed to April 17, 2026.

April 17, 20262026.04.17

  • NewMinigame photos — players can attach a photo (high hand, best bluff, etc.) when reporting a win. Images compress on-device to 100 KB before upload, display as thumbnails for the host, on the live Minigames tab, and in the end-of-tournament recap.
  • NewLive Minigames tab on the player companion — everyone can see who's winning each minigame in real time, with photo thumbnails and relative timestamps.
  • NewTV clock now shows active minigames in the footer so spectators know what's being tracked.
  • NewMinigame Wins card on the completed-session page — chronicles every accepted minigame by game name with winner photos.
  • NewCareer Minigame Wins card on player profiles — tallies wins per minigame across all tournaments, plus the 10 most recent with photos.
  • NewTournament Timeline — every completed session now shows a chronological recap (level changes, eliminations, rebuys, pauses, minigame wins, etc.), grouped by level with elapsed deltas from start.
  • NewExpected-player count on setup — pair it with the planned table count and seat-on-pay fills the lower seats first (no more "seat 9 while seats 1-8 are empty").
  • NewPaste-to-add bulk minigames — paste a comma or newline-separated list in the setup wizard; duplicates are case-insensitively dedoped.
  • NewRevoke button on accepted minigames — host can retract an accepted result (e.g., inappropriate photo) and the timeline records it.
  • ImprovedManual "Next Level" button now behind a confirm dialog showing the upcoming blinds — stops accidental mid-level jumps on mobile.
  • ImprovedClock level changes are server-debounced (2-second cooldown) to prevent two devices racing to advance simultaneously.
  • ImprovedAuto-advance guard rewritten — stale client state can no longer re-fire "next level" after the server already advanced.
  • ImprovedICM calculator for >9 players now distributes tail prize positions by chip stack instead of splitting equally — bigger stacks get proportionally bigger tail shares, matching real ICM intuition.
  • ImprovedRunning a tournament clone (rehost) now logs as a new session start in the timeline.
  • FixedAdding the player companion to your iPhone home screen now opens the correct game — previously it bounced to the marketing homepage.
  • FixedDismissing a minigame you've already revoked returns a clear 409 instead of silently succeeding.

April 9, 20262026.04.09

  • NewAdd to Home Screen (PWA) — ChipClock now installs as a standalone app on iPhone and Android with its own icon and full-screen mode
  • ImprovedMobile UX overhaul — larger touch targets on host dashboard (action buttons, elimination buttons, table controls), bigger self-service buttons on companion page
  • ImprovedHost bottom bar redesigned — End Tournament separated from safe actions to prevent mis-taps
  • ImprovedClock page refinements — wider volume slider, larger seat finder, session name truncation
  • ImprovedCompanion page — larger PIN submit button, more readable stats labels, tappable Switch button
  • ImprovedBlinds editor scrolls horizontally on narrow screens instead of cramming columns
  • ImprovedSecurity headers added — Content-Security-Policy, X-Frame-Options, referrer policy
  • ImprovedCORS restrictions on public API endpoints
  • ImprovedRate limiting added to Stripe checkout, billing portal, and clock mutations
  • FixedPIN set-pin endpoint now requires nickname match to prevent PIN-spraying
  • FixedClock page shows error for any failed API response, not just 404
  • FixedE2E test selectors updated for pricing, privacy, landing, and clock pages

April 1, 20262026.04.01

  • NewPlayer PIN identity — players scan the QR code and sign in with a personal 4-digit PIN for a personalized companion experience
  • NewAuto-seat display — identified players see their table and seat automatically, no searching needed
  • NewHost can pre-set PINs when adding players and share game links with PINs via clipboard
  • NewBulk "Copy All Links" — one button copies all player invite links with PINs
  • NewMinigame lifecycle — host can end/restart individual minigames during the tournament
  • ImprovedRebuy and minigame self-service pre-populated with player identity (fewer taps)
  • ImprovedMinigame reporting: primary "Report Hand" button for your own wins, secondary option to report for others
  • ImprovedDealer seat highlighted yellow with "D" badge in table map
  • ImprovedQR code enlarged for TV scanning, overlay now mentions PIN sign-in
  • ImprovedPIN status indicators on host check-in list and roster page
  • ImprovediOS safe-area-inset support for notched iPhones
  • ImprovedAndroid back button closes modals instead of navigating away
  • FixedRoom code system removed — replaced entirely by personal PINs

March 31, 20262026.03.31b

  • NewSetup template editing — full edit page for tournament templates with blind structure, payouts, and all settings
  • NewPlanned table count — choose how many tables before the tournament starts so seat-on-pay distributes players evenly
  • NewMinigame results card — accepted minigame reports now visible in the Tournament tab
  • ImprovedTemplate list shows summary info — level count, break count, blind range, and estimated duration
  • ImprovedLoading a template now also loads blinds and payout structure
  • ImprovedPlayer companion clock enlarged for mobile readability
  • Improved"Setups" renamed to "Templates" in navigation for clarity
  • FixedFixed crash on Templates page caused by double-encoded tournament data
  • FixedImproved error messages — errors now show what went wrong instead of a generic message

March 31, 20262026.03.31

  • NewSeat on Pay — automatically assigns a random seat when players pay, so everyone knows where they're sitting before the tournament starts
  • NewBubble & ITM indicators — host mode shows a banner when approaching the money and when players are in the money
  • NewPause messages — add a custom message when pausing (e.g. "Dinner break — 20 min") that displays on the TV clock
  • NewNext break on TV clock — footer shows how many levels until the next break
  • NewPayout structure visible in host mode — see payout amounts during the tournament
  • ImprovedAverage stack stat card added to host mode stats bar
  • ImprovedBlind schedule always visible with auto-scroll to current level (no more clicking to expand)
  • ImprovedRebuy/add-on status badges — see at a glance if rebuys are open, closing soon, or closed
  • ImprovedPlayer request notifications visible from any tab, not just Tournament
  • ImprovedElimination search filter — quickly find a player to eliminate when 8+ remain
  • ImprovedClock +/- buttons now show "-1m" / "+1m" labels for clarity
  • ImprovedCopy Clock URL and Player Link buttons replace the static URL display
  • ImprovedDuration column added to blind schedule on host mode and player companion
  • FixedStrict equality checks across the codebase for more reliable comparisons

March 29, 20262026.03.29

  • NewPlayer companion page (/live/) — mobile-first live view with clock, blind schedule, find-my-seat, and self-service reports
  • NewSelf-service knockout reports, rebuy requests, and minigame reports
  • NewQR code on TV clock links directly to the player companion page
  • ImprovedProduction viewport audit — tested on desktop, Android, and iPhone viewports
  • FixediOS Safari auto-zoom on inputs fixed (text-base on all public page inputs)

March 28, 20262026.03.28

  • FixedBoolean coercion root cause fix — isTruthy() handles string booleans from Supabase pooler
  • FixedAudio alerts now play reliably (AudioContext.resume() properly awaited)
  • FixedColor-up suggestions persist across level changes
  • FixedPenny rounding in prize pool calculations
  • Improved22-test tournament simulation passing end-to-end

March 26, 20262026.03.26

  • NewChip color-up alerts — suggests when to remove small denominations based on blind level
  • NewDealer draw — random dealer selection per table with visual indicators
  • NewAdd-on support with configurable cutoff level
  • NewBounty tracking (standard and progressive)
  • ImprovedTable oval SVG with seat positions and dealer marker