Sail Scoring
Help

Help

A quick guide to scoring a series with Sail Scoring.

What is Sail Scoring?

Sail Scoring is a web-based alternative to tools like Sailwave and HalSail — built for scorers who know the job but want software that works in a browser, on any device, without a Windows laptop and a steep learning curve.

You sign in with your email; series, competitors, races, and results are saved to your account as you work. Scoring panels at clubs share a single workspace so the whole team sees the same series in real time.

Sail Scoring supports position-based (scratch) scoring, static handicap scoring (IRC, PY), and progressive handicap scoring (NHC1, ECHO) for one or more fleets across multiple races.

Signing in and workspaces

Sail Scoring uses passwordless email sign-in. From the home screen, click Sign in, enter your email, and click the link the app sends you. The link expires after five minutes; request a fresh one any time.

When you first sign in you land in your personal workspace — labelled My Workspace in the workspace switcher to the right of the page logo. Anything you create here is private to your account and only visible to you.

Club scoring panels share an org workspace: every panel member can see and edit the same series, FTP credentials, and workspace settings. Org workspaces are set up by the project owner — email hello@sailscoring.ie with the panel members' emails and a workspace name. Once you're added, the workspace switcher in the header shows both your personal workspace and the shared one; pick the shared one and the rest of the app reorients onto the panel's data.

To move a series from your personal workspace into a shared one, open its Settings tab and use the Copy to another workspace card at the top. The original stays in your personal workspace; the copy lands in the target workspace with a fresh history. FTP credentials and bilge publishing state are not carried over.

Concurrent edits between scorers in a shared workspace are detected per row. If two scorers edit the same finish at the same moment, the second writer sees a clean conflict dialog naming the first scorer rather than silently overwriting their work.

Account info (your email, the active workspace, sign-out) is in the user menu on the right of the page header — click your email address. Workspace-scoped settings (FTP servers, the workspace name) are in the workspace switcher next to the Sail Scoring logo — click the workspace name and choose Workspace settings.

Creating a series

A series is the top-level container for a set of races and the competitors sailing in them. It corresponds to a trophy, a league, or a championship — whatever collection of races you are scoring together.

From the home screen, click New series and give it a name. Venue and date are optional but useful for keeping things organised if you manage several series on the same device. Names must be unique; the app prevents you from creating two series with the same name. You can rename a series later from the Basic card on its Settings tab.

After saving, you land on the Competitors tab, ready for the next step.

Adding competitors

On the Competitors tab, add every boat that may start a race in the series — even those you expect to DNS every race. This ensures result codes are available for them.

Each competitor requires a sail number and a helm name. Sail numbers must be unique within the series. Other fields — boat name, class, crew name, club, gender, age — are optional, and which of them appear in the form and tables is controlled by the Competitor fields card on the Settings tab. Enable Class for PY fleets with mixed classes (Laser, Firefly, Mirror) to show the boat class alongside each entry. Enable Crew name for two-person dinghy classes (420, Fireball, GP14); the helm and crew are then shown as Helm / Crew in exported results.

Competitors are sorted by sail number. You can edit or delete a competitor at any time, though deleting one after races have been entered will also remove their finishes.

Fleets

A fleet is a group of competitors scored independently. Each fleet produces its own standings — the penalty point base N is the number of competitors in that fleet, not the series total. A DNC in a fleet of 5 scores 6 points; a DNC in a fleet of 3 scores 4 points.

Fleets are created automatically from your competitors. On the Competitors tab, type a fleet name (e.g. Junior or Senior) in the Fleet field when adding or editing a competitor. Leaving the field blank assigns the competitor to the Default fleet. A fleet exists as long as at least one competitor belongs to it — removing the last competitor from a fleet removes the fleet.

When only one fleet exists, the fleet concept is invisible: no fleet column appears in the competitors table, no fleet headings appear in the standings, and the HTML export produces a single file exactly as before.

For multi-fleet events, Export HTML produces one file per fleet (e.g. my-series-junior.html, my-series-senior.html). Each file contains that fleet's standings and individual race results.

To rename fleets or change their display order, open the Settings tab and click Edit ▸ on the Fleets card. You can reorder fleets with the ↑/↓ buttons (which determines the order they appear in standings and exports), and rename any fleet with the Rename button.

Start sequences

For handicap series with multiple fleets starting at staggered times, the Default start sequence editor (in Settings ▸ Fleets, visible only in handicap mode) lets you describe how fleets are grouped at the start line and how long the gap is between consecutive starts. Once configured, creating a new race asks only for the first start time and generates the rest automatically.

Each row is one starting signal. Add a row with + Add start group, drop one or more fleets into it from the dropdown, and — for every row after the first — set the interval, in minutes, between this start and the previous one. So a row labelled +5 min after Start 2 means this fleet starts five minutes after Start 2, regardless of where Start 2 itself sits.

A typical Saturday-afternoon club setup with three classes at 5-minute intervals looks like this:

  • Start 1: Class A
  • Start 2: Class B, +5 min after Start 1
  • Start 3: Class C, +5 min after Start 2

With a first start of 14:05, that resolves to 14:05 / 14:10 / 14:15. The new-race dialog shows the resolved times as a preview before you confirm.

Importing competitors from CSV

If your entry list is already in a spreadsheet, you can import it directly rather than typing each competitor by hand. On the Competitors tab, click Import CSV (or press i) and select a CSV file.

The importer shows each column in the file alongside a sample of its values. Use the dropdown next to each column to map it to a competitor field — sail number, helm name, boat name, class, crew name, club, gender, age, or fleet. Columns you do not need can be left as (ignore). Sail number is the only required mapping; all other fields are optional. Fleet columns named Fleet or Division are detected automatically, as are columns named Class (mapped to boat class) and Crew.

A competitor can be assigned to more than one fleet by separating fleet names with a pipe character in the fleet column — for example, PY|M15 enters a Melges 15 in both the PY handicap fleet and the M15 scratch fleet. This matches the convention used by Sailwave exports.

In handicapmode, the importer infers each fleet's scoring system from the rating columns it finds. If every boat in a CSV fleet carries one rating system (say IRC), one fleet is created and configured for IRC. If the fleet has a mix — IRC for some boats, ECHO for others — the importer splits it into CR 0 (IRC) and CR 0 (ECHO); each boat joins the fleet(s) matching their populated ratings. The mapping dialog lists the planned fleets before you confirm, with a per-fleet checkbox to also score the group on scratch alongside (for line-honours awards).

When the CSV has no Class column and no existing competitor in the series has a class set, the importer falls back to writing the original fleet name into Class. This preserves the practical “Cruisers 2” grouping when the fleet column is being used as a class label and boats end up split across rating fleets.

Clicking Importadds any new competitors and updates existing ones matched by sail number. When an existing competitor's fields are unchanged by the import, they are counted as unchanged rather than updated. Any rows missing a sail number are skipped and listed in the summary.

Updating handicaps from another series

For NHC, ECHO, IRC, and PY fleets, the Update handicapsbutton on the Competitors tab carries each boat's handicap forward from a prior series in this workspace. For progressive systems (NHC, ECHO) the new starting handicap is the boat's TCF after the source series' last scored race; for static systems (IRC, PY) it is whatever value the source series currently has on that competitor.

The dialog previews every change as current → newbefore anything is written. Untick individual rows to keep specific boats unchanged. A boat that doesn't appear in the source series, or that has no value to copy, is left at its current handicap.

Adding races

On the Races tab, create a race for each race sailed. A race number is assigned automatically; a date is optional. You can create all races upfront or add them one at a time as the series progresses.

Each race card shows how many finishes have been recorded. Click a race card to open the result entry screen for that race.

Entering results

The result entry screen is a digital transcription of the handwritten finish sheet. Each row is a crossing of the finish line; row order is crossing order. Search for a competitor by sail number using the input at the top and they are added to the next slot in the list. For boats in a fleet with a recorded start, the app prompts for a finish time before adding the row.

If a sail number is not yet registered in the series, the app will offer to Record as unknown. The row is kept in crossing order; click Resolve next to the entry to link it to a registered competitor once you know who it was. Unresolved unknown finishes are excluded from standings until resolved.

Rows for fleets without a start time (scratch scoring) show ↑/↓ controls that let you nudge a boat up or down in the list. Rows for timed fleets have no move controls — their position is determined automatically by the finish time. If you edit a time and it no longer matches the crossing order, the row slides to its correct slot.

When two scratch-fleet boats cross together, tick tie on the second row to mark them as tied with the previous row. Tied boats share averaged ranks per RRS A8.1.

For competitors who did not finish normally, use the result code dropdown next to their name. Codes are grouped by how they arise:

Operational codes (assigned during or after the race)

  • DNS — Did Not Start (came to start area but did not start)
  • DNF — Did Not Finish
  • OCS — On Course Side at start (premature starter)
  • NSC — Did Not Sail the Course (finished but missed a mark)
  • RET — Retired after starting
  • DNC — Did Not Compete (did not come to the start area)

Protest committee codes (entered after a hearing or RC decision)

  • DSQ — Disqualified
  • DNE — Disqualification Not Excludable (cannot be discarded)
  • UFD — U Flag Disqualification, rule 30.3 (discardable)
  • BFD — Black Flag Disqualification, rule 30.4 (cannot be discarded)

By default (RRS A5.2), all penalty codes score series entries + 1 points. If you enable A5.3 starting-area scoring in Settings, most codes instead score starting-area entries + 1 for that race — a smaller penalty when turnout is low. DNC and BFD always score series entries + 1 regardless.

DNE and BFD cannot be discarded. In the standings table they are shown in red. Even if a DNE or BFD is a competitor's worst score, the discard falls on their next-worst result instead.

Additive penalty codes (applied to finishers)

A boat that finishes but is penalised by the protest committee may be assigned an additive penalty code using the flag icon next to their name in the finisher list. Click the flag to open the penalty editor.

  • ZFP — Z Flag Penalty (rule 30.2): automatically applied (no hearing) to a boat in the triangle zone during the last minute before the start. Adds 20% of the DNF score, rounded to the nearest whole number (formula per rule 44.3(c)).
  • SCP — Scoring Penalty (PC-imposed): adds a specified percentage of the DNF score (default 20%; enter a different value to override).
  • DPI — Discretionary Points Increase: adds a stated number of points (enter the amount in the penalty editor).

Per RRS A6.2, additive penalties do not change other competitors' scores — two boats may legitimately share the same score. The penalised score is capped at the DNF score for that race. Penalty codes are shown in amber in the standings table, e.g. 4 (ZFP).

Importing a finish sheet from CSV

On a race's result entry screen, click Import CSV (or press i) to import a whole finish sheet in one go — useful when results are captured on a tablet or in a spreadsheet on the RC boat and you want to transcribe the lot at once.

The importer reads three columns:

  • Sail number — required; matched against registered competitors. Unregistered sail numbers import as unresolved crossings that you can resolve later.
  • Finish time — optional; accepts HH:MM:SS, H:MM:SS, or bare digits like 143210.
  • Result code — optional; any standard RRS code (DNF, DSQ, OCS, RET, DNE, UFD, BFD, DNS, NSC, DNC). Rows with a code are recorded as non-finishers and the finish time is ignored.

Row order in the CSV is the crossing order — the importer assigns finish positions in the order rows appear. A preview dialog shows how many finishers and coded entries will be imported and how many existing finishes will be replaced.

The import is replace-all: confirming replaces the race's finishing order entirely and clears any penalties, redress, and tied-finish markers — the importer only covers the basic sheet, so re-apply those in the editor after import if needed. Existing start check-ins are preserved. Click Save results after importing to persist the change.

Redress (RDG)

When the protest committee grants a competitor redress under RRS Rule 62, their score for a race is replaced by an average calculated from their other scores. Use the scales icon next to a competitor in the race entry screen to assign redress.

There are two entry paths depending on whether the competitor finished:

  • Finisher granted redress — the boat completed the course and recorded a position, but later received redress to improve their score. Click the scales icon in the finishing order list. The finish position is preserved in the record but replaced by the redress score for standings.
  • Non-finisher granted redress — the boat did not finish (e.g. retired, RET). Select RDG (redress) from the code dropdown in the non-finisher list. A dialog will open to configure the redress details.

Redress methods (RRS A9)

  • A9(a) — all races: average of the competitor's scores in all other races in the series.
  • A9(b) — races before: average of scores in races sailed before the race in which redress is granted.
  • A9(c) — stated points: the PC assigns a specific points value directly.

Pool restriction

For A9(a) and A9(b) you can optionally restrict which races contribute to the average:

  • Exclude specific races — remove named races from the default pool (e.g. exclude a race the competitor did not start).
  • Include specific races — use only the listed races. Check Include all later races to also include every race after the highest-numbered race in the list.

The average is rounded to the nearest tenth (0.05 rounds up, per RRS A9). Redress scores are shown in amber with a superscript r in the standings table.

Start check-in

The Start check-in tab on the race entry screen lets you record which competitors came to the starting area before the race. This is the data source for A5.3 scoring — if you skip check-in, the app infers starting-area attendance from the finish records instead.

Open a race, switch to the Start check-in tab (or press c), then tap each boat that appears at the start. A running count shows how many are marked present.

For fast keyboard entry, type a sail number into the search box and press Enter or Tab to toggle the first matching boat — the input clears so you can keep typing the next sail number.

Check-in saves immediately — you do not need to click Save. Once boats start finishing, switch back to Finish entry (press c again) and enter the finishing order as normal. Boats that were checked in but have no finish recorded will appear in the non-finisher list as DNF rather than DNC.

Reading the standings

The Standings tab shows the series results at any point. Each row is a competitor; the columns show their points for each race and their series totals.

Sail Scoring uses Low Point scoring: 1st place scores 1 point, 2nd scores 2, and so on. Lower totals are better. The standings are ordered by total points, with tie-breaking by most first places, then most second places, and so on.

Result codes are shown in parentheses in the race columns, e.g. 7 (DNF).

When discard rules are configured, a Nettcolumn appears showing each competitor's series total after their worst score(s) are dropped. Discarded scores are shown struck through. The standings are ordered by nett total.

To share results, click Export HTML (or press x) to download a self-contained results page you can email or host on your club website. To push results directly to a web server, see Publishing results via FTP.

Rating systems

Sail Scoring supports several scoring systems. Pick the right one per fleet on the Settings tab.

  • Scratch — position-based scoring with no time correction. The first boat across the line wins. Used for one-design fleets and any fleet where boats race on equal terms.
  • IRC — static handicap. Each boat carries a published TCC; corrected time is elapsed time × TCC. Ratings do not change race to race within a series.
  • PY (Portsmouth Yardstick) — static handicap for mixed dinghy fleets. Each class carries a published PY number; corrected time is elapsed time × 1000 / PY.
  • NHC — the RYA National Handicap for Cruisers. A progressive handicap: each boat starts from a published TCF and the rating is adjusted after every race based on how the boat performed against the fleet average. Sail Scoring runs the SWNHC2015 parameters (which match Sailwave NHC1) by default; the per-fleet Configure…button in Settings → Fleets opens a dialog where the seven blend rates and extreme thresholds can be overridden per fleet for parameter-tuning experiments.
  • ECHO— the Irish Sailing progressive handicap. Each boat starts from a published handicap H and the rating is adjusted after every race based on a Performance Index measuring the boat’s performance relative to the fleet.

For NHC and ECHO, every per-race table includes a New TCF (or New H) column showing the rating to apply in the next race — that’s usually the most-asked-about output of progressive scoring, so it’s always visible. Above the table, a Show NHC/ECHO rating calculations checkbox reveals the per-race intermediate values (CT ratio, Fair TCF, Adjustment for NHC; 1/T_E, PI, Adjustment for ECHO) along with a brief explainer of the formula. Sailors and rating officers can use those columns to verify the rating updates with a calculator. The toggle is off by default — readers who only want the standings and next ratings see a clean page; those who want the math tick the box.

Whether to publish the rating calculations is a per-series setting on the Settings tab — under Publishing, uncheck Publish progressive rating calculations alongside results to omit the toggle and its columns from the published page. The setting is on by default and shows up whenever the series has at least one NHC or ECHO fleet.

The summary table on NHC and ECHO fleets includes a seed-rating column (the competitor’s starting TCF or H) and prints the applied rating in small text beneath each score from race 2 onwards — race 1’s rating is the seed, so it’s shown in the dedicated column rather than repeated under each R1 cell. This is independent of the rating-calculations toggle and can be switched off via Show per-race ratings in summary table in the same Publishing card.

Discard rules

A discardlets a competitor drop their worst race score from the series total — a bad day doesn't ruin a whole season. Only the resulting nett score counts for ranking; the full series total is still displayed for reference.

Discards are configured per series on the Settings tab, in the Scoring card. Each rule specifies a minimum number of races sailed and how many discards apply from that point on. For example:

  • From (races): 5, Total discards: 1 — one discard applies once 5 or more races have been sailed; no discards before that.
  • You can add a second rule, e.g. From: 9, Total discards: 2, to increase the total number of discards as the series grows. Each rule sets the total, so a second rule of 2 means two discards (not one on top of one).

To add a rule, click Add rule, fill in the thresholds, then click Save. To remove a rule, click the × button on that row. A series with no rules has no discards.

The worst race(s) are dropped per competitor — each competitor discards their own worst score. When two races have the same score, the earlier race is discarded.

A5.3 starting-area scoring

Under the default RRS A5.2 rule, every penalty code (DNF, OCS, DNC, etc.) scores N + 1 where N is the total number of competitors entered in the series. This is the same in every race, regardless of how many boats actually showed up.

RRS A5.3 is an alternative used by many clubs with variable race-day attendance. Under A5.3, DNF and OCS score starting-area entries + 1 — that is, the number of boats that came to the start in that race, plus one. DNC (did not compete) still scores series entries + 1, because those boats were not present at all.

To enable A5.3 for a series, open the Settings tab, tick Score DNF/OCS on starting-area entries (RRS A5.3), and click Save.

Use the Start check-in tab on each race entry screen to record which boats came to the start. If check-in is not done, the app counts all non-DNC finish records as a proxy for starting-area attendance.

Saving and sharing a series

All changes are saved automatically to your account as you score — there is no Save button. The series is reachable from any device you sign in on, and panel members in a shared org workspace see edits in close to real time.

To back up a series or share it with someone outside your workspace, open the Settings tab and click Save to File. This downloads a .sailscoring file containing the complete series — all competitors, races, and results. You can save the file to Google Drive, Dropbox, or email it to a co-scorer.

To open a series from a file, click Import Series on the home screen and choose Sail Scoring file. Select the .sailscoring file. If the series is already in your workspace, you will be asked whether to update the existing copy or open it as a separate one.

To bring a season's seedings across from Sailwave, choose Sailwave export from the same dialog and pick the .json file exported from Sailwave 2.38. The wizard asks for the series start date and a weekly race cadence, then creates the series with fleets, competitors, ratings, and any results Sailwave already had.

To bring a series someone else is scoring into your workspace, open the Settings tab on the existing series and click Update from File. The app checks whether the incoming file is a clean continuation of the workspace copy and warns you if both copies have diverged.

If you used Sail Scoring before sign-in was required and have series saved in this browser, the home page shows a banner offering to Move to my account. The migration runs one series at a time and is safe to re-run — the banner only counts series that haven't already been moved.

Publishing results

Sail Scoring offers two ways to push results to a public URL from the Standings tab.

Publish (bilge): click Publish (or press p). On first use, choose a URL prefix (e.g. hyc-autumn-2026) and enter your email address. A verification link is sent to confirm ownership of that namespace; once verified, all subsequent publishes go live immediately. The resulting URL is stable — re-publishing updates the page in place. The publish configuration (URL prefix and ownership token) is saved in the series file, so any scorer who opens the file can publish to the same URL. The email address is stored locally only and is never written to the series file.

Upload via FTP: if your club has a web hosting account, you can push results directly to it without downloading and uploading files manually. Sail Scoring relays FTP uploads through the scupper service — the browser cannot connect to an FTP server directly.

FTP one-time setup: open the workspace switcher in the page header and choose Workspace settings, then click Add server. Enter a label (e.g. Club website), the FTP hostname, port (default 21), username, and password. Tick FTPS (TLS) if your host requires an encrypted connection. You can configure multiple servers and switch between them at upload time. Credentials are stored on this device only and are never included in series file exports.

Uploading: on the Standings tab, click Upload via FTP (or press f). Select the server, enter the remote path for the results file (e.g. /public_html/results/fleet-a.html), and click Upload. The path is entered each time, so you can vary it per race day or fleet without changing the server configuration.

If the upload fails, the raw FTP error from the server is shown — this is usually enough to diagnose a wrong path, bad credentials, or a permission problem.

JSON data export and Open in Sail Scoring

Every exported HTML results page — whether downloaded with Export HTML or pushed via FTP or Publish — includes an Open in Sail Scoring link in the footer. Anyone viewing the results page can click it to open the series directly in the app — competitors, races, finishes, and standings are all imported automatically as a new series. If you already have a series with that name on this device, the import gets a (2) suffix so the two are easy to tell apart.

If you're signed in and belong to more than one workspace — for example a personal workspace and a shared panel — the confirmation dialog includes a Workspacepicker so you can choose where the series lands. It defaults to the workspace you're currently in.

The footer also embeds a JSON snapshot of the results in the page source, available to clubs or third parties who want to consume the data programmatically. The snapshot contains only the public results; scorer-private information (file history, FTP credentials, and publishing tokens) is never included.

To disable the embedded export for a series, open the Settings tab and uncheck Include data export in published results in the Publishing card. The footer will revert to a plain link with no Open in Sail Scoring option.

Sending feedback

Found a bug, have a question, or want to suggest an improvement? Open the user menu in the top-right of the header (your email address) and click Send feedback. Type your message and hit Send.

The form automatically attaches the page you were on, your signed-in email address, and the browser you're using — they're shown in the dialog before you submit. To keep abuse in check, each account can send up to five messages per hour.

Keyboard shortcuts

Press ? anywhere in the app (outside a text input) to open the keyboard shortcuts reference.