Changelog

What shipped, and when.

Every change a host or a player would notice, newest first.

  1. 2026.08.26.3

    August 26, 2026

    • New

      ChipClock is now PokerLeagueOS, at pokerleagueos.com. The name says what the product grew into: not just a tournament clock, but the whole league. Seasons, schedules, standings, seating, payouts and the player companion are all the same product you were already using, under a name that covers it. Old chipclock.com links redirect, so nothing you have shared stops working. Your league, your players, your results and your saved setups are untouched.

    • Improved

      New look throughout: a darker, higher-contrast theme built for a room with the lights down, with every number set in a fixed-width face so the clock, chip counts and standings line up and stay readable across the table.

    • Improved

      The marketing site was rebuilt from scratch around what a league actually does across a season, with an honest pricing page: paid plans are not open for sign-up yet, so it now says so instead of offering a trial you cannot start.

  2. 2026.08.26.2

    August 26, 2026

    • Improved

      ChipClock now keeps its own diagnostics instead of sending them to an outside service. When a page is slow or something breaks, the record of it lives in our database with the rest of your league's data, and it is deleted automatically as newer records arrive. Nothing is shared with an analytics or error-reporting company, and nothing tracks you across other sites. The privacy policy has a new Diagnostics section describing exactly what is kept.

  3. 2026.08.26.1

    August 26, 2026

    • Improved

      Player initials in the companion are unchanged, but the unused photo fields behind them are gone. The app carried a player-photo column that nothing could ever set, so the coloured initial was always what you saw. Removing it trims every roster and standings response. If photos are wanted later they will be built as a real feature rather than a half-wired one.

    • New

      You can now correct a player's season points for a tournament. Open the results for that night, tap the pencil next to their name, enter the points and a short reason. The reason is shown to the player on their season history, so write it for them. Adjustments are org-admin only, appear in the tournament timeline, and clearing one puts the scored points back. Until now the app could display an adjustment but nothing could make one.

    • Fixed

      Re-saving results for a tournament that already had them no longer fails. Reopening saved results and saving again was rejected unless you retyped every payout amount, because the payouts came back as text and the save expected numbers.

    • Fixed

      Tournaments that pay fixed dollar amounts now show those amounts on the player companion. If your structure is "$300, $200, $100" rather than percentages, the Payouts list and the Deal tab were reading every place as $0 whenever the prize pool worked out to zero, which happens when check-ins were not recorded. Both now show what you actually promised, and a fixed place no longer displays a meaningless 0%.

    • Fixed

      The deal calculator no longer offers up money that has already been won. With five paid places and four players left, 5th belongs to whoever just busted; the chip-chop column was still dividing it while the ICM column ignored it, so the two columns disagreed by that amount. Both now work from the places genuinely still in play.

  4. 2026.08.25.6

    August 25, 2026

    • Fixed

      Editing a tournament that is not yours, or one that no longer exists, now says so instead of reporting success. The save reported "saved" and quietly changed nothing, which is the worst of both answers. Nothing was ever readable or writable across leagues; the request was correctly ignored, it just was not reported.

  5. 2026.08.25.5

    August 25, 2026

    • Fixed

      Two of the player companion's tabs were sharing one request budget. Your tournament view and your career view each allow 60 refreshes a minute, but they were counting against the same total, so flipping between them on a busy night could stop one of them loading for up to a minute. They now have their own budgets.

  6. 2026.08.25.4

    August 25, 2026

    • Fixed

      Starting a tournament from a template no longer loses your sound preset or your table names. A tournament saved as a template carried both, and the Library kept them, but the new-tournament screen had nowhere to put them: the sound preset silently reverted to the standard set and custom table names came back blank, every time. Both now come through with the rest of the setup. Templates you already saved keep the values they were holding.

    • Fixed

      The template badge on the new-tournament screen is more reliable. It reads green while your setup still matches the template and orange once you change something, and opening a template from the Library could briefly settle on orange without you touching anything.

    • Fixed

      A player searching for their seat on the TV clock no longer gets the page zoomed in on an iPhone, with no way to zoom back out.

  7. 2026.08.25.3

    August 25, 2026

    • Improved

      New passwords must now be at least 10 characters, up from 8. Existing passwords still work; the new length applies when you sign up or set a new one.

    • New

      You now get an email whenever your account's password or email address changes. If a change was not you, that message is the warning, and it arrives whether or not you were at the keyboard.

    • Fixed

      An account could finish signing up and end up with no profile record behind it, which left the app unable to resolve the person's name anywhere it appeared. Creating that record no longer depends on the browser making it back from the confirmation email, so it cannot be missed. The one account already in that state has been repaired.

    • Improved

      Signed-in pages verify your session without a round trip to the login service on every request, which takes a step out of the wait before a page starts rendering.

  8. 2026.08.25.2

    August 25, 2026

    • Fixed

      Retry-safe requests are now safe when they arrive together, not just one after another. An Idempotency-Key reserved its slot only after the work had finished, so two copies of the same request landing at the same instant both ran: two identical blind schedules saved, two sessions created, or a player charged for two rebuys off one tap. The key is now claimed before the work starts, and a duplicate that arrives while the first is still running is turned away instead of repeating it. This affects API and integration callers; the app's own screens were not sending duplicate keys.

    • Improved

      The database now rejects a malformed write to any of its structured fields outright. That class of fault used to store a scrambled copy that read back correctly through the app while search and filtering silently found nothing in it. It is the fault behind minigame names going missing from the live feed earlier this month.

  9. 2026.08.25.1

    August 25, 2026

    • Fixed

      Season points now use one field size everywhere. A tournament's point chart was matched against the number of players who had paid, while the default scale counted the results you entered, so points could shift the moment you saved. More seriously, a tournament where you never recorded check-ins counted as a field of zero, which matches no tier in your point chart at all, so the chart was skipped without a word and everyone scored off the built-in scale instead. Already-saved standings are untouched.

    • Fixed

      Editing a saved template no longer wipes its payouts. The editor only knew how to show fixed dollar amounts, so opening a template that paid by percentage (50/30/20, say) read every place as $0 and saving wrote the zeros back. Any tournament built from it afterwards paid nothing. Percentages, fixed amounts and saved payout schedules are now each shown as what they are, and a template whose payouts the editor has no control for is left exactly as it was.

    • Fixed

      A template backed by a saved payout schedule keeps that link when you edit it, and you can now change or remove the link from the template editor instead of having to rebuild the template.

    • Fixed

      Editing a template no longer resets each minigame's scoring type. A game you had set to Judged went back to whatever its name implied, quietly changing how its leaderboard ranked. The template editor now shows the scoring type per game, like the setup wizard does.

    • Fixed

      A template whose blind structure comes from the Library now shows that schedule's current levels while you edit it, rather than an older copy that saving would have made permanent.

  10. 2026.08.25

    August 25, 2026

    • New

      Private tournaments. A new switch in Tools › Share (and on the setup wizard) turns off the TV clock and the player companion for a game, so a link that leaks does not expose your roster, chip counts or feed. Present mode and the host screens are unaffected, and flipping it either way is recorded on the tournament timeline.

    • Improved

      Templates now hold the whole tournament, not part of it. Bounties, minigames, the rebuy and add-on cutoff levels, the house cut, career recording, the host-tools setting and your usual turnout all save with a template and come back when you use it. Previously the template had nowhere to put them, so every one of those reverted to a default on the next game you built from it.

    • Fixed

      Hitting the template limit on the free plan now says so. It was answering with a blank error page, so the only signal that you had run out was the template not appearing.

    • Fixed

      Corrected the API reference at /openapi.json and /llms.txt. It listed PUT where the endpoint takes PATCH, described a few endpoints that do not exist, and advertised retry-safe Idempotency-Key support on nineteen endpoints that ignore the header. A test now compares the reference against the real routes on every build.

    • Fixed

      Rehosting a tournament now copies the whole setup. The bounty amount and type, the minigame list, the add-on cutoff level and the “count toward career history” setting were all being reset to their defaults on the copy, so a rehosted bounty night came back as a plain freezeout with no minigames.

    • Fixed

      Bounty knockouts now show the amount won in the tournament timeline. Standard bounties were rendering as a plain elimination with no money attached, while progressive ones showed theirs, which made it look like standard bounties were not being tracked at all.

    • Fixed

      Recording a minigame result now needs the same permission as approving one. A co-host without check-in rights could add results to the minigame leaderboard even though the approve button was correctly closed to them.

    • Fixed

      Sharing a ChipClock link now shows a preview card. Links to the home page had no card at all, and the pricing, features, FAQ, about, agents and changelog pages were serving a login page to Slack, iMessage and every other link preview instead of their card.

    • Fixed

      Minigame results in the player companion's Feed now show which minigame was won. Every one of them read “a minigame” instead of “High Hand” or “Low Hand”, because the name was being stored in a form the feed could not read back. Past results were repaired too, so old feeds read correctly now.

    • Fixed

      Signup and password-reset emails no longer stop going out after the second one in an hour. If you invited a group and some of them never got their confirmation mail, that was the cause.

    • Improved

      Creating a point chart through the API now accepts an Idempotency-Key, matching the other Library resources, so a retried request cannot leave you with two copies.

    • Fixed

      Moving a player into a seat someone else is sitting in now works. It had been failing with an error since early June, so the two players never swapped. If you tried this mid-tournament and nothing happened, that was why.

    • Fixed

      Seating a player who has no seat yet into an occupied seat no longer removes the player already sitting there. It now tells you who is in the seat and leaves them alone, so nobody quietly vanishes from the seating chart.

    • Fixed

      Season standings now add up prize money correctly. Total winnings were being joined together instead of summed, so the earnings column showed a dash for most players and could break the season page for anyone with exactly one cash.

    • Fixed

      Setup template limits now count per league rather than per person, so a league on the free plan gets the three templates the plan describes instead of three each.

  11. 2026.08.17

    August 17, 2026

    • New

      League rules PDF. Upload your house rules once from Library > Rules and every player can pull them up on their phone during the game, straight from the companion page. Replacing the file updates it everywhere immediately, and you can remove it at any time.

    • Fixed

      The player companion's Me tab now shows your real finishing position once a tournament is complete, instead of leaving you at your last live standing.

  12. 2026.08.14

    August 14, 2026

    • New

      Live league standings on the player companion. When a tournament belongs to a season, players see where the season standings sit right now, including the game in progress. Anyone already eliminated is scored at their real finishing position, and everyone still alive is scored at the worst they can now finish, so the table updates on every bust instead of waiting for the final result.

    • New

      Season standings on the companion Season tab, so players can check the league table without leaving the clock.

  13. 2026.07.23

    July 23, 2026

    • New

      Three ways to seat a room. Choose whether players are seated as they pay in, all at once when you are ready to start, or entirely by hand. The setting saves into your setup templates, so a league night and a casual game can each open the way you actually run them.

    • New

      Seat anyone at any time. The Tables view now lists everyone waiting to be seated, lets you pick an exact seat, add a table on the spot, and open a new table with one button. You are no longer locked into the seating that happened at check-in.

    • New

      Career achievements and head-to-head on the player companion. Players see the milestones they have actually earned (no empty locked grid), plus who they have knocked out the most and who has knocked them out the most.

    • New

      Start time, finish time, and total run time on the Results report, for example 7:12 PM to 11:48 PM over 4h 36m. It measures from when the clock really started, not when you first opened the setup.

  14. 2026.07.22

    July 22, 2026

    • New

      Export to CSV. Download your roster, season standings, and tournament results as spreadsheet files for records, dues, or a league email.

    • New

      Printable sheets. Print or save-as-PDF a clean seat draw, payout sheet, or results sheet to post on the wall or hand to the room.

    • Fixed

      Fixed a crash when opening the Export view on a tournament with a saved payout structure.

  15. 2026.06.28

    June 28, 2026

    • Improved

      Tournament setup is now two pages instead of three, with fewer jumps between related settings. Changing pages also scrolls you back to the top, and a missing tournament name is flagged right where the Next button is rather than silently failing.

    • New

      Season sub-tab in the player companion's History, plus tap-to-expand detail on any past tournament, so a player can see how a specific night went without leaving the page.

    • Improved

      Adding a large roster in one go is noticeably faster.

  16. 2026.06.27

    June 27, 2026

    • New

      Minigame leaderboards. Pick how each side game is scored (most wins, best hand, and so on), set a Bad Beat game up from a preset, and the tallies build themselves as you record results. Winners can be reordered by hand, and the leader gets a medal on every screen that shows the game.

    • New

      CSV import across the Library. Paste or upload a spreadsheet to build a blind schedule, payout table, point chart, or chip set instead of typing every row. Each importer ships a template file, flags bad lines by line number, and loads the result into the normal editor so you review before saving.

    • New

      Best N of M season scoring, editable on the season page. Count a player's best 8 of 12 nights and the leaderboard applies it everywhere.

    • New

      Rename a tournament after it is created, from either the tournament page or the list.

    • Improved

      The leaderboard now opens on the active season by default and falls back to all-time when no season is running, with a direct link to manage seasons.

    • Fixed

      The loaded setup template is highlighted correctly on the first setup page, including when you arrive from a Library link, and no longer shows as modified just because a number is formatted differently (30 and 30.00 now match).

  17. 2026.06.26

    June 26, 2026

    • New

      Point Charts. Save your league's points-by-finishing-position table in the Library, per player count, and results award points from it automatically. Tournaments without a chart keep using the built-in scale.

    • New

      Table advice while you run. The host screen, Present mode, and the TV clock now flag an unbalanced table and suggest the right move: balance seats, break a table, or go to the final table.

    • Fixed

      The TV clock no longer repeats the pause announcement every few seconds while the tournament is paused.

    • Fixed

      Timeline entries for level changes no longer label automatic advances as manual and vice versa.

  18. 2026.06.22

    June 22, 2026

    • New

      Spoken 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.

    • Improved

      Announcements 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.

    • Fixed

      Recording 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.

  19. 2026.06.10

    June 10, 2026

    • 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.

    • Fixed

      Moving 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.

    • Fixed

      Payouts 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.

    • Fixed

      The 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.

    • Fixed

      The "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.

    • Fixed

      Creating 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.

    • Fixed

      Accepting, 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.

    • Improved

      Pages and API calls you don't have access to now return a clean "not authorized" / "sign in" response instead of a generic server error.

  20. 2026.06.09

    June 9, 2026

    • New

      Seasons — 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.

    • New

      Pick 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.

    • New

      Season 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.

    • New

      Season 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.

    • New

      Hand-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.

    • Improved

      Soft "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.

  21. 2026.05.22b

    May 22, 2026

    • New

      Payout 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.

    • New

      Custom 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).

    • Fixed

      Door Mode "Outstanding" label no longer truncates to "OUTSTANDI" on phone viewports — renamed to "Owed" so it fits the 5-column stat rail at 390px.

    • Fixed

      Players 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).

    • Fixed

      Schedule-driven payouts ($ amounts) now display correctly on the Present screen — was rendering "0%" because the consumer only read percentage and ignored amount.

  22. 2026.05.22

    May 22, 2026

    • New

      Manual 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).

    • New

      Saved 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.

    • New

      Winner 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.

    • New

      Expected 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.

    • New

      Rename 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.

    • New

      Eliminate (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.

    • Improved

      Player 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.

    • Improved

      Bigger tap targets on per-table seat buttons (now 40px minimum with active-state feedback) — reliably tappable on phones for opening the move-player sheet.

    • Improved

      Playing / out counter above the phone players list — shows live count of active vs busted players so eliminations register visibly, not just via a toast.

    • Improved

      Tournament 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.

    • Improved

      Payouts 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.

    • Improved

      Floor 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.

    • Fixed

      Saved 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.

    • Fixed

      Amount-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.

    • Fixed

      Tournament 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.

    • Fixed

      Seat-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.

    • Fixed

      Moving 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.

    • Fixed

      Signing 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.

    • Fixed

      Players no longer appear at two seats on the table oval — the array-index fallback was masking sparse seat data and rendering each player twice.

    • Fixed

      Ending a tournament redirects to the results page instead of a 404 — the old library route never existed.

    • Fixed

      Check-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.

    • Fixed

      Undo elimination button now actually calls undoEliminate instead of re-checking the player in (which lost their elimination position).

  23. 2026.05.01

    May 1, 2026

    • New

      Co-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.

    • New

      Send 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.

    • New

      Hand-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.

    • Improved

      Prev / 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.

    • Improved

      Revoke an accepted minigame is now confirmed — destructive action no longer fires on a single tap.

    • Improved

      New-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.

    • Improved

      Login 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.

    • Fixed

      Tools 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.

    • Fixed

      Per-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.

    • Fixed

      TV clock and host phone Clock tab don't crowd the timer against header chrome on narrow Samsung-Android-portrait viewports anymore.

  24. 2026.04.18

    April 18, 2026

    • New

      Redesigned 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.

    • New

      New 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.

    • New

      New 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.

    • New

      Door 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).

    • New

      Present 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.

    • New

      Rebuilt 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.

    • New

      Cash 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.

    • New

      Swipe 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.

    • New

      Deal 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.

    • New

      Dealer 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.

    • New

      Table 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.

    • New

      Color-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.'

    • New

      Minigame 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.

    • New

      Inline 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.

    • New

      Request 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.

    • Improved

      Audio toggle + test chime moved to the Run header — visible on every device, with localStorage persistence so it remembers your preference across sessions.

    • Improved

      Persistent '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.

    • Improved

      New session-aware status pills (Running / Paused / Break / Completed / Cancelled) with the same color language on Today, Run, TV, Present, and the live badge.

    • Fixed

      Deal 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).

    • Fixed

      Auto-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.

    • Fixed

      Post-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.

    • Fixed

      Undoing 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.

  25. 2026.04.17c

    April 17, 2026

    • New

      Live 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.

    • New

      Proactive 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.

    • New

      Offline 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.

    • Improved

      Paused clock now shows a yellow border and badge — easy to notice in a noisy room when the timer is frozen.

    • Improved

      End 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.

    • Improved

      UNPAID 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.

    • Improved

      Warning + confirmation when saving tournament results that already exist, so a stray tap doesn't silently replace them.

    • Improved

      Blind structure editor redesigned for mobile — larger buttons, no more forced horizontal scroll on 360px phones, break rows properly labeled for screen readers.

    • Improved

      Large prize pools no longer overflow the stat cards on narrow screens (they format with thousands separators and tabular digits now).

    • Improved

      Empty check-in state now shows a "No players yet" card with guidance, replacing the bare search box.

    • Improved

      Confirm dialogs now default focus to Cancel, trap Tab/Escape correctly, and announce themselves to screen readers.

    • Improved

      Minigame photo uploads verified by magic bytes (defense against disguised file types); per-session cap of 50 photos to bound storage abuse.

    • Fixed

      Payout 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.

    • Fixed

      Recording 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.

    • Fixed

      Duplicate finish positions in results entry are rejected — every position must be unique.

    • Fixed

      Forgot 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.

    • Fixed

      Two venues running tournaments behind the same Wi-Fi no longer share a rate-limit quota — each tournament session gets its own bucket.

    • Fixed

      Malformed requests return a clear 'invalid input' error instead of a generic 500 server error across every mutating endpoint.

  26. 2026.04.17b

    April 17, 2026

    • New

      Agent 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.

    • New

      Daily cleanup cron — expired trial orgs and their ghost owners are swept at 03:00 UTC.

    • New

      Agent-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.

    • New

      Marketing pages — /agents, /features, /faq (with FAQPage schema), /about, /for/leagues, /for/home-games, /vs/the-tournament-director, /vs/blindvalet, and a public /changelog.

    • New

      SEO 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.

    • Improved

      OpenAPI 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.

    • Improved

      Landing page rewritten around the league thesis with a dual CTA (Start free + Try via agent) and a dedicated agent-ready callout card.

    • Improved

      Privacy and Terms last-updated dates refreshed to April 17, 2026.

  27. 2026.04.17

    April 17, 2026

    • New

      Minigame 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.

    • New

      Live Minigames tab on the player companion — everyone can see who's winning each minigame in real time, with photo thumbnails and relative timestamps.

    • New

      TV clock now shows active minigames in the footer so spectators know what's being tracked.

    • New

      Minigame Wins card on the completed-session page — chronicles every accepted minigame by game name with winner photos.

    • New

      Career Minigame Wins card on player profiles — tallies wins per minigame across all tournaments, plus the 10 most recent with photos.

    • New

      Tournament 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.

    • New

      Expected-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").

    • New

      Paste-to-add bulk minigames — paste a comma or newline-separated list in the setup wizard; duplicates are case-insensitively dedoped.

    • New

      Revoke button on accepted minigames — host can retract an accepted result (e.g., inappropriate photo) and the timeline records it.

    • Improved

      Manual "Next Level" button now behind a confirm dialog showing the upcoming blinds — stops accidental mid-level jumps on mobile.

    • Improved

      Clock level changes are server-debounced (2-second cooldown) to prevent two devices racing to advance simultaneously.

    • Improved

      Auto-advance guard rewritten — stale client state can no longer re-fire "next level" after the server already advanced.

    • Improved

      ICM 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.

    • Improved

      Running a tournament clone (rehost) now logs as a new session start in the timeline.

    • Fixed

      Adding the player companion to your iPhone home screen now opens the correct game — previously it bounced to the marketing homepage.

    • Fixed

      Dismissing a minigame you've already revoked returns a clear 409 instead of silently succeeding.

  28. 2026.04.09

    April 9, 2026

    • New

      Add to Home Screen (PWA) — ChipClock now installs as a standalone app on iPhone and Android with its own icon and full-screen mode

    • Improved

      Mobile UX overhaul — larger touch targets on host dashboard (action buttons, elimination buttons, table controls), bigger self-service buttons on companion page

    • Improved

      Host bottom bar redesigned — End Tournament separated from safe actions to prevent mis-taps

    • Improved

      Clock page refinements — wider volume slider, larger seat finder, session name truncation

    • Improved

      Companion page — larger PIN submit button, more readable stats labels, tappable Switch button

    • Improved

      Blinds editor scrolls horizontally on narrow screens instead of cramming columns

    • Improved

      Security headers added — Content-Security-Policy, X-Frame-Options, referrer policy

    • Improved

      CORS restrictions on public API endpoints

    • Improved

      Rate limiting added to Stripe checkout, billing portal, and clock mutations

    • Fixed

      PIN set-pin endpoint now requires nickname match to prevent PIN-spraying

    • Fixed

      Clock page shows error for any failed API response, not just 404

    • Fixed

      E2E test selectors updated for pricing, privacy, landing, and clock pages

  29. 2026.04.01

    April 1, 2026

    • New

      Player PIN identity — players scan the QR code and sign in with a personal 4-digit PIN for a personalized companion experience

    • New

      Auto-seat display — identified players see their table and seat automatically, no searching needed

    • New

      Host can pre-set PINs when adding players and share game links with PINs via clipboard

    • New

      Bulk "Copy All Links" — one button copies all player invite links with PINs

    • New

      Minigame lifecycle — host can end/restart individual minigames during the tournament

    • Improved

      Rebuy and minigame self-service pre-populated with player identity (fewer taps)

    • Improved

      Minigame reporting: primary "Report Hand" button for your own wins, secondary option to report for others

    • Improved

      Dealer seat highlighted yellow with "D" badge in table map

    • Improved

      QR code enlarged for TV scanning, overlay now mentions PIN sign-in

    • Improved

      PIN status indicators on host check-in list and roster page

    • Improved

      iOS safe-area-inset support for notched iPhones

    • Improved

      Android back button closes modals instead of navigating away

    • Fixed

      Room code system removed — replaced entirely by personal PINs

  30. 2026.03.31b

    March 31, 2026

    • New

      Setup template editing — full edit page for tournament templates with blind structure, payouts, and all settings

    • New

      Planned table count — choose how many tables before the tournament starts so seat-on-pay distributes players evenly

    • New

      Minigame results card — accepted minigame reports now visible in the Tournament tab

    • Improved

      Template list shows summary info — level count, break count, blind range, and estimated duration

    • Improved

      Loading a template now also loads blinds and payout structure

    • Improved

      Player companion clock enlarged for mobile readability

    • Improved

      "Setups" renamed to "Templates" in navigation for clarity

    • Fixed

      Fixed crash on Templates page caused by double-encoded tournament data

    • Fixed

      Improved error messages — errors now show what went wrong instead of a generic message

  31. 2026.03.31

    March 31, 2026

    • New

      Seat on Pay — automatically assigns a random seat when players pay, so everyone knows where they're sitting before the tournament starts

    • New

      Bubble & ITM indicators — host mode shows a banner when approaching the money and when players are in the money

    • New

      Pause messages — add a custom message when pausing (e.g. "Dinner break — 20 min") that displays on the TV clock

    • New

      Next break on TV clock — footer shows how many levels until the next break

    • New

      Payout structure visible in host mode — see payout amounts during the tournament

    • Improved

      Average stack stat card added to host mode stats bar

    • Improved

      Blind schedule always visible with auto-scroll to current level (no more clicking to expand)

    • Improved

      Rebuy/add-on status badges — see at a glance if rebuys are open, closing soon, or closed

    • Improved

      Player request notifications visible from any tab, not just Tournament

    • Improved

      Elimination search filter — quickly find a player to eliminate when 8+ remain

    • Improved

      Clock +/- buttons now show "-1m" / "+1m" labels for clarity

    • Improved

      Copy Clock URL and Player Link buttons replace the static URL display

    • Improved

      Duration column added to blind schedule on host mode and player companion

    • Fixed

      Strict equality checks across the codebase for more reliable comparisons

  32. 2026.03.29

    March 29, 2026

    • New

      Player companion page (/live/) — mobile-first live view with clock, blind schedule, find-my-seat, and self-service reports

    • New

      Self-service knockout reports, rebuy requests, and minigame reports

    • New

      QR code on TV clock links directly to the player companion page

    • Improved

      Production viewport audit — tested on desktop, Android, and iPhone viewports

    • Fixed

      iOS Safari auto-zoom on inputs fixed (text-base on all public page inputs)

  33. 2026.03.28

    March 28, 2026

    • Fixed

      Boolean coercion root cause fix — isTruthy() handles string booleans from Supabase pooler

    • Fixed

      Audio alerts now play reliably (AudioContext.resume() properly awaited)

    • Fixed

      Color-up suggestions persist across level changes

    • Fixed

      Penny rounding in prize pool calculations

    • Improved

      22-test tournament simulation passing end-to-end

  34. 2026.03.26

    March 26, 2026

    • New

      Chip color-up alerts — suggests when to remove small denominations based on blind level

    • New

      Dealer draw — random dealer selection per table with visual indicators

    • New

      Add-on support with configurable cutoff level

    • New

      Bounty tracking (standard and progressive)

    • Improved

      Table oval SVG with seat positions and dealer marker