RoxRace
RoxRace
Toggle sidebar

Changelog

What's new.

Latest updates and improvements to RoxRace.

Heat Planning

Planning start waves after late registrations and cancellations is now a few clicks instead of a lot of dragging.

  • Reorder athletes — a new button on Heats & Waves. The default, Only fix overfull heats & fill free spots, keeps your own placement: an overfull heat passes its last athlete on to the division's next heat, gaps close within each division, and heats that end up empty can be removed. Other strategies re-sort by division and estimated time, by HYROX sled weight, or spread athletes evenly. Every option shows a preview of exactly what will change.
  • Auto-assign that respects divisions — By division, fastest first now puts each late registration in their own division's heats, in estimated-time order, and never mixes divisions. If a division needs another heat, it's added right after that division's last heat — later heats move back to make room — or wherever the division belongs in your division order.
  • Add heats if needed — Auto-assign can add heats so everyone gets a spot, with the same size and interval as the heats around them.
  • Your order within a heat is kept — drag athletes within a heat to set their order. It's saved, and the athletes at the bottom of an overfull heat are the ones marked Over capacity.
  • Smoother drag and drop — a dropped athlete takes the first free spot instead of a cell below the empty ones, the heat you're over is highlighted, and a full heat turns amber before you drop. Clicking an unplanned athlete to select it no longer starts a drag, so selecting several athletes works again.
  • Heats are numbered automatically — always Heat 1, 2, 3… in start order. Adding, removing or moving a heat renumbers the rest, so names never repeat or skip. Existing heats have been renumbered.
  • Estimated times on every athlete card, and a clearer Actions menu.
  • Much faster on big races — the Heats & Waves page loads several times faster with many heats, and working in the Generate, Auto-assign and Reorder dialogs no longer reloads the whole page.

Moving athletes doesn't email anyone — if your startlist is published, use Actions → Notify all afterwards.

Also Improved

  • Team members see their team — teammates (not just the captain) now find their team's registration under My registrations.
  • Clearer refunds — Edit registration → Payment explains what Issue refund does before you confirm, shows earlier refunds, and marks a fully refunded payment as Refunded.
  • Custom race URLs stay put — saving race details no longer resets a custom race URL.
  • Accurate fees and payouts — the platform fee shown on your pricing page is the fee you're actually charged, in your race's currency; payouts subtract partial refunds; and an athlete's Total spent leaves out refunded and failed payments.
  • Walkthrough videos — the help docs now include short videos showing how to create a race, plan heats, and run live timing.
  • A demo race to try things on — every new organization gets Demo: HYROX Simulation, complete with divisions, registered athletes and heats, so you can explore heat planning, check-in and live timing before setting up your own race. Delete it whenever you like.
  • Payout reference numbers — every payout request gets a reference number (RXRCE…), shown in Payout requests, so it's easy to refer to a specific payout.
  • New draft races no longer show a Done badge.

Customize Your Race URL

Every race gets an automatic page URL when it's created — you can now replace it with your own:

  • Edit it from Race → Public → Public URLs.
  • Changes take effect immediately, and the URL can be changed anytime, including after the race is published.
  • Heads up: changing it breaks the previous link immediately — there's no redirect from the old URL, so avoid changing it once you've shared it.

Register Now, Name Teammates Later

Team captains no longer need to know their whole team before signing up:

  • "I will identify my teammate later" — turn on Allow captain to add teammates later (Registration options → Team registration), and captains can leave any teammate spot open and register the team right away.
  • Complete team from My registrations — captains see which of their teams are incomplete and fill in names and emails in one place. Reminder emails link to the same form.
  • Roster deadline & reminders — optionally set a deadline in your race's timezone. Captains of incomplete teams are reminded 7 days before and the day before it. Nothing is locked when it passes — incomplete teams stay flagged in the Athletes list so you can sort them out at check-in.

Better Teammate Privacy

  • No more athlete search when registering a team — captains now type in each teammate's name and email instead of searching every athlete on the platform, so no one's details are shown to other users. If a teammate already has a RoxRace account, the team is linked to it automatically.
  • Organizer search only shows your own participants — when you register an athlete or add a team member manually, search only lists athletes who have taken part in your organization's races. Anyone else can still be added by name and email, and an existing account is linked automatically.

Early Bird Pricing for Divisions

Each division can now offer a discounted early bird price, separate from the race's regular pricing:

  • Per-division discount — set a lower price, active in a start/end window in your race's own timezone.
  • Optional registration cap — stop the discount automatically once a set number of early bird spots are taken, even if the window is still open.
  • Shows everywhere pricing does — the public Divisions & Pricing section, the registration wizard, and host manual registration all show the early bird price, with the regular price struck through, whenever it's active.

Browse-First on Mobile

The homepage's Discover page no longer buries races under a filter form on mobile:

  • A compact search + filter row replaces the old full filter form below the hero — tap Filter to open race type and country chips, with live results and a badge showing how many filters are active.
  • The first race now shows much higher on the page.
  • Desktop is unchanged.

Race Page Polish

  • Race titles always fit on mobile now, sized to the actual title instead of jumping between a few fixed sizes — no more words cut off mid-letter.
  • Photo galleries lay out without gaps, distributing photos evenly across columns instead of leaving an empty grey cell.

Race Branding

Every race can now carry its own look, on top of your organization's branding:

  • Accent color override — give a race its own color instead of your organization's default, used everywhere the accent shows up on the public page.
  • Three hero layouts — Classic, Centered, or Split, each with its own pattern and overlay options, including a new "None" for a clean, unobstructed photo.
  • Logo placement — put your race logo beside the title (left, right, or above) instead of it only replacing the title entirely.
  • Focus-point banners — upload a banner and pick the focus point; every derived crop across the site follows it.
  • A better fallback photo — races without an uploaded banner now get a stable, race-specific stock photo instead of the same static placeholder every time.

Registration Refunds

Refunds are now real, not just a status label:

  • Remove & Refund — removing a paid registration can refund the athlete in the same action.
  • Standalone refunds — issue a full or partial refund without removing the registration, e.g. for a division downgrade.
  • Accurate refund status everywhere — the participant list and admin payment records now show real refund history.

Race Map, Now Its Own Section

Race Map moved out of the Venue settings sub-section into its own spot on the public page, right after the overview and before pricing:

  • Up to 10 images, shown as clickable thumbnails that open a full-size lightbox with next/prev navigation.
  • Bigger thumbnails that no longer crop awkwardly.

Smaller Fixes

  • Division order is now consistent everywhere it's shown — admin planning, public pricing, and registration.
  • Division descriptions expand on click on the public page instead of always taking up space, and no longer fail to save if they're long.
  • The registration wizard uses your race's own branding color, and its breadcrumb is clickable to jump back a step.
  • Race admin sidebar: Planning now comes before Participants, and every Save button looks the same across every settings page.

Accessibility Improvements

We ran a full accessibility audit across the public site and the athlete registration flow, and fixed everything it turned up. Most of it is invisible if you're clicking around with a mouse — but it's the difference between a screen reader or keyboard being able to use RoxRace and not.

  • Every page now has a proper landmark and heading structure — screen readers can jump straight to the main content, and every page has a real page-title heading instead of styled text with no structure underneath it.
  • The Terms of Service and Privacy Policy links are reachable again — during account creation, these links were visually clickable but invisible to screen readers, meaning it was impossible to actually read them before agreeing. They now sit on their own line and work for everyone.
  • Sidebar buttons keep their label when collapsed — the profile menu, the account switcher, and every icon-only sidebar item now announce what they do, instead of going silent once the sidebar collapses to icons.
  • Sidebar sections are labeled — "Settings," "Support," "Money," and the rest are now distinguishable regions instead of a wall of identical, unnamed navigation landmarks.
  • Better color contrast on the "Live" badge — the red used to mark a race as live now meets contrast guidelines against white text.
  • Links inside paragraphs no longer rely on color alone — they're underlined, not just colored, so they're distinguishable for readers who can't see color differences.

New: Athletes Choose Their Start Time

Races that use heats now have a second way to run start times, alongside the existing organizer-assigns-after-registration flow.

  • A new race-level setup choice — decide whether the organizer assigns start times after registration closes (today's default), or athletes choose their own start time as part of registering.
  • Plan heats before registration opens — in the new mode, create heats — each with a start time, a capacity, and one or more divisions mapped to it — before any athlete has signed up. Athletes then only see the heats mapped to the division they're registering into, each showing its start time and remaining spots.
  • Full division? Ask to be notified — if every heat for a division is full, athletes can ask to be notified instead of being turned away. When a spot opens up (a heat is added, capacity increased, or a registration cancelled), everyone waiting is emailed — first to register gets the spot.
  • Self-service heat changes — athletes can change their own chosen heat after registering, without contacting the organizer, as long as the race hasn't passed the change cutoff.
  • Switching modes is safe — this is a one-time choice made early in race setup, but it can be changed later; switching never touches a registration's already-assigned heat, whoever assigned it.

Heat Planning Fixes

  • "Add heat" now continues your schedule — clicking it used to reset to a fixed 8am start time and a default capacity, which could land the new heat out of order. It now picks up right after your last heat, using the same time gap and the same number of spots.
  • "Group by division" now actually mixes divisions when you ask it to — with "never mix divisions" left unchecked, this strategy previously still kept every division in its own heat. It now fills remaining space in the current heat before starting a new one, like the option promises.
  • You're now told when athletes couldn't be placed — auto-assigning athletes into heats could silently leave some unplaced if heats ran out of room. You'll now see a clear "some athletes not assigned" notice instead of finding out later.

Race Workspace Redesign

  • Consistent headers across every race admin page — page titles now always match their sidebar menu label, use the same large size, and no longer show the small "PLANNING · ..." style label above them.
  • Wider layout — the Dashboard, Stages & Events, Divisions, and Heats pages now use the full page width like the rest of the workspace, instead of being capped narrower than everywhere else.

Team Registration, Simplified

  • Team member email is now optional — a new per-race "Team registration" setting lets a captain add teammates by name only, instead of requiring every member's email up front. Existing races keep requiring it unless you turn it off.
  • See which teams are incomplete — the Athletes list shows a completeness indicator for team registrations, plus a filter to find every team still missing a teammate's email.
  • Remind the captain with one click — a new "Remind team captain" action emails the captain exactly which teammates still need an email, with a link to finish the roster.
  • Captains can finish the roster themselves — a no-login-required link lets the captain add the missing emails; each teammate then gets their own account invitation.
  • Automatic reminders — teams still incomplete 3+ days after registering are reminded automatically, once, for races that haven't started yet.

Give your organization a brand, not just a logo

Organizations now have a proper identity kit, and a public page to show it off.

  • Logos, cover image, accent color — upload a square logo (with an optional light variant for emails, and an optional wide wordmark), a cover image, and pick an accent color that carries across your races, your organizer page, and your emails.
  • Tagline & about — a short line under your organization name, and a longer description for your organizer page and race pages.
  • Public organizer page — every organization gets a page at roxrace.com/o/your-slug listing all your upcoming and past races in one place, with your branding front and center. Turn it on or off, and pick your own URL slug.
  • "Listed on organizer page" per race — hide a specific race (a private club event, a test race) from your organizer page's listing without affecting its own public URL.
  • Branded emails — registration confirmations, heat assignments, and other race emails now show your logo and accent color at the top.

Settings moved: logo upload, social links, and organization branding now live on the new Branding page; VAT/billing classification moved to Payments & fees. See the Organization Branding guide for details.

A New Look

RoxRace has a new visual design — sharper, more condensed, and built around a bold orange-and-black identity. The update covers navigation, the public site, the help center, and the live race-day dashboard.

  • New logo and navigation — a redesigned sidebar for organizers (with a collapsible rail and quick organization switcher), a cleaner race workspace menu grouped by phase (Setup, Participants, Planning, Race Day, Results, Public), and a refreshed public header and footer.
  • Login page — new layout with a hero image and simplified copy.
  • Public pages refreshed — the homepage, "For Organizers," "About," pricing, race-type pages (HYROX Simulation, Swimrun, OCR, etc.), and the Terms & Privacy Policy pages all now match the new design.

Help Center

  • Redesigned docs & help pages — a cleaner layout for browsing articles, reading a guide, and following the changelog (the page you're reading right now).
  • Search added — the help center now has a working search box that matches article titles, summaries, and content as you type.
  • New illustrated screenshots — added step-by-step screenshots to guides for registering an athlete manually, heat scheduling, publishing your race, divisions & team setup, live timing, connecting Stripe, and more.

Live Race-Day Dashboard

The public live dashboard (shown on TVs and projectors at your venue) has been rebuilt from the ground up:

  • Adjustable size — a new screen-settings panel lets you scale everything up or down (1–10) so the board reads clearly whether it's a small screen up close or a projector across the room. The setting is remembered per screen.
  • View modes — switch between Full, Racing, Leaders, and Finishes from the settings panel, the keyboard, or a link — useful for dedicating one screen to just the leaderboard, for example.
  • Smarter leaderboard — the top 3 in each division stay pinned on screen while the rest of the field pages through automatically, then moves on to the next division.
  • Always fits the screen — rows now size themselves to fit exactly, so nothing gets cut off and nothing sits half-empty.

Fixes

  • Fixed the login page background photo not showing correctly in some cases.
  • Various small visual fixes across the new navigation reported and corrected during testing (icon alignment, active-state colors, label wording).

Platform Fee VAT

The platform fee RoxRace charges organizers is now correctly treated as its own taxable service under Swedish VAT law — separate from the race-ticket VAT your athletes pay.

  • Tell us your VAT classification — declare whether your organization is a Swedish business, a Swedish consumer, an EU business, or based outside the EU, in your organization's payment settings. Swedish organizations are set up automatically; everyone else can classify themselves whenever they're ready.
  • Swedish organizers: no price change. What you pay stays exactly the same — it's simply now disclosed as a net amount plus VAT instead of one combined figure.
  • EU-business and non-EU organizers: a real fee decrease. Since 0% VAT applies, the platform fee is reduced to the net-only amount.
  • Unclassified organizations keep paying exactly what they do today until they classify themselves.

Monthly Invoices (New)

  • Every organization now gets an automatic monthly PDF invoice for the platform fees collected that month, emailed on the 1st and available to download anytime from a new dashboard page.
  • The invoice shows the right breakdown for your situation — itemized net + VAT, a single VAT-inclusive line, a reverse-charge notice with your EU VAT number, or an export-of-services notice.
  • Payout receipts now show the same net/VAT split for the platform fee line, so the numbers always match up.

Major Features

  • Race officials & volunteer management — set up race official stations, invite officials by email, and open a public volunteer sign-up page (no account required) for your race. Print station sign sheets and rosters for race day.
  • Split Timing View — a new live-timing tool for capturing times at intermediate course splits, not just the finish. Split times are also shown to spectators on the public race page, expandable per finisher.
  • Direct Stripe payments — choose live Stripe direct-charge payments per race, see your Stripe connection status inline, and save a race's payment setup as the default for future races in your organization. Payout requests now itemize total collected, platform fee, and Stripe processing fee, with a confirmation step before submitting.
  • Anonymous athletes — athletes can now opt to hide their name from public results. Anonymous athletes are excluded from public leaderboards, start lists, live timing, and printed schedules/results.
  • Registration rebuilt as a single step — the multi-step athlete registration wizard is now a streamlined single-step form. Guests can log in or create an account inline without leaving it.
  • GDPR Data Processing Agreement — organizations must now review and accept a Data Processing Agreement before managing events and athlete data.
  • Public site rebuild — the homepage now leads with race listings, "For Organizers" and discover-events pages were redesigned, and new SEO landing pages were added per race type. A new public guide (with downloadable PDF) walks prospective organizers through running a race.
  • Help center expanded — 15+ new articles added and grouped into sections, including guides for volunteers, manual athlete registration, and live timing (start & finish).

Live Timing

  • Start line countdown clock, division breakdowns on heat lists, and general UX refinements to the start and finish screens.
  • Edit finish times inline — correct an athlete's finish time directly from the "recent finishes" list, without navigating elsewhere.
  • DNS/DNF from the heat menu — mark an athlete Did Not Start or Did Not Finish directly from an in-progress heat.
  • More reliable heat auto-start — replaced periodic polling with a precise clock check plus real-time sync, making scheduled heat starts more accurate.
  • Check-in improvements — the check-in page now shows each heat's start time and hides heats that have already started.

For Organizers

  • Custom Penalty default — now appears first in the penalty picker with a sensible 15-second default instead of 0.
  • FAQ section — add FAQs in race settings; shown on the public race page.
  • Private preview links — share an unpublished race for review before it goes live.
  • Sidebar improvements — race management sections collapse and remember their state; the sidebar auto-collapses when opening a race.
  • Edit athlete info directly — organizers can edit a registration's info, with an automatic notification email to the athlete.
  • Athlete email export — now semicolon-separated, so it pastes correctly into email "To" fields.

For Athletes & Public

  • Spots-remaining indicator — race cards now only show "X spots remaining" once a race is actually filling up.
  • Finished Heats tab — see completed heats on the live public race page.
  • Unpaid registrations flagged — athletes with an incomplete payment see it flagged on their dashboard with a direct link to finish paying, and get a reminder email.
  • Simplified profile navigation — flattened menu for easier access to profile info, billing, and account settings.

Bug Fixes

  • Registration flow — fixed a CSRF error after signing in mid-registration, a Name/Email field mix-up on the account step, required-country validation, and several blank-field crashes (weight/height, date of birth).
  • Team registration — team size now correctly respects a division's configured min/max instead of forcing an exact count; new team members default to visible instead of anonymous.
  • Race planning — fixed crashes reordering divisions, saving a stage event with an empty distance/target, sorting the races list by status, and removing all heats.
  • Public pages — fixed a blank-page bug on private preview links, missing target-rep display for rep-based formats, hidden divisions leaking onto the public page, an unreadable white-on-white Privacy Policy/Terms page, and various mobile layout fixes.
  • Payments — fixed tax rates occasionally being looked up on the wrong connected Stripe account; abandoned checkout sessions now expire after 2 hours instead of 24, keeping spot counts accurate sooner.
  • Security — added missing authorization checks on several race/organization management and print pages to prevent cross-organization data access.
  • Names — registration and profile forms now reject emoji/junk characters in names, preventing garbled greetings in system emails.

For Organizers

  • Athlete check-in — a new check-in feature lets you mark athletes as checked in on race day.
    Access it from the race sidebar.
  • Payments & Fees page — a dedicated page in organization settings gives you a full overview of
    platform fees, Stripe fee estimates, and payment defaults. The org navigation has been reordered to
    surface this more easily.
  • Multi-currency support — races can now be priced in SEK, EUR, USD, GBP, NOK, or DKK. When
    changing a race's currency, you'll see a warning if any registrations were made in a different
    currency, and a bulk-update option to reprice existing divisions.
  • Currency-locked coupons — fixed-amount coupons are now locked to the currency they were created in, preventing mismatches.
  • Tax required fields — when tax is enabled on a race, all tax fields (VAT number, tax name, rate) are now required before saving.
  • Delete organization — organizations can now be deleted from the profile page. Deletion
    cascades to related data and is soft-deleted for safety.
  • Confirmation email on payment — athletes now automatically receive a confirmation email as soon as their payment is completed.
  • Pending registrations auto-cancel — a scheduled job cancels registrations that have been in a pending (unpaid) state for too long, freeing up spots.
  • Payment fee tracking — registration payment fees are now tracked and synced from Stripe,
    visible in the billing overview.
  • Activity log — confirmation emails are now recorded in the registration activity log.

Bug Fixes

  • Upcoming races — cancelled registrations are no longer shown in an athlete's upcoming races
    list.
  • Registration capacity — pending (unpaid) registrations are now counted against the global cap, preventing overselling.
  • Dashboard counts — cancelled and pending registrations are correctly excluded from participant counts on the race dashboard.
  • Division counts — divisions with only cancelled registrations are now counted as updatable/available.
  • Password reset email — the expiry time in password reset emails is now shown in a
    human-readable format instead of a raw timestamp.
  • Stripe Connect — checkout sessions now correctly pass on_behalf_of for connected accounts.
  • Sidebar active state — the active highlight in the organization sidebar is now scoped to the
    current organization.
  • Delete organization modal — replaced the native browser confirm dialog with a proper Flux modal for consistency.
  • PaymentsAndFees access — removed an incorrect policy check that caused a 403 error on the
    Payments & Fees page.
  • Payment mode UI — the selected payment mode card now uses the accent color instead of an
    inconsistent yellow highlight.

For Organizers

  • Heat planning — moving athletes between heats no longer prompts you to send a notification email. Moves are now silent by default. You can still notify athletes manually from the notification menu.
  • Athlete statistics redesign — the athlete statistics page has been redesigned with a cleaner layout and improved readability.
  • Race statistics tab — a statistics tab is now available on public race pages for HYROX Simulation races, showing time distribution and division breakdowns.
  • HYROX Simulation template — division list updated.
  • SEO improvements — race pages now have per-tab URLs (e.g. /race/slug/startlist), proper page titles, and structured data for better search visibility. The /pricing page now redirects to the organizer page.

Bug Fixes

  • Registration flow — two bugs in the registration flow have been fixed:
    • The liability & refund policy step was never enforced due to a wrong field name — it is now correctly required when configured.
    • Team self-registration was permanently blocked at the contact info step due to a type mismatch comparing team member count — fixed.
  • Session expiry — when a session expires (e.g. after a long period of inactivity), the app now shows a brief notification and reloads the page automatically instead of showing an error screen. Session lifetime has also been extended to 30 days.
  • Discover events — searching with a malformed URL query string (e.g. ?q[]=foo) no longer causes a server error.

For Organizers

  • Heat planning — moving athletes between heats no longer prompts you to send a notification
    email. Moves are now silent by default. You can still notify athletes manually from the notification menu.
  • Athlete statistics redesign — the athlete statistics page has been redesigned with a cleaner
    layout and improved readability.
  • Race statistics tab — a statistics tab is now available on public race pages for HYROX Simulation races, showing time distribution and division breakdowns.
  • HYROX Simulation template — division list updated.

Bug Fixes

  • Registration flow — two bugs fixed:
    • The liability & refund policy step was never enforced due to a wrong field name — it is now correctly required when configured.
    • Team self-registration was permanently blocked at the contact info step due to a type mismatch comparing team member count — fixed.
  • Session expiry — when a session expires, the app now shows a brief notification and reloads
    automatically instead of showing an error screen. Session lifetime extended to 30 days.
  • Discover events — searching with a malformed URL query string no longer causes a server error.

Heat Management

  • Bulk rename heats — new dropdown action in Heat Planning lets you set a prefix + number or letter suffix with a live preview, renaming all heats in one step (respects day filter)
  • Rename after insert — option inside the Insert Heat modal to bulk-rename in a single action

Copy Race Wizard

  • New 3-step wizard (Setup → Content → Review) for duplicating a race
  • Selectable sections: divisions, stages & events, payment & tax, Stripe account, coupons, and media
  • Race dates can be set in the wizard or left blank; new race is always created as draft

Live Dashboard

  • Redesigned layout optimized for TV/large screens
  • Auto-scrolling leaderboard per division, pausing 5s at bottom before advancing
  • QR code slide in leaderboard rotation linking to results page
  • ROXRACE logotype in header
  • Focused single-widget sub-routes (/s/leaderboard, etc.) for multi-screen
    setups
  • Fixed duplicate poll intervals causing pre-race slides to skip pages
  • Fixed leaderboard not updating with new results

Manual Time Entry

  • Accepts hh:mm:ss.ms format; inline save/cancel buttons with auto-save toggle
  • Amber border for unsaved changes, green flash on save; Enter saves, Tab moves to next field
  • Creates a FinishMarker (source=manual) so the athlete leaves the "Currently Racing" widget
  • Clears manual FinishMarker on clear / non-OK status

Schedule Print Views

  • Added per-heat, compact, and super-compact print view options
  • DNS column added to all schedule print views

Team Registration

  • Only the captain receives a Registration record when registering a team
  • Team fully dissolved when captain switches from a team to a solo division
  • DNS athletes excluded from the Currently Racing widget

Public Race Page

  • Various UX improvements to the public race page

Other

  • Milliseconds removed from all display formatters (retained in live timing finish display and manual entry)

Start Line – Timing

  • Split the heat list into separate In Progress and Upcoming tabs for a cleaner overview during a race
  • Added tab/switch UI replacing the old split-section layout, with larger tabs and better contrast
  • Moved the Start Line header into the sidebar to maximize the clock and heat area
  • Added a Reset & Remove action per athlete in in-progress heats, letting you clear a start time and remove the athlete from the heat
  • Renamed the action to "Clear start time & remove" for clarity
  • Made the Start Countdown button smaller to reduce accidental taps

Finish Line

  • Redesigned the finish line page with a compact layout where the athletes grid is the main focus

Heat Planning

  • BIB assignment now sorts heats by start time, with natural sort for heat names
  • Insert heat now uses the actual gap between heats instead of a hardcoded 15-minute interval
  • Added a subheading to the heat change notification modal to explain why it appears
  • Various heat planning UI improvements and race setup UX enhancements
  • Rebuilt athlete cards to match the unplanned panel layout

Athlete Management

  • Added a bulk action to resend invite emails to unregistered athletes
  • Account activation status icon now shown in the athlete info column
  • Email is now set as verified when an athlete or user sets their password via an invite link
  • Team member email is now optional, with a send-notification checkbox when registering

Public Pages & URLs

  • Startlist URL and heats URL now shown on the Public URLs page when heats are published

Hotfixes

  • Fixed: live green dot on tabs now only appears when there is actual live data
  • Fixed: team registrations are now deduplicated in the Currently Racing list
  • Fixed: scroll list duplication now only triggers when more than 4 athletes are on course
  • Fixed: clear button and X button now always show for a single pending finish time
  • Fixed: crash on the public race page when registration dates are not set
  • Fixed: heat auto-assign not respecting division sort order
  • Fixed: drag-and-drop placeholder rounding in heat planning

Unplanned Athletes Panel

The unplanned athletes list has been redesigned to make it easier to read and work with:

  • Two-line cards — athlete name on the first line, division and estimated finish time on the second
  • Grouped by division — athletes are sorted by division order, then by estimated finish time within each division. A
    labeled divider separates each group
  • Search now matches team members — searching for a name in heats planning will find athletes regardless of whether they are the team captain or a team member

Multi-Select & Bulk Assignment

You can now select multiple unplanned athletes at once and assign them to a heat in one action:

  • Click any athlete card to select it (checkbox appears on the right)
  • Click the "all" link next to a division header to select all athletes in that division at once
  • When athletes are selected, the panel header transforms into an action bar: choose a heat and click Assign

Overflow Assignment

When the selected heat does not have enough spots for all selected athletes, the system now handles it gracefully:

  • A dialog explains how many spots are available vs. how many athletes are selected
  • "Continue assigning to subsequent heats" checkbox — when enabled, the system fills the target heat and automatically overflows remaining athletes into the next heats in order
  • If no heats with available spots remain, a follow-up message tells you how many athletes could not be placed — they stay in the unplanned list so you can handle them manually

Heat Planning — Major Update

The heat planning page has been significantly improved for race organizers:

  • Division ordering — drag and drop divisions into the order you want. This order is used when generating heats and auto-assigning athletes.
  • Multi-day races — heats are now grouped by date with day headers. A day filter lets you focus on a single day when planning or shifting times.
  • Generate heats wizard — reorganized into tabs (Details, Divisions, Options, Preview) to reduce scrolling. Select specific divisions to include, with a live preview showing how many heats will be created.
  • Shift times — move a heat's start time forward or backward from its dot-menu. Optionally shift all subsequent heats on the same day by the same amount.
  • Rebuild start times — if heat times get scrambled, set a new start time and gap and all heats on that day will be recalculated.
  • Time gap indicator — a visual spacer between heat cards shows the gap in minutes between heats.
  • Estimated finish time — athlete registrations now show an estimated finish time based on their heat start time.

For Organizers

  • Archive races — races can now be archived to keep your list tidy. Archived races are hidden by default with a toggle to show them.
  • Race layout map — upload a layout map image in venue settings. It will be displayed on the public race page in the Venue section (tap to view fullscreen).
  • Divisions & Pricing — create and delete divisions directly from the settings page. Drag to reorder.
  • Copy participant emails — a new page lets you copy all participant email addresses for a race.
  • Payment menu — "Pricing" is now called "Payment" in the race sidebar, and "Divisions" is now "Divisions & Pricing".
  • BIB assignment — BIB numbers are now guaranteed unique when bulk-assigning.
  • Stripe receipts — receipts now show the race name and date, and display a tax breakdown when tax is enabled.
  • HYROX Simulation template — Pro Doubles Men, Pro Doubles Women, and Pro Doubles Mixed divisions added.

For Athletes & Public

  • Race layout map — if the organizer has uploaded a venue layout, it is now shown on the race page under the Venue section.
  • Live timing on mobile — the live timing views are now optimized for phones.
  • Startlist improvements — columns are now sortable. The tab has been renamed from "Start List" to "Startlist".
  • Results tab — always visible on race pages, even before results are published.
  • DNS support — Did Not Start (DNS) status is now properly handled across heats, startlist, and results views.
  • Help center — a Help link is now visible in the navigation header.

Bug Fixes

  • Team registrations and team member display corrected across heats, startlist, and results.
  • Heats and unplanned panels now scroll independently.
  • Heat change notifications only trigger when the startlist is published.

The heat planning page has been significantly improved for race organizers:

  • Division ordering — drag and drop divisions into the order you want. This order is used when generating heats and auto-assigning athletes.
  • Multi-day races — heats are now grouped by date with day headers. A day filter lets you focus on a single day when planning or shifting times.
  • Generate heats wizard — reorganized into tabs (Details, Divisions, Options, Preview) to reduce scrolling. You can now select specific divisions to include, with a live preview showing how many heats will be created.
  • Shift times — move a heat's start time forward or backward from its dot-menu. Optionally shift all subsequent heats on the same day by the same amount.
  • Rebuild start times — if heat times get scrambled, set a new start time and gap and all heats on that day will be recalculated.
  • Time gap indicator — a visual spacer between heat cards shows the gap in minutes between heats.
  • Estimated finish time — athlete registrations now show an estimated finish time based on their heat start time.

For Organizers

  • Archive races — races can now be archived to keep your list tidy. Archived races are hidden by default with a toggle to show them.
  • Race layout map — upload a layout map image in venue settings. It will be displayed on the public race page in the Venue section (tap/click to view fullscreen).
  • Divisions & Pricing — you can now create and delete divisions directly from the settings page. Drag to reorder.
  • Payment menu renamed — "Pricing" in the race sidebar is now called "Payment", and "Divisions" is now "Divisions & Pricing".
  • Copy participant emails — a new page lets you copy all participant email addresses for a race.
  • BIB assignment — BIB numbers are now guaranteed unique when bulk-assigning.
  • Stripe receipts — receipts now show the race name and date, and display a tax breakdown when tax is enabled.
  • HYROX Simulation template — Pro Doubles Men, Pro Doubles Women, and Pro Doubles Mixed divisions added.

For Athletes & Public

  • Race layout map — if the organizer has uploaded a venue layout, it is now shown on the race page under the Venue section.
  • Live timing on mobile — the live timing views are now optimized for phones.
  • Startlist improvements — columns are now sortable. The tab has been renamed from "Start List" to "Startlist".
  • Results tab — always visible on race pages, even before results are published. Shows a friendly placeholder for upcoming races.
  • DNS support — Did Not Start (DNS) status is now properly handled across heats, startlist, and results views.
  • Help center — a Help link is now visible in the navigation header.

Bug Fixes

  • Team registrations and team member display corrected across heats, startlist, and results.
  • Heats and unplanned panels now scroll independently.
  • Heat change notifications only trigger when the startlist is published.

What's New

Discount Coupon Codes

Race organizers can now create discount codes tied to specific races. Codes support both fixed and percentage-based discounts and are applied automatically during registration.

DNS Status (Did Not Start)

Full DNS status support has been added across the platform — in the participant list, heat planning, and results. Organizers can mark athletes as DNS directly from the interface.

Heat Assignment Notifications

Athletes now receive an automatic email when assigned to a heat. Organizers can also trigger notifications manually.

Live Timing Optimized for Mobile

The live timing views (start and finish) are now fully optimized for mobile phones — useful for timing staff working on-course.


Improvements

Startlist

  • Startlist columns are now sortable
  • The Startlist, Heats, and Results tabs are now visible before publishing (visible to organizers only)
  • The Results tab is always shown, with placeholder text tailored to upcoming vs. past races
  • Consistently renamed from "Start List" to "Startlist"

Registration & Team Management

  • Team members are now managed as a unit — moving or removing affects the whole team
  • First and last name are now entered separately when adding a new team member
  • The team captain is clearly marked with a chip in the participant view
  • Team members now display correctly inline in participant lists

Race Management

  • The heats page now has an athlete name search field (replacing the division filter)
  • The planned and unplanned heat panels now scroll independently
  • Heat change notifications are now only triggered after the startlist is published
  • Publish buttons for race and startlist are now toggle switches
  • The race header now shows both the published and startlist status as pills side by side
  • Payment status and amount can now be edited directly in the registration edit modal

Other

  • Country selection is now a dropdown with all countries (replacing a free-text field)
  • The athlete list now defaults to sorting by last name

Bug Fixes

  • CSV import now works correctly on Laravel Cloud (temporary file path issue resolved)
  • Phone number is now handled consistently in the CSV import template and parser
  • The password setup link is now valid for 48 hours (previously 60 minutes)
  • Emergency contact fields on the profile page were incorrectly read-only — now fixed
  • Merchandise size values and validation fixed on the profile page
  • Athlete search now matches on the full name (first + last name combined)
  • Participant count on race cards was incorrect — now fixed
  • Team registrations missing a team ID were incorrectly displayed as separate captains — now fixed

Live timing overhaul

The live timing experience has been significantly improved for race day:

  • Live tab on race page — A dedicated live tab on every public race page shows real-time heat status and results. Shorter
    URL for the public dashboard makes it easier to display on big screens.
  • Merged start & finish views — Simplified live UX with a unified dashboard for managing heats from start to finish.
  • Wall clock on finish line — The finish line view now shows the current time alongside elapsed heat time.
  • Keyboard shortcuts — Use keyboard shortcuts to record finish times faster at the finish line.
  • Multi-word athlete search — Search for athletes by first and last name simultaneously in the timing interface.
  • Countdown overlay improvements — Better heat countdown display on the start line view.

Team member email notifications

Team members now receive an email notification when the team captain completes registration and payment.

Help center

A new help center is live at roxrace.com/docs with guides covering getting started, features, pricing, and FAQ.

Timezone support is implemented both on user settings and race settings.

Roxrace is live!