Skip to content

What you can actually do

Seat the boat

Place paddlers left and right, set drummer and sweep, copy heats, and catch empty seats before you paddle.

Seat the boat

Place paddlers left and right, set drummer and sweep, and switch small or standard size.

seat({ heat: "open_200", size: "standard" })

Swap seats

Move people between seats without rebuilding the whole lineup from scratch.

swap({ from: "L3", to: "R5" })

Copy a heat

Duplicate a solid lineup into the next heat, then tweak only what changed.

copy_heat({ from: "mixed_500", to: "mixed_200" })

Empty seat check

Flag missing seats before you paddle so race-day surprises stay rare.

empty_check({ heat: "women_200" })

Manage your paddlers

Keep names, weights, preferred sides, and roles in one roster. Build crewlists for race weekends and track who is actually available.

Paddler roster

Keep names, weight, preferred side, and role in one place your coaches can trust.

roster.list({ club: "harbour" })

Crewlists

Build the pool available for a race block, then seat boats from that list only.

crewlist.create({ name: "Nationals day 1" })

Roles

Mark drummer, sweep, and paddler roles so the right people show up in the right slots.

paddler.set_role({ id: "p42", role: "sweep" })

Availability

Track who is in for the weekend so your crewlist matches who will actually race.

availability.set({ paddler: "p12", weekend: true })

Read trim and balance

See fore-aft trim, left-right side balance, lineup gaps, and heat comparisons so you confirm lineups with numbers, not guesswork.

Trim

See fore-aft balance from seated weights so the boat sits where you want it.

insights.trim({ heat: "open_500" })

Side balance

Compare left vs right mass and spot when one gunwale is carrying too much.

insights.side_balance({ heat: "mixed_200" })

Lineup gaps

Surface empty seats, missing sweep, or no drummer before you confirm the heat.

insights.gaps({ heat: "open_200" })

Compare heats

Stack two lineups side by side when you are deciding who races which distance.

insights.compare({ a: "open_200", b: "open_500" })

Full reference documentation: github.com/junlee-3/paddltir-web

Come race-ready. Stay race-flexible.