Documentation

RaceCraft Release Notes

This document tracks all notable changes to RaceCraft across releases.


v2.6.1 07/09/26

✨ New Features

  • Modern checkpoint editing: Checkpoints now use a cleaner card-based layout, with clearer controls for distance, drop bags, and editing checkpoint details
  • DEM fallback for missing GPX elevation: GPX uploads can now fill missing <ele> values from Mapterhorn Terrarium tiles before terrain analysis, with cache and safe partial fallback behavior for long routes
  • Easier waypoint selection: Select or deselect all imported waypoints at once before adding them as checkpoints
  • Pick up where you left off: Sign in on an empty planner and RaceCraft greets you with your most recent saved plans, one tap to load. Anything you were already working on is never disturbed, and "Start fresh" tucks the prompt away for the rest of your visit

🎯 Improvements

  • Summary cards now collapse into a more compact layout on smaller screens and make better use of available space on desktop
  • The Race Day countdown card now fits neatly into its summary area without taking over the page
  • Checkpoint and segment dialogs have improved keyboard focus management, clearer spacing, and a more reliable layout on short screens
  • Checkpoint controls now make it clearer when a name limit has been reached, when a checkpoint can be added, and how to edit Start and Finish
  • Download and modal controls are more reliable when an export or share action is repeated
  • Save buttons now show a clear saving state and prevent overlapping save actions while a plan is being stored
  • Fly deployment configuration and project documentation have been tidied up for the current hosting setup
  • Corrected the Garmin export instructions, which told you to import the workout into Garmin Connect - something Garmin Connect cannot do. The course imports there as before; the workout has to be copied onto the watch over USB, and the export window now says so
  • Added a full Garmin import guide to the documentation covering both files, the USB steps, the extra tool Macs need for music-capable watches, and a troubleshooting section

🛠 Bug Fixes

  • Target Time mode now correctly hides fatigue, climbing, and wind controls that do not apply to a fixed finish time
  • Checkpoint names are preserved exactly as entered, including capitalization and named blank checkpoints
  • PDF drop bag options are disabled when a plan has no drop bags, avoiding irrelevant export choices
  • Fuel quantity controls no longer shift when comparison values appear
  • Wind-adjusted pacing now handles imperial base pace correctly and avoids applying provisional estimates in Target Time mode
  • Checkpoint dialog names remain in the correct order, Save and Cancel stay reachable, and the editor returns focus to the control that opened it
  • Fixed Garmin .FIT files being written with an invalid checksum, which made Garmin Connect reject both the workout and the course. Files now pass Garmin's own integrity check
  • Fixed the Garmin course download failing on a plan loaded from a saved backup file. The course is now built from the route stored in the plan itself, so it still exports after the original GPX upload has been cleaned up from the server

v2.6.0 24/08/26

✨ New Features

  • Export your plan to your Garmin watch: Turn your race plan into files your watch understands: a Workout that guides your pacing segment by segment and beeps at every checkpoint, and a Course that puts the route, climbs, and checkpoint alerts right on your wrist. Download one or both from the export menu, then sync them to your watch
  • Weather along the course: Each segment now shows the temperature at the hour you reach it and the wind relative to your direction of travel, so you can see which climbs are into a headwind and which descents get a push. Racing a past event? You'll see the conditions that were actually recorded that day
  • Wind-adjusted pacing: The forecast wind now changes your predicted pace and finish time, not just the weather panel. Headwind sections come out slower, tailwind sections a little faster, and a new Wind column shows what each one costs or saves per kilometre. A Course Wind Exposure setting scales the effect for sheltered, mixed, or exposed terrain, because a forecast measured over open ground overstates what you feel in a forest. Wind needs a race date within about 16 days so a forecast exists to apply
  • Install RaceCraft to your home screen: RaceCraft can now be installed on your phone like an app, giving you one-tap access to Race Day on race weekend. Updates arrive smoothly in the background with a friendly notice when a fresh version is ready
  • Automatic terrain suggestions: After importing a GPX route, RaceCraft can suggest a terrain type for each segment based on the climbs, gradients, and known trail surfaces along the way. Suggestions fill themselves in and you stay in control - anything you pick by hand is kept
  • Clearer kilometre/mile choice: The setup screen now includes a simple unit selector that stays in sync with the planner and is easy to use with a keyboard
  • Site-wide footer: All public pages now include consistent navigation, copyright information, and links to RaceCraft's Instagram and Facebook pages

🎯 Improvements

  • Repeat visits now load noticeably faster thanks to smarter caching, and a notice tells you when the app has updated itself
  • Wind-adjusted pacing fetches its forecast the first time you calculate or open a saved plan with a race date, which can add a few seconds once - the forecast is then reused for about three hours
  • Wind numbers in the results table are marked as estimates (Wind*) when they come from opening a saved plan rather than a full simulation, so provisional guesses are never mistaken for calculated results
  • The What's New window now shows the release date alongside the version
  • Weather Along the Course now handles races further ahead than forecasts reach (~16 days) gracefully, and past races show recorded conditions once the weather archive has caught up - usually within a few days
  • The Weather Along the Course panel stays neatly tucked away until there's something to show, with a short explanation whenever weather isn't available yet (no race date, too far out, no route, or the service is unavailable)
  • Weather controls remain ready to use as soon as the planner opens, including for loaded plans and imminent races
  • Where weather isn't set up on a server, the app explains that instead of hiding the weather section
  • Refreshed landing-page headings and descriptions so it's easier to understand what RaceCraft does at a glance

🛠 Bug Fixes

  • Fixed weather refresh timing when route coordinates, race dates, or saved plans are loaded so the widget receives the correct location and date
  • Corrected terrain suggestion state so suggestions are requested only after a fresh GPX or waypoint import and never overwrite terrain choices you made yourself
  • Prevented startup logging from crashing on Windows consoles that cannot encode info-symbol characters
  • Opening a different saved plan no longer leaves the previous plan's course weather on screen

v2.5.3 15/08/26

🛠 Bug Fixes

  • Fixed the production deployment image so the app starts reliably on Fly
  • Resolved the release regression that caused racecraft.win to return a blank page behind a Fly 502/connection-reset proxy error

v2.5.2 15/08/26

🛠 Bug Fixes

  • Fixed share-plan email reuse so existing share tokens are re-canonicalized to the RaceCraft host before sending

✨ New Features

  • Added route-based sunlight indicators (sunrise, sunset, civil dawn, civil dusk) to Planner and Race Day
  • Added Planner sunlight timeline strip, checkpoint phase chips, and phase-based recommendations
  • Added a standalone Planner sunlight pill beside the Segment/Checkpoint table, with sunrise and sunset markers tied to the matching segment rows
  • Added Race Day live sunlight status updates tied to entered actual checkpoint timing
  • Added a new Planner weather widget with tabbed modes for Current conditions and Race Day Window
  • Added race-window weather view showing Day Before, Race Day, and Day After cards based on the selected race date
  • Added graceful partial availability handling: unavailable race-window days now render as Not available yet instead of blocking the full widget

🛠 Improvements

  • /api/calculate now returns a normalized sunlight payload for multi-day race timelines
  • Added timezone fallback metadata for deterministic behavior when timezone resolution is unavailable
  • Simplified the Planner sunlight summary card to show only a shortened timezone label
  • Removed the extra Planner sunlight summary status and recommendation lines to keep the card compact
  • Weather widget values now update dynamically when the metric/imperial units toggle is switched (no page reload required)
  • Improved weather card contrast so forecast icons remain visible against card backgrounds

v2.5.1 20/05/26

✨ What's New

  • Better Race Day Experience: The Race Day page now shows your race as a clear, easy-to-follow timeline organized by segments. Track your progress through each leg of your race at a glance, with all the key information right where you need it
  • Stay Informed About Updates: You'll now see what's new whenever RaceCraft updates, so you never miss out on new features and improvements

🎯 Improvements

  • Richer Race Day Information:
    • Your segment notes now appear on Race Day cards for quick reference during your race
    • See how long you're actually spending at each checkpoint with color-coded indicators that compare your planned vs actual stop times
    • "Segment Distance" labels are now clearer and easier to understand
    • Cleaner, less cluttered display with streamlined information
  • More Reliable Performance: Behind-the-scenes improvements that make the app faster and more stable

🛠 Bug Fixes

  • Race Day Tracking Improvements:
    • Fixed issues where some race metrics weren't displaying correctly
    • You can now clear arrival and departure times when needed, and all your projections will update correctly
    • ETA calculations are now more accurate throughout your race
    • Fixed crashes that could occur with certain race plans
  • Stability Improvements: Resolved several issues that could cause the app to behave unexpectedly

v2.5.0 14/05/26

✨ New Features

  • New interactive route map above the elevation profile with Street and Satellite view options
  • Elevation-profile hover now syncs with the map and shows richer timing details (including projected time of day when a start time is set)
  • PDF exports now include Drop Bag Cue Cards to make aid-station execution easier during race day
  • Added water carry strategy guidance in cue cards for clearer between-checkpoint planning

Improvements & Fixes

  • Share Plan links and share-by-email flows are more reliable
  • Route loading now handles invalid files and failures more cleanly
  • Stability and access-control improvements for connected account data

v2.4.0 12/05/26

✨ New Features

  • New flexible nutrition system with reusable custom fuel types for gels, drink mixes, bars, and more
  • Plan fuelling per segment for far more accurate race nutrition strategies
  • Brand new drop bag fuel planner with editable checkpoint packing lists
  • Automatic fuel quantity aggregation makes drop bag prep dramatically easier
  • Carb coverage indicators instantly highlight under-fuelled checkpoints
  • Race-wide fuel summaries give a clear picture of total nutrition requirements
  • PDF exports now include detailed drop bag nutrition packing summaries for race day execution
  • Start and finish checkpoints now behave like full aid stations across the planner and PDF exports
  • PDF exports now include “Leave Checkpoint With” targets for clearer fuel and water planning
  • Race details like athlete name and bib number now save with your plan and appear in PDF exports

Improvements & Fixes

  • More reliable elevation charts in PDF exports
  • Better loading feedback when opening and switching race plans
  • Improved draft restore behaviour when loading race plans
  • Stability improvements across fuelling, checkpoints, drafts, and PDF exports

v2.3.2 05/05/26

✨ New Features & Improvements

  • Share Plan: share any race plan with others via a time-limited link or email. Recipients get a one-click import that loads the plan into their own RaceCraft session for independent editing
    • Generate a 24-hour share link from the overflow (⋮) menu or from any plan item in the Load Plan modal
    • Optionally send the link directly to someone's email address
    • Recipients visit the link and confirm to import - the plan is theirs to edit and save as their own
    • Works for both saved server-side plans and anonymous/localStorage plans

v2.3.1 14/04/26

✨ New Features & Improvements

  • Elevation chart: clickable segments and checkpoints, hover effects, and aligned click/hover detection radii
  • Clickable Segment/checkpoint rows: you can now click on the rows and it opens the segment/checkpoint editing screen
  • Custom carb intake table added to the segment notes modal with a live Total Custom Carbs summary
  • Segment stats panel added to the top of the segment notes modal
  • Custom fuel column included in PDF drop bag table and tags; Start bag tag included so first-segment fuel is visible
  • Terrain difficulty dropdown added to the segment edit modal, synced back to the left panel on save
  • Centralized terrain options, removing the unused design spec

Fixes

  • OAuth: preserve race plan and redirect back after Google login; validate return URL before redirecting

v2.3.0 10/04/26

✨ New Features & Improvements

  • Segment View: a brand new dual-row race plan table! Segments and checkpoints each get their own row, making it much easier to scan splits, stop times, nutrition, and hydration at a glance. Toggle between Segment View and the original Classic View with a single click
  • Wall-clock arrival & departure times: when a race start time is set, Segment View now shows the real-world time you expect to arrive at and depart each checkpoint
  • Drop bag badge in Segment View: checkpoints with a drop bag show a badge directly in the table row so you can see at a glance where your bags are waiting
  • Per-checkpoint stop time overrides: set a custom stop time for individual checkpoints without affecting the global default. A badge on the checkpoint label shows the override, and clicking it removes it instantly
  • Course Difficulty column: a new Course Difficulty column now appears in both Segment View and Classic View (and in the PDF export), showing the terrain and gradient difficulty for each segment
  • Segment notes: add free-text notes to any segment directly in the race plan table. Notes are saved with your plan and included in the PDF export
  • Checkpoint notes in PDF export: checkpoint notes you've added now appear in a dedicated table at the end of the exported PDF, with alternating row colors and a clear header
  • Auto-import waypoints for known races: when a known race is selected, all waypoints are imported automatically. Manual waypoint import UI is retained for GPX uploads
  • Custom checkpoint names hide the CP-number prefix: when a checkpoint has a custom name, only that name is shown (e.g. "Aid Station Alpha" instead of "CP2 Aid Station Alpha") in elevation profile labels, hover tooltips, and terrain difficulty dropdowns

🛠 Bug Fixes

  • Fixed a NaN guard issue and deduplicated pacing restore logic that could cause incorrect pace values to persist after editing

v2.2.3 09/03/26

✨ New Features & Improvements

  • New feature: There is now a helpful tooltip that appears when you hover your mouse for pace warnings in the Race Plan Table
  • New Race Day Countdown card! Set your race date in the Race Day Timings section and a live countdown to race day will appear in your results summary - colour-coded green, orange, or red as the date approaches
  • Each input section in the Race Configuration panel is now collapsible. Sections are collapsed by default showing just the title and a brief description, and can be expanded on demand - making it easier to navigate the planner without scrolling past settings you're not actively using

🛠 Bug Fixes

  • There was a small issue with the Final Pace calculation - it included the terrain skill regardless if it was enabled or not. This is now fixed and tidied up in this release
  • The technical skill level for the terrain difficulty section was being applied to the final pace regardless of whether it was enabled or not. This has been fixed in this release!

v2.2.2 06/03/26

🔥 Hot Fix

  • The cache busting was missing from 8 shared modules meaning there were cache issues causing browser instability when loading the app if it had been cache previously. This release fixes the issue.

v2.2.1 05/03/26

✨ New Features & Improvements

  • Good news! You can now use Google to securely sign-up/sign-in! Less steps to get access to your race plan. You can still use your email/password if you prefer - both methods will work and as long as you sign-in using the google account that has the same email address, your accounts will be linked
  • Added a metric/imperial units toggle button! Now you can easily toggle between your preferred units
  • Other minor UI improvements including changing the wording from "calculate" to "simulate" to more accurately describe what RaceCraft does 🏁

🛠 Bug Fixes

  • no bugs were squashed in the making of this release

v2.2.0 04/03/26

✨ New Features & Improvements

  • Onboarding screen now released! A popup now walks you through setup whenever you have loaded the planner for the first time. It helps the user (YOU!) with setting up RaceCraft quickly with less of the struggle and more of the "what happens in my upcomming race" 🎉
  • Improvement: removed the now redundant "total number of checkpoints" input field. This was cluttering the UI and you can already add/remove checkpoints using the + symbols

🛠 Bug Fixes

  • When setting the avg checkpoint time to 0mins (or leaving it blank) there was a small bug where the default became 5mins. Fixed in this release
  • Drop Bag Contents for Each CP now calculates start to finish requirement if no drop-bags added.
  • If the avg cp stop time was set to 0mins, it defaulted to 5mins which blew up the total cp time. In this release, if the cp stop time is set to 0mins or left blank, it defaults to 0mins.

v2.1.5 03/03/26

✨ New Features & Improvements

  • Added checkpoint data to UTA100, UTA50 and UTMB-Miler 🎉
  • Added all the OuterLimits races for 2026

🛠 Bug Fixes

  • the version-badge was navigating to a broken link - fixed in this release

v2.1.4 03/03/26

🛠 Bug Fixes

  • Critical bug fixed with elevation gain/loss not being calculated correctly when loading known races.
  • Uploading GPX files were unaffected by this bug
  • Frontend display for the gpx-info box now displays the same information as the gpx upload method

v2.1.3 02/03/26

✨ New Features & Improvements

  • Name & Save modal: You can now name a race-day plan
  • Race Day reset improvements: Clearing your plan now properly removes the sync banner and fully resets the state.
  • PDF export layout improvements: Better spacing and cleaner formatting in exported plans.
  • Calculation reliability upgrades: Refined exception handling for more stable plan generation.

🛠 Bug Fixes

  • Resolved cancel button race condition in the Name & Save modal.
  • Additional fixes identified during PR review.

v2.1.2 27/02/26

Features

  • Enhance UI with terrain and fatigue toggle buttons; old checkboxes were difficult to see and click on
  • You can now show your support for this app by buying me an energy gel! Just tap the energy gel in the top right hand corner of the page - thank you so much for showing some love!
  • You can now sign-in on any page - not just the landing/planner/race-day pages - yay for less clicking and navigating around
  • Documentation has been updated for more better user understanding

Bug Fixes

  • Some minor bugs were squashed in this release - the app is now more stable! If you notice anything, please report via the contact page 🐛

v2.1.1 25/02/26

Features

  • Implement 12h/24h time format toggle across all pages and add utility functions for time formatting

v2.1.0 25/02/26

Features

  • Shareable Race Day link for non-users! 😮 Now you can share youre Race Day plans with your support crew without them needed to create an account or sign-in.
  • Crew or support can update real arrival and departure times, and those changes ripple forward through every remaining checkpoint, recalculating what the rest of the race now looks like. It takes the plan from a static prediction into a dynamic strategy.
  • All updates are synced with the original owner/create of the plan so all users stay up to date with what is happening on race day
  • No reception? No problem! The app will store all the data on your device and sync to the server when connected again.

Bug Fixes

  • Fix issue where sign-in was not recognised on the Race Day page

v2.0.0 23/02/26

Features

This version brings an exciting new feature:

🎉 A Race Day Page! 🎉

  • A page dedicated for Race Day with live execution of race plans
  • "Exporting to Race Day" creates an independent, editable Race Day plan
  • Because we know the crew are out and about, this page is mobile-first, optimized for one-handed use on mobile and tablet screens
  • Editable arrival and departure times for each checkpoint
  • Instant recalculation of checkpoint times, cumulative time, and finish ETA
  • Dynamic downstream timing adjustments after edits
  • A Crew-friendly editing experience

v1.9.4 22/02/26

  • Default hidden columns view for race plan table
  • Version badge now opens a "Whats New" window
  • Documentation names now rendered in title case

v1.9.3 22/02/26

  • Fix #175 issue with landing page icon for ios home screen shortcut

v1.9.2 20/02/26

  • Fix: issue with known races not loading in some environments due to path handling (added fallback paths for local dev)

v1.9.1 20/02/26

  • Fix: Preserve original GPX filename for display and API usage, separate from safe storage filename #148
  • Fix: Load waypoints from known races #136

v1.8.8 16/02/26

  • Minor improvements to documentation and added release history. No functional changes in this release.

v1.8.7 16/02/26

New Features

  • Users can now import and claim local storage plans #164
  • Keyboard & Input UX - Checkpoint Distances
    • Tab navigation: Moves focus to next/previous .checkpoint-distance input (Shift+Tab supported).
    • Enter commit: Pressing Enter commits the field: validate, sort, recalc (if GPX loaded), and persist draft.
    • Change-only updates: UI reloads/recalculations run only when the input value actually changed (avoids unnecessary work).

Bug Fixes:

  • Fixed PDF export bug where race plan table was not rendering correctly due to missing styles.
  • Fixed issue with checkpoint distance inputs not becoming editable after certain interactions by ensuring proper event handling and state management.

v1.8.6 15/02/26

New Features

  • Local Browser Storage for Unauthenticated Users #156
  • Move sign-in notification to top center for better visibility and aesthetics #157
  • Add local browser storage fallback for user identification when Supabase is not configured #156
  • Auto-Save Race Plan to Local Storage (Draft Persistence) #155
  • Feat: implement draft persistence system for race plans using localStorage #155

Bug Fixes

  • no bugs in this release

v1.8.5 14/02/26

New Features

  • NEW FEATURE: Automatic checkpoint sorting by distance #146
    • Checkpoints are automatically sorted in ascending order when distance is changed
    • Sorting preserves all checkpoint metadata (names, icons, notes, dropbags, terrain)
    • Backend defensive sorting ensures data integrity regardless of input order
  • NEW FEATURE: Insert checkpoint between existing checkpoints #146
    • "+" button between checkpoint rows for easy insertion
    • Automatically suggests midpoint distance between adjacent checkpoints
    • Auto-sorts after insertion to maintain proper order
  • NEW FEATURE: Delete individual checkpoints #146
    • Trash icon button on each checkpoint row
    • Confirmation prompt for checkpoints with custom names/notes
    • Minimum checkpoint validation (at least 1 required)
  • IMPROVEMENT: Backend validation for checkpoint data #146
    • Validates ascending order, no duplicates (within 10m)
    • Rejects negative distances
    • Descriptive error messages for validation failures

v1.8.4 11/02/26

New Features

  • Added "Distance" column showing segment distance (not cumulative) [#145]
    • Placed between Segment and Cumul Dist columns for better clarity
    • Can be hidden like other columns
    • Included in PDF exports
  • Column visibility controls - show/hide table columns [#145]
    • Click column headers to hide columns
    • Hidden columns displayed as chips above table
    • Click chips to restore columns
    • "Show All" button to restore all columns
    • Column visibility persisted in localStorage
    • PDF export respects column visibility
    • CSV export always includes all columns

Improvements

  • Column visibility system now only allows hiding/showing columns that are currently relevant [#145]
    • "Time of Arrival" column can only be hidden if start time is set
    • "Fatigue" column can only be hidden if fatigue tracking is enabled
    • "Terrain" column can only be hidden if terrain difficulty is enabled
    • "Course Difficulty" column can only be hidden in target time mode
    • Prevents confusion from hiding columns that aren't being used

Bug Fixes

  • Fixed missing cumulative_distance in loaded plans [#145]
    • Old saved plans now have distance and cumulative_distance calculated on load
    • Applies to both local file storage and cloud storage
  • Checkpoint metadata not saved/loaded correctly in Supabase due to missing field in database schema [#143]

v1.8.3 11/02/26

New Features

  • Add version number to main screen [#20]
  • Add Buy Me a Coffee link to about page [#22]
  • Add top action bar with menu toggle and profile button [#142]

Bug Fixes

  • Resolve issue with documentation on mobile screens rendering poorly [#140]
  • Resolve issue with PDF export modal input field labels difficult to read in dark mode [#138]

v1.8.1 10/02/26 - Hot Fix Release

Bug Fixes

  • Resolves issue with tooltip ghost rendering after mouse moves away

v1.8.0 10/02/26

Security

  • Fixed XSS vulnerabilities in checkpoint name/metadata rendering
  • Improved file upload validation with case-insensitive XML pattern checks
  • Added type guards for checkpoint metadata access
  • Sanitized error messages to prevent information leakage

New Features

  • GPX waypoint parsing and import as checkpoints
  • Checkpoint editing with custom names, icons, and notes
  • Light/Dark/Auto theme support with persistent preference

Bug Fixes

  • Fixed stale checkpoint metadata when importing waypoints
  • Improved error handling with detailed logging

UI Improvements

  • Fixed theme switching for elevation chart colors
  • Fixed modal escape key handler memory leak
  • Added missing CSS variables for proper dark mode support

v1.7.0 08/02/26

New Features

  • Distance-Adaptive Base Pace Estimation
    • Calculate base pace from known race performances (5K to ultra)
    • Uses Riegel's formula for performance prediction
    • Automatic intensity downshift for ultra-distances (>42.2km)
    • Toggle between manual pace entry and performance-based estimation
    • Seamless integration with existing pacing calculations

v1.6.2 06/02/26

Improvements

  • Added cache busting to static assets by appending version query parameter in template

v1.6.1 06/02/26

Terminology Update

  • Renamed "Gels/Sachets" to "Servings" throughout the application
    • UI labels, variable names, API fields, and exports all updated
    • Maintains backward compatibility: accepts both carbs_per_gel and carbs_per_serving in API
    • CSV/PDF exports now display "Number of Servings" instead of "Number of Gels"
    • Hover tooltips and documentation updated with new terminology

New Features

  • Added about page with markdown content and new navigation menu
  • New PDF export with improved formatting and elevation profile integration

Improvements

  • Elevation profile plot now uses linear distance scale with bounded range
  • Replaced checkpoint input toggle with button
  • Removed export/import button

Bug Fixes

  • Resolved bug with target time validation where achieved times slightly above target were incorrectly flagged as invalid due to strict equality check - now uses a tolerance window to allow for minor allocation variability while still enforcing realistic target times

v1.6.0 05/02/26 - Target Time Mode

New Features

  • Target Time Mode: Plan by desired finish time instead of pace
  • Revised UI to support target time input and display estimated finish time

Improvements

  • Limit number of checkpoints to 30 for better performance and usability
  • Distance column now shows accumulated distance at each checkpoint for clearer pacing strategy

Bug Fixes

  • Fixed flat-terrain pace calculation where a value of 0 resulted in a default of 30 due to falsy check

v1.5.3 03/02/26

Improvements

  • Move all docs to folder and organize
  • Update README with new links

v1.5.0 03/02/26 - Known Races Feature

New Features

  • Display loaded plan name in UI title [#64]
  • Add manual import for local and unowned plans [#59]
  • Support anonymous user plans in list/load/delete endpoints [#56]

Bug Fixes

  • Clear form inputs and state on user sign-out [#60]

v1.4.1 02/02/26

Bug Fixes

  • Fix Supabase client initialization to be lazy and handle invalid credentials gracefully
  • Improved logging for authentication processes
  • Input fields now cleared on GPX load or user sign-out to prevent stale data issues

v1.4.0 02/02/26 - Supabase Integration

New Features

  • Supabase Integration for User Authentication and Data Storage

v1.3.4 31/01/26

Bug Fixes

  • Fix decimal input validation for numeric fields
    • Change input type from 'number' to 'text' for all decimal-input fields
    • Fields updated: avg-cp-time, carbs-per-hour, water-per-hour, carbs-per-serving, checkpoint-distances
    • Enables proper JavaScript control over decimal input without browser interference

v1.3.3 31/01/26

Bug Fixes

  • Fix decimal input for checkpoint distances
    • Change input type from 'number' to 'text' to allow JavaScript full control
    • Maintain pattern and inputmode for mobile keyboard support

v1.3.2 30/01/26

New Features

  • Validation Rules Implemented:
    • Real Numbers: Inputs must be valid positive numbers
    • Distance Limits: Cannot exceed total route distance
    • No Duplicates: All checkpoint distances must be unique
    • Ascending Order: CP2 > CP1, CP3 > CP2, etc.
    • Immediate Feedback: Errors show instantly with visual indicators
    • Keep user informed and prevent invalid submissions to input fields

v1.3.1 30/01/26

Bug Fixes

  • Quick fix to resolve port issues with Docker file

v1.3.0 30/01/26

Improvements

  • CSV export now doesn't leave behind temporary files on the server
  • Single parent directory for data storage, configurable via environment variables

v1.2.2 30/01/26

New Features

  • Add drop bag plan to each of the tooltip hovers in the elevation profile plot [#26]

Bug Fixes

  • Fix incorrect serving count in drop bag plan when carbs per serving is specified
  • Fix incorrect hover info tooltip for skill level

Improvements

  • Improve checkpoint naming format in CSV output

v1.2.1 29/01/26

New Features

  • Add iOS Home Screen and PWA meta tags for improved app integration [#23]

Improvements

  • Update skill level descriptions for clarity and improved user guidance
  • Update technical skill level descriptions and options
  • Update GPX upload handling to display distance and elevation gain, and fetch elevation profile
  • Update header background color and adjust subtitle opacity
  • Remove background from logo and update CSS styling for header text
  • Update fav-icon to circle

Last Updated: August 24, 2026