Greg Rice's Rally Bonus Planner — Help

← Back to app

The web-based Rally Bonus Planner is / will be a replacement for my Rally Planning spreadsheet that I first started working on back in 2013. Hundreds of rally riders over the years have used my spreadsheet for many different rallies including the Iron Butt Rally. Many top ten riders of past Iron Butt Rallies have also used my spreadsheet. All of the functionality from the spreadsheet will be implemented in the new web-based Rally Planning app. With the new web-based app you will be able to build out and format the the bonus names and then export the bonus list to a GPX file or and Excel spreadsheet. You will start by entering a bonus name for a long-distance motorcycle rally: enter or import bonus locations for each leg, look up their address, timezone, sunrise/sunset and 10-day weather automatically, see them plotted on a map colored by point value, and availability by shape. Export the finished list as GPX file (for a GPS or mapping program) or XLSX (for a spreadsheet).

Benefits of my rally planning web app

I developed the spreadsheet to help me get to routing faster in my mapping programs (now Basecamp), and it has evolved over the past 12 years.

  • Easy to import bonus data, including points files from a rally master, and automatically create a GPX file ready for Basecamp or a GPS.
  • Easy bonus name creation with bonus code, points, and availability.
  • Automatic calculation of time zone, sunrise, and sunset based on latitude and longitude — good information for daylight-only bonuses.
  • Easy to tag a bonus's availability: anytime, daylight only, group photo, etc.
  • Easy to tag a bonus as part of a combo bonus.
  • Automatic bonus symbol selection based on points value and bonus availability.
  • Easy to add comments to a bonus that carry through into Basecamp and then your GPS, so you can see them riding up to a bonus.
  • A Google Maps link is created for each bonus location — Street View in many cases.
  • Generates a formatted GPX file for Basecamp and/or a GPS that includes comments, sunrise, and sunset times.
  • Fast entry into Basecamp with the generated GPX file, bonus symbols already set by point value and availability. You can also load the GPX file directly onto a GPS.

The page is organized by rally → leg → bonus. A rally is the overall event (e.g. "2027 Iron Butt Rally"). Each rally has one or more legs (the segments between checkpoints). Each leg has a list of bonuses — the individual bonus locations worth points that you build a route out of for the rally.

A quick walkthrough of the app — signing up, creating a rally and leg, importing bonuses, running lookups, and the map view.
Getting started

Creating an account

From the sign-in screen, click Need an account? Sign up. Enter your email, a password, and your name, then click Sign up. You'll be signed in immediately and dropped into the main app with an empty rally list.

Create your account form with Email, Password and Name fields
The sign-up form — email, password, and display name are all that's required.

New accounts sign up as a regular rider. If you need admin access (to manage other users, see below), ask an existing admin to promote your account from the admin portal.

Signing in

Enter your email and password on the sign-in screen and click Sign in. Forgot your password? Use the Forgot password? link to request a reset email.

Sign in form with Email and Password fields
The sign-in screen. Sessions stay active across browser restarts, so you generally only need to do this once per device.

How the app is organized

Everything lives under three levels, shown in the left-hand sidebar once you're signed in:

  1. Rallies — the top-level events you're planning for(eg.. 2027 Iron Butt Rally ). Click + New under "Rallies" to add one.
  2. Legs — appear once you select a rally. Each leg is a part of a rally which you would create a route with its own start/end time, used to calculate sunrise/sunset for bonuses on that leg.
  3. Bonuses — appear once you select a leg, in the grid on the right. This is where you'll spend most of your time: entering codes, coordinates, points, and availability.
Sidebar showing a selected rally and its list of legs
Selecting a rally reveals its legs underneath. Selecting a leg loads its bonuses into the grid on the right.

Units & time format

Click ⚙ Settings in the header to choose Imperial (°F, mph, miles, gallons) or Metric (°C, km/h, kilometers, liters), and 12-hour or 24-hour time. This covers riders outside the US planning a rally in kilometers and Celsius.

Settings modal with Units set to Imperial and Time format set to 12-hour, and Cancel/Save buttons
The Settings dialog, opened from the ⚙ Settings button in the header.

Units affects the weather forecast popup's temperatures and the Hours & Miles worksheet's speed, distance, and fuel columns (Avg MPH/MPG, Miles, Gallons become Avg km/h, Avg km/L, Km, Liters). Time format affects every place sunrise/sunset is shown — the grid columns, a bonus's popup, and GPX/XLSX export previews.

Both are saved to your account, so they follow you to any device you sign in from. Changes apply immediately — no need to reload the page.

Using this app in another language

This app is only written in English, but riders outside the US can use their browser's built-in page translation to view it in Spanish, French, German, or any other language — the whole page, including the bonus grid, buttons, and popup messages, gets translated automatically.

In Microsoft Edge or Google Chrome, right-click anywhere on the page and choose Translate to [your language] from the menu. You can also click the translate icon that appears in the address bar on some pages, or open the browser's Settings and set a preferred language so pages translate automatically going forward.

Right-click context menu in Microsoft Edge with the Translate to English option highlighted
Right-click anywhere on the page and choose Translate to [your language] — Edge and Chrome both offer this.

Translation works well for the page itself, but a couple of things may not translate: text inside tooltips (like the column header tooltips), and any emails the app sends (like a password reset link) — those stay in English unless your email program offers its own translation.

Planning a rally

Creating a rally

Click + New above the rally list, give it a name and (optionally) a year and notes, then Save.

New rally modal with Name, Year, and Notes fields filled in
The New rally dialog. Year defaults to the current year but can be changed.

To edit or delete a rally later, click the that appears next to its name in the sidebar — this opens the same dialog with a Delete button. Deleting a rally also deletes all of its legs and bonuses, so it asks for confirmation first.

Creating a leg

With a rally selected, click + New above the leg list. Give the leg a name and, ideally, a start and end date/time — these are used to compute accurate sunrise and sunset times for every bonus on that leg. Check Daylight saving in effect if applicable.

New leg modal with Name, Start, End fields and a Daylight saving checkbox
The New leg dialog. Start/End are optional but unlock sunrise/sunset lookups for that leg's bonuses.

Click a leg's name (or the small pencil that appears next to it) to edit or delete it later.

The bonus grid

Selecting a leg loads its bonuses into a spreadsheet-style grid. Click any cell to edit it in place — changes save automatically (watch the small save indicator next to your name in the header). Use + Add bonus to insert a blank row.

Bonus grid populated with two bonus rows including code, coordinates, points, timezone and address
A leg's bonus grid. Columns can be reordered, sorted, and resized; scroll right for more (Sunrise, Sunset, Address, Symbol).

The Formatted Bonus Code column, just before Code, is read-only and updates automatically as you edit a row — it's the bonus's CODE-POINTS-AVAIL-TIMED name, the same format used for the <name> in an exported GPX waypoint.

All column headers have tooltips — hover over any one to see an explanation of what it means and how it's used, like the Formatted Bonus Code column below.

Bonus grid with the Formatted Bonus Code column header hovered, showing a tooltip that reads: Calculated, not editable — built automatically as CODE-POINTS-AVAIL(-TIMED) from the Code, Points, Avail, and Timed columns. This is the name used in the exported GPX/XLSX.
Hovering any column header shows a tooltip — here, the Formatted Bonus Code column explaining how the value is calculated.

Entering or changing bonus points

The Points column is a normal editable cell — click it, type the new value, and press Enter or click away to save. Use this to correct a bonus's points after import, or to fill in points for bonuses whose import didn't include them (some bonus listing files publish codes and coordinates first, with points released or corrected later).

Bonus grid with a single row's Points cell in edit mode showing the value 109
Click a Points cell to edit it in place, same as any other editable column.
Bonus grid with a row selected via its checkbox and that row's Points cell in edit mode
Editing works the same whether or not the row is checkbox-selected.
Bonus grid for a leg imported without points data, showing a mostly empty Points column with two rows filled in manually
A leg imported without points — the column stays blank until you fill it in row by row, or use Import Bonus Points… to merge in a separate points file.
Walkthrough: entering and changing bonus points directly in the grid.

Availability codes

The Avail column controls how a bonus is scored and how it's shaped on the map:

A = 24 Hour D = Daylight T = Timed S = Special G = Group Photo H = Checkpoint AC / DC / TC = Combo (24-hour / Daylight / Timed)

For timed bonuses, fill in the Timed column with the available window (e.g. 930a-6p).

Tagging combo bonuses

Some rally packs group individual bonuses into a named combo — collect all of a river's bonuses and the combo pays extra, for example. Click Combo codes… in the toolbar to define your rally's list of combo codes and names (e.g. MISS1 = "Mississippi River"). This list is shared across every leg in the rally, since a combo can span more than one leg. Add codes one at a time with + Add combo code, or click Paste list… to paste in several at once — copy two columns (code, name) straight from a spreadsheet, or paste a comma-separated list; a code that already matches one in your list gets its name updated instead of creating a duplicate.

Combo codes modal with a paste-list panel open showing three tab-separated code and name rows ready to add
The Combo codes modal — add codes one at a time, or click Paste list… to add several at once from a pasted spreadsheet copy.

Once you've defined some codes, click a bonus's Combo cell in the grid to open a checklist of them — check every combo that bonus belongs to (a bonus can be part of more than one) and click Done. Hover the cell afterward to see the full combo names, not just the codes.

A bonus's combo tags are written to the exported GPX file as <gpxx:Category> entries, so they show up as categories on your GPS the same way they did from the spreadsheet's export.

Selecting & deleting rows

Check the boxes on the left of any rows you want to act on — the header checkbox selects all. With rows selected, Delete selected removes them, and Look up selected fetches address/timezone/weather for just those rows.

Bonus grid with nine rows checked and the Delete selected and Look up selected buttons active, along with a 9 selected count
Nine rows selected — the toolbar's Delete and Look up selected buttons light up, and a count appears.

Looking up address & timezone

Once a bonus has coordinates, click Look up missing in the toolbar to fill in its timezone, reverse-geocoded address, and (if the leg has start/end times set) sunrise and sunset — automatically, for every bonus that's missing this data. This runs in the background with a small progress indicator, and results are cached, so re-running it doesn't re-charge lookups for bonuses already looked up.

Lookups are rate-limited per account to keep API costs down. If you hit the limit, wait a bit and try again.

Rally Planning App popup reading: Lookup failed for 11 bonus row(s): HURR, INGAP, LACEF, LNHWY, MAQUO, PATCH, PITT, PONCE, POST, PROV, SROCK. Try Look Up Selected/Missing again for those rows.
If a large batch runs into the timezone API's rate limit, this popup lists exactly which bonus codes were missed — run Look Up Selected/Missing again to fill in just those rows.

Importing bonus files

Click Import file… and choose a .gpx, .kml, .csv, .tsv, .txt, Excel (.xlsx/.xlsm/.xls), or .pdf bonus listing file. The app parses it entirely in your browser and shows a preview grid so you can review and fix anything before committing — nothing is written to your leg until you click Append to leg or Replace leg's bonuses.

Import bonus data modal showing 162 bonus records read from a GPX file, with a preview grid of code, coordinates, points, availability, and comment columns
The import preview for a 162-bonus GPX file — column headers, availability codes, and coordinates are auto-detected. Replace clears the leg's existing bonuses first; Append adds to them.

PDF import is built for Iron Butt Rally-style bonus listing packets — a code, point value, GPS coordinates, available hours, and description per destination bonus. Monitoring bonuses (call-in, rest, tracking) and checkpoint info don't have coordinates, so they're skipped automatically; only bonuses with a real lat/lon come through. A PDF laid out very differently may not parse cleanly — check the preview before committing, same as any other format.

Importing bonuses from a PDF bonus listing.

Importing a points file

Some rally masters publish the bonus locations and the bonus point values as two separate files — a codes/lat/lon file, and a second file (usually CSV, sometimes plain text) with just the bonus code and its point value, sometimes released later than the location file. Click Import points… and choose that file to merge it into the current leg.

Import bonus points modal showing 71 code/points pairs read from a CSV file, with a status column reporting no match in this leg for each row so far
The Import bonus points preview — Code, New points, Current points, and a Status column flagging codes with no matching bonus in the current leg.

Unlike Import file…, this never adds or removes rows — it only matches each code in the file against a bonus already in the leg's grid and updates its Points column. A preview lists every code from the file, whether it found a match, and its current vs. new point value, so you can check for typos or mismatched codes before applying anything.

Matching ignores case and extra whitespace in the code, since the two files often come from different sources. Codes in the file with no matching bonus in the current leg are listed but skipped — nothing is created for them.

Exporting GPX & XLSX

The toolbar's right-hand buttons export the current leg (or the whole rally, for GPX):

  • Export GPX — waypoints for the current leg, ready to load onto a GPS.
  • Export GPX (whole rally) — every leg's bonuses in one file.
  • Export XLSX — a spreadsheet copy of the current leg's grid.

Check ASCII-fold export (on by default) to strip accented characters from exported names — useful for older GPS units that don't handle non-ASCII text well.

Hours & Miles planning

Click Hours & Miles next to Grid and Map in the toolbar to open this rally's planning worksheet — how much riding time a leg actually has once rest, gas stops, bonus stops, and routing time are subtracted, and how many miles that riding time makes possible. It covers 1 to 3 legs, and use the Legs +/− control at the top to match however many legs your rally has. Everything here is saved per rally and shared across every leg, the same as combo codes.

Hours and Miles view for a 1-leg rally showing a Checkpoints table with two looked-up addresses and a Legs table with stop-time assumptions and computed hours, miles, and fuel cost, plus a bold Rally totals row
The Hours & Miles view — a Checkpoints table (address, then Look up for coordinates and time zone) and a Legs table (your inputs on the left, computed hours/miles/fuel on the right, and a bold Rally totals row along the bottom).

Each leg is bounded by two checkpoints — its start and its end. Type an address for each checkpoint (city and state is usually enough) and click Look up to resolve it to coordinates and a time zone; that's the one place this page calls out to Google. A 2-leg rally shares its middle checkpoint (leg 1's end is leg 2's start), so you'll only ever look up legs + 1 checkpoints total, not two per leg.

For each leg, fill in its start and end date/time and your planning assumptions — routing hours, planned rest hours per day, gas and bonus stops per day and how long each takes, any misc hours, and your average riding speed, fuel economy, and fuel cost per gallon. Leg hours, riding hours available, and miles possible update automatically as you type, and the bold Rally totals row at the bottom of the Legs table adds them up across every leg in use — averaging the per-day assumptions over however many legs you actually have, rather than always dividing by three.

Like the bonus grid, changes save automatically — watch the small save indicator in the toolbar. Only your inputs are stored; every hours/miles/fuel figure is recalculated from them each time you open this page.

Bonus point planning

Click Points next to Hours & Miles in the toolbar to open this rally's bonus point plan — how many points each leg needs, and how your planned route and actual score compare to that target. Like Hours & Miles, it covers 1 to 3 legs (use the Legs +/− control at the top), and everything is saved per rally, shared across every leg.

Points planning view for a 1-leg rally showing target points, non-riding bonus columns, a red Points needed column, planned route points, and a bold Rally totals row
The Points planning view — target and non-riding bonus inputs on the left, the red Points needed column, planned-route and actual-scored comparisons on the right, and a bold Rally totals row along the bottom.

For each leg, enter the Target points the rally master published for that leg, then your planned non-riding bonuses — rest bonus, both call-in bonuses, tracking bonus, and arrival bonus. The Gold target (+40%) column, each bonus's percent of target, the Non-riding total, and the red Points needed column (how many bonus points your route still needs to hit target once non-riding bonuses are counted) all update automatically as you type.

Fill in Planned route pts with the bonus total from your planned route in Basecamp or your mapping program, and the Diff vs target column shows whether that's enough — it turns pink when you're short. After the rally, fill in Actual scored to see your final +/− vs target for each leg. The bold Rally totals row adds every column up across all legs in use.

Changes save automatically — watch the small save indicator in the toolbar. Only your inputs are stored; every gold target, percentage, and points-needed figure is recalculated from them each time you open this page.

Map & weather

Map view

Click Map next to Grid in the toolbar to switch views. Each bonus is plotted as a marker whose shape encodes its availability (circle, square, flag, diamond, star, triangle — see the legend) and whose color encodes its point value. Combo bonuses (AC/DC/TC) get a bolder outline.

Map view with four colored bonus markers and a legend explaining shapes and colors
Map view for a leg with four bonuses — the legend in the lower-left explains the shape/color encoding and shows a running total of plotted points.

Click any marker to see its details in a popup, including a one-click link to its weather forecast.

Map marker popup showing bonus code, points, availability, timezone, address, and a 10-day weather button
A marker popup — availability, timezone, address, and a shortcut to the 10-day forecast.

Point color ranges

Click Point ranges… (top-right of the map) to customize the point thresholds and colors used on the map. A bonus is colored by the highest range it meets or exceeds. Add, remove, or reset ranges to defaults at any time — this only affects the map's coloring, not scoring.

Bonus point color ranges modal with four rows mapping point thresholds to colors
Default point color ranges — edit the thresholds or colors, or add more rows.

Weather forecasts

From a marker's popup, click 10-day weather to open a forecast panel for that bonus's location — daily highs/lows, conditions, and precipitation chance.

10-day weather forecast panel listing daily conditions, high and low temperatures
The weather panel, opened from a map popup. Close it with the × in the top-right corner.
Administration

Admin portal

Admin accounts see an Admin link in the header. The admin portal lists every rider with their status, role, when they were created, when they were last active, and how many live lookups they've used (broken out by timezone/geocode/weather, hits vs. misses — misses are what actually cost against the API quota).

Only existing admins can promote another account to admin, from this screen.
Admin portal table listing riders with status, role, last seen, timezone, geocode, weather usage and total live calls
The admin user table. Use the range buttons (Today / 7 days / 30 days / All time) to change the usage window.

Adding a user

Click + New user, fill in their email, display name, and a temporary password (minimum 8 characters), then Create user. Share the temporary password with them directly — there's no email invite flow, so they should sign in and can change it via Forgot password? if you'd rather not hand off your own choice.

New user modal with Email, Display name, and Temporary password fields
Creating a new user from the admin portal.

Each row's Actions column lets you deactivate, promote/demote, or delete a rider. Deactivating blocks sign-in without deleting their data.

Lookup access

The Lookup access column controls whether a rider can use the lookup buttons at all — separately for address/timezone lookups and for weather forecasts. New riders start with both switched on; click Disable next to either one if you want to withhold it from a specific rider, or Enable to turn it back on. Admin accounts always have full access and show an "Admin: full access" badge here instead of the toggle buttons.