Changelog
What's new on the HCT WFH Cup site. Newest first.
24 October 2026 โ handicap by time allowance
- On handicapped tables each stage now shows the adjusted time that was ranked, with the actual time struck through beneath it; hover the adjusted time to see how much was taken off.
- The handicap now works by time allowance: before ranking, B, C and D riders get minutes taken off their times depending on the course (flat 1/2/3, rolling 2/4/6, hilly 3/6/12 by default), then everyone is ranked together on adjusted time and scores points for their place. The allowances are editable per series, and each stage's course profile is set in Stage details or judged from its climbing per kilometre. Tables show the allowance applied next to each time, and the Stage guide shows each stage's profile.
- The bonus-points handicap is still available as an option.
19 October 2026 โ handicap reworked, Advanced off for B/C/D
- On a handicapped table the category pills are gone: it's one list across every category, so the filter would only mislead. The Advanced races switch stays.
- Handicap rethought. Everyone on the stage is now ranked by time and scores the points for their place; then each rider gets a small bonus for every rider from a higher category they finished ahead of (1 point each, at most 5 a stage by default; both are settings on the series). Stage cells show the bonus as a little green +n. This replaces the percentage-based version.
- Picking B, C or D on a table now switches Advanced races off automatically, since those slots are for the 650+ riders. It can be switched back on; All and A still include them.
18 October 2026 โ handicapped points
- Tighter default points: 20 for a stage win, then 18, 16, 15, 14 and down by one to 1 point for 18th. Applies to any points series that hasn't set its own list; a custom list on the series edit page still wins.
- Fixed: tied riders now share a place. Under the handicap every category winner is on 100%, and they were being dealt places 1, 2, 3, 4 in an arbitrary order, so a rider who won their category outright could score 4th-place points. All category winners now score the top points, and the next rider takes the next place.
- The points settings are now one choice, "how places are decided on each stage", with five clear options, so the handicap can't be combined with race placings (that mix was quietly ignored before). The rules panel now explains the handicap with a worked example, and says plainly that on an open series the comparison is against everyone on the table, not just HCT riders.
- Every table now has a How this table works panel underneath, written from that series' own settings: who counts, how each stage scores, the points for each place, how ties are broken, how categories are fixed and what wins the cup.
- A third way to rank a points series: everyone together, handicapped. Riders are ordered by how far behind the best rider in their own category they finished, so a C rider who wins C by a distance scores above an A rider who was fourth in A. One table across all categories, with every category able to reach the top of it.
- Clearer wording on the ranking options: "within each category", "everyone together by time (50, 48, 46 down the whole field)", or handicapped.
16 October 2026 โ open series
- A series can be set to count everyone in the race, not just HCT riders. Every finisher is kept and shown on that series' table, with a small HCT tag on team members, and cups there can go to anyone. Switching an existing series over re-downloads its results so the other finishers come in. Team-only series are unaffected.
16 October 2026 โ points series
- A series can now be scored on points instead of total time. Each stage scores by position: set the points for 1st, 2nd, 3rdโฆ per series (for example 50 down to 5 for 20th), rank riders within their category or everyone together, and base position either on the fastest team-mates on the stage or on the rider's actual finishing position in the Zwift race.
- Points tables show the points scored on each stage with the time underneath, the points total and the gap to the leader. Cups in a points series go to the top scorer in each category.
10 October 2026 โ cups, movement and spotlight
- Cups. When a series finishes, the fastest rider in each category who completed every stage wins it. Winners get a cup next to their name on every table; hover or tap it to see what they won. A category nobody finished in full has no winner, so a series nobody completed awards nothing.
- Frozen categories. A rider's category for a series is fixed when they first score a result in it, so a mid-series promotion doesn't move them or change who won. Admins can correct a rider's series category on the series edit page.
- Hall of fame on the home page lists every series winner.
- Up and down arrows next to each position show how a rider has moved since yesterday, and new names are marked.
- Spotlight above each table: biggest climber, new riders on the table and the closest battle.
15 September 2026
- Wider page and a tighter table so the Gap column no longer needs a sideways scroll on a laptop screen.
13 September 2026 โ stage details
- New Terms of use and Privacy pages, linked from the footer along with What's new. The footer also has the team contact, a Join HCT email link and the Facebook and Instagram pages; Join HCT sits in the header too. What's new and the Admin link have left the top menu; both are in the footer.
- Stage details can be typed in by hand on a series' edit page (route, world, distance, climbing, laps, power-ups, dates) for when Zwift's description doesn't have them. Anything you enter is kept when the automatic update runs.
- The home page lists series by finishing date, latest first, so the current ones are at the top and finished ones drop down. Each card shows when the series ends or ended.
- Clearer admin buttons: Find races does all the finding in one go (upcoming and last week from Zwift and ZwiftPower, then older races from the riders' histories) and Fetch results downloads results. Three buttons became two. You shouldn't need them: a new series now picks up its older races on the schedule within about an hour.
- Hover a stage heading on a table to see the course: route, world, distance, climbing, laps, power-ups and when it ran. The route name now sits under each heading too.
- A Stage guide under every table lists all the stages in the series, including ones still to come with their dates, taken from Zwift's own series description.
12 September 2026 โ category filter shows everyone below too
- The category pills are now a ceiling: pick B and you see B, C and D riders, the people a B rider actually races against. The label reads Max category. Riders without a Zwift racing category still appear under All only.
- The site is now called HCT WFH Cup, and the footer has a contact address for queries.
12 September 2026 โ live on hct-racing.com
- The site is now hosted at hct-racing.com, deployed automatically from the repository.
- Riders who have left the team no longer appear on any table. Their results are kept in case they return.
- The scheduler can be driven by an external cron service; results now update every 15 minutes and the overnight scans run in short batches.
- Admin System page: run migrations, clear caches, see whether the scheduler is running and check the server setup.
12 September 2026 โ a fresh look
- New design: the HCT stag and team colours throughout, a header on every page, series cards on the home page, and a hero with podium and stat tiles on each table.
- This changelog page.
- Advanced races toggle above the table: switch it off to ignore times set in a stage's "| Advanced" slots.
- The category filters now use each rider's current Zwift racing category rather than the category on the race result.
12 September 2026 โ racing scores
- The table shows every rider's current Zwift Racing Score and racing category, taken from their Zwift profile. Riders who hide their metrics on Zwift are read from their ZwiftPower profile instead.
- Scores refresh nightly, or on demand from the Riders page in the admin area.
12 September 2026 โ complete race coverage
- Discovery now reads ZwiftPower's list of the last seven days as well as Zwift's upcoming feed, so every slot of a stage is tracked whether or not a team rider was in it.
- Find past races scans the riders' ZwiftPower histories for anything older, and re-checks everyone when a series is added or its pattern changes.
- The event title pattern is generated from the series title as you type; edit it for anything unusual.
- Fixed results syncs dying part way through with "database is locked".
12 September 2026 โ admin area
- Log in at
/adminto create and edit series, preview which races a pattern catches, exclude or re-stage individual races, add races or riders by ID, and run any sync immediately. - Riders added by hand are pinned so the roster sync never marks them as having left.
12 September 2026 โ first release
- Total-time league tables for HCT riders in Zwift race series: fastest time per stage counts, riders ranked by stages completed then total time.
- Team roster from ZwiftPower, results fetched hourly, event discovery from Zwift's feed.