Vortex SC

Welcome back.

Vortex SC — squad management for the technical team, coaches & families.

Staff sign in

{{ loginErr }}

Enter your email and we'll send you a secure link to reset your password.

Choose a new password for your account below, then tap Set new password.

Check your email — we sent you a link to reset your password.

{{ famRegisteredMsg }}

{{ famLinkLabel }}

{{ famLinkedMsg }}
{{ p.label }}

{{ famErr }}

Read-only access to your swimmer's PBs, attendance, results and upcoming meets. No plans, no other squads.

Enter your PIN

{{ pinMsg }}

Vortex SC
{{ hubUserAvatar }}

{{ hubUserRole }}

{{ hubUserName }}

{{ clubStatLine }}

Upcoming meets

{{ m.day }}{{ m.mon }} {{ m.name }}{{ m.place }}

No meets scheduled yet.

{{ squadsHeading }}

Tap to coach

Club Administration

Dashboard · club-wide insights

{{ s.value }}{{ s.label }}

Swimmers by squad

{{ b.count }}
{{ b.short }}

Attendance

{{ attendRing.pct }} this week

Club training load · this week (km)

{{ b.label }}

Move swimmers

Reassign between squads

{{ moveCountLine }}

{{ m.initials }} {{ m.name }}Age {{ m.age }} · now in {{ m.squadName }}

Tools & AI

Working club-wide across all 272 swimmers.

Coaches Handbook

Shared reference for the Vortex coaching team.

{{ s.h }}

{{ s.lead }}

{{ b }}
Vortex SC

Welcome, {{ famPortalName }}

{{ famSwInit }}{{ famGenIcon }}

{{ famSwName }}

{{ famSwMeta }}

{{ k.value }}{{ k.label }}

{{ famProgEvent }} · progression

{{ famChart.best }}
{{ famChart.caption }}{{ famChart.drop }}
{{ s.date }} {{ s.meet }} {{ s.time }}
No swims recorded for this course yet.

Personal bests

{{ p.event }} {{ p.time }}{{ p.drop }}

Fitness tests

{{ f.dateLabel }}{{ f.summary }}

InBody scans

{{ ib.dateLabel }}{{ ib.summary }}

Coach suggestion

Focus & targets

Compete in

{{ famAiSugg.competeEvent }}

Current best {{ famAiSugg.currentBest }} · target {{ famAiSugg.targetTime }}

Double down on

{{ famAiSugg.focusStroke }}

{{ famAiSugg.focusReason }}

Needs attention

{{ famAiSugg.weakStroke }}

{{ famAiSugg.weakReason }}

Consider entering

{{ famAiSugg.secondaryEvent }}

{{ famAiSugg.secondaryReason }}

Fitness & dryland

{{ famAiSugg.fitnessInsight }}

Nutrition

{{ famAiSugg.nutritionTip }}

{{ d.label }}{{ d.fileName }} {{ d.statusLabel }}

Upload a PDF or photo of each document. You and your child's coach can view them here at any time.

{{ famAttDayLabel }}

{{ famAttDayStatusLabel }}

Attendance recorded by the coach for this session.

{{ famAttMonthLabel }}

{{ famAttMonthPct }}Present this month
{{ w }}
Present Late Absent

{{ famAttYearLabel }}

{{ famAttYearPct }}

Yearly average

{{ famSwName }} · all results

{{ r.event }}{{ r.time }}

{{ r.meet }} · {{ r.date }} · Place {{ r.place }}

All meet results

{{ famMeetSelInfo.name }}

{{ famMeetSelInfo.meta }}

{{ r.place }} {{ r.name }}{{ r.event }} · {{ r.squadName }} {{ r.time }}
No results recorded for this meet yet.

Club calendar

{{ m.day }}{{ m.mon }} {{ m.name }}{{ m.place }}
No club meets posted yet — the club calendar will appear here.
{{ m.name }}{{ m.meta }}

Request an event

{{ famReqMsg }}

{{ rr.event }} · {{ rr.meetName }}{{ rr.statusLabel }}

Academy

Trials, level ladder, schedule and fees.

Trial registration

Request received — the team will be in touch to schedule ✓

Pending trial requests

{{ tr.childName }} · Age {{ tr.age }}

{{ tr.parentName }} · {{ tr.phone }} · Suggested: {{ tr.squadHintName }} · {{ tr.submittedAt }}

{{ l.name }}Ages {{ l.ages }} · {{ l.coach }} {{ l.count }}
{{ s.name }}{{ s.when }}
{{ f.name }} {{ acadCurrency }} /mo

Invoicing — {{ invMonthLabel }}

{{ invCollected }}Collected
{{ invOutstanding }}Outstanding
{{ v.name }} {{ v.amount }}
{{ squad.avatar }}

{{ squad.name }}

Ages {{ squad.ages }} · {{ squad.count }} swimmers · {{ squad.coach }}

Roster

{{ rosterCountLine }}

Session · today

{{ planTotal }}metres

{{ pdfImportMsg }}

{{ ps.subtotal }}m
× m {{ st.circuit }}RDS {{ st.setMetres }}m
Type
Stroke
Tools
Zone
Focus
Swimmers {{ sw.name }}
Rest On HR
{{ st.advice }}

{{ savedPlanMsg }}

{{ shareNote }}

Training log & load

{{ savedPlanWeekM }}mThis week · {{ savedPlanWeekN }} sessions
{{ savedPlanSeasonM }}mSeason · {{ savedPlanSeasonN }} sessions

{{ planCalLabel }}

{{ w }}
MorningEvening
{{ planCalSelLabel }}{{ planCalDayKm }} km
{{ ds.slotLabel }} {{ ds.title }} {{ ds.totalM }}m

No session on this day yet — build a plan above with this date set and tap “Save session”.

No sessions saved for this view yet — build a plan above, set its date + AM/PM, and tap “Save session”.

{{ sp.totalM }}metres {{ sp.title }}{{ sp.slotLabel }}{{ sp.dateLabel }} · Zone {{ sp.zone }}
{{ attendSummary.present }}Present
{{ attendSummary.late }}Late
{{ attendSummary.absent }}Absent

{{ attendDayLabel }}

{{ attendMonthLabel }}

{{ attendMonthAvgPct }}Avg attendance
{{ attendMonthSessions }}Sessions
{{ w }}

Tap a day to open it and mark or review attendance.

{{ attendYearLabel }}

{{ attendYearAvgPct }}

Yearly average

{{ selMeet.name }}

{{ selMeet.meta }}

{{ r.place }} {{ r.name }}{{ r.event }} {{ r.time }}{{ r.delta }}

Tools & AI · {{ squad.name }}

VIP SPONSORED
{{ swimmer.genIcon }}

{{ swimmer.name }}

Age {{ swimmer.age }} · {{ squad.name }} · {{ swimmer.gender }}

{{ k.value }}{{ k.label }}

Personal bests

{{ p.event }}{{ p.time }}{{ p.drop }}

{{ progEvent }} · progression

Long course (LCM)

{{ lcmChart.best }}
{{ d.t }}
{{ lcmChart.caption }}{{ lcmChart.drop }}
{{ s.date }} {{ s.meet }} {{ s.time }}
No long course swims for this event.

Short course (SCM)

{{ scmChart.best }}
{{ d.t }}
{{ scmChart.caption }}{{ scmChart.drop }}
{{ s.date }} {{ s.meet }} {{ s.time }}
No short course swims for this event.

Coach notes & wellbeing

Identity documents · restricted

Birth certificate On file
ID / passport copy On file
Medical certificate (full check-up) On file

Doctor-issued full physical check-up, required for meet entries per federation rules.

InBody scans

{{ ib.weight }} · {{ ib.fat }} · {{ ib.muscle }}{{ ib.dateLabel }}

{{ profileIbMsg }}

Fitness test

{{ f.summary }}{{ f.dateLabel }}

AI suggestion

Edit coach suggestion — shown to parents/swimmer as coach guidance

Focus reason

Needs attention

Consider entering

Fitness & dryland

Nutrition

Focus & targets for {{ swimmer.name }}

Compete in

{{ aiSugg.competeEvent }}

Current best {{ aiSugg.currentBest }} · target {{ aiSugg.targetTime }}

Double down on

{{ aiSugg.focusStroke }}

{{ aiSugg.focusReason }}

Needs attention

{{ aiSugg.weakStroke }}

{{ aiSugg.weakReason }}

Consider entering

{{ aiSugg.secondaryEvent }}

{{ aiSugg.secondaryReason }}

Fitness & dryland

{{ aiSugg.fitnessInsight }}

Nutrition

{{ aiSugg.nutritionTip }}

Log at least one PB to get an AI suggestion.

Recent results

{{ r.place }} {{ r.event }}{{ r.meet }} {{ r.time }}

Notifications

{{ notifSubtitle }}

{{ pushMsg }}

{{ n.title }}{{ n.body }}{{ n.when }}

No notifications yet.

{{ toolTitle }}

{{ toolScope }}

Showing · {{ insightScopeLabel }}

Weekly training load (km)

{{ b.label }}

Energy-zone distribution

{{ z.label }} · {{ z.pct }}%
{{ insightAttend.pct }}attendance
{{ s.label }}{{ s.value }}
Swimmer agemaxHR = 220 − age → {{ zoneMaxHR }} bpm

Six-zone system

{{ z.code }} {{ z.name }}HR {{ z.hr }} · La {{ z.lac }} mmol · {{ z.wr }}

Squad → zone permission

{{ h }} {{ r.sq }} {{ c.mark }}
● trains it◐ limited○ never

T-pace & poolside HR check

maxHR = 220 − age
Pulse check: count beats for 6 sec × 10 = HR (bpm)
T-pace / 100 = 1000 m trial ÷ 10
T-pace / 100 = 400 m trial × 2.5 ÷ 10

{{ tpSelInitials }} {{ tpSelName }}

Log a new trial

{{ tpaceErr }}

{{ t.typeLabel }} · {{ t.time }}{{ t.dateLabel }} · T-pace {{ t.tpace }}/100

{{ promoScopeLabel }}

Flags swimmers ranked top-3 in squad, at the top of their age band, or due a quarterly review.

No candidates right now — everyone's reviewed and settled.

{{ c.initials }} {{ c.name }}{{ c.sqName }} {{ c.badgeLabel }}

{{ c.reasonsStr }}

Swimmer / parent requests

{{ r.swName }} — {{ r.event }}

Add entry — {{ entryMeetName }}

{{ entryNewErr }}

Entering {{ entrySelName }}

H{{ e.heat }}·L{{ e.lane }} {{ e.name }}{{ e.event }}

{{ clockView.section }}

{{ clockView.time }}{{ clockView.rep }}

{{ clockView.setTxt }}

Up next

{{ clockView.nextTxt }}

No sets in this squad's plan yet.
Build a session in the Plans tab, then run it here.

{{ reviewPlanMeta }}

{{ reviewVerdict.t }}

{{ reviewVerdict.s }}

Submitted by coach {{ reviewSubmittedAgo }}

{{ c.label }}{{ c.msg }}

Deterministic rules check the plan against the club's zone ruleset for this squad. The AI writes the explanations — it never overrides a rule verdict.

{{ g.h }}

{{ g.d }}

Live board

{{ boardTitle }}

{{ boardMeta }}

No results logged yet for this board.
Log a T-pace test or import meet results to populate it.

{{ r.rank }} {{ r.name }} {{ r.time }}

No clips yet. Add a race by YouTube, Vimeo, or direct .mp4 link.

{{ activeVideoTitle }}{{ activeVideoTag }}

Playback speed — slow motion

Race type

All splits captured ({{ videoSplitsDone }}/{{ videoSplitsTotal }})

Lap splits (sec, from video time)

{{ l.t }}
{{ l.lap }}

Play the clip and tap Lap at each split to build the chart.

Notes

{{ n.text }}

{{ videoUrlErr }}

Dryland & conditioning — {{ squad.name }}

Import scan for {{ ibSelName }}

{{ inbodyPdfMsg }}

{{ inbodyQrMsg }}

Detected values

{{ d.l }}{{ d.v }}

Health analysis · {{ ibAnalysis.scanCount }} scans on file

{{ ii.l }}{{ ii.v }}

Recommended nutrition plan

{{ rec }}

VIP Sponsors Directory

{{ sponsorsScopeLabel }} · {{ sponsorsRows.length }} sponsored

No sponsored swimmers yet.
Mark a swimmer as sponsored from their profile.

Talent / Move-up Board

{{ talentScopeLabel }} · {{ talentRows.length }} ready for review

No move-up candidates right now.
Swimmers appear here once they reach the top age of their squad.

Relay Builder

{{ relayScopeLabel }} · fastest logged PBs

{{ grp.title }}

{{ grp.count }}

Medley relay

Freestyle relay

Not enough freestyle PBs for a full team.
No PBs logged in this scope yet — relays appear once swimmers have times.
From (Mon)
To
{{ seasonTotalWeeks }}weeks
{{ seasonPhaseCount }}phases

Macrocycle · full season

{{ seasonStartLabel }} → {{ seasonEndLabel }}

Macro dashboard

{{ seasonMacroTotalKm }}kmPlanned
{{ seasonMacroSessions }}Sessions
{{ seasonMacroAvgKm }}kmAvg / week

Weekly load progression

Mesocycles · training blocks

{{ ph.weeks }}w

Target meets · taper into these

Weeks 1–2 before each target show a taper flag on the timeline below.

Microcycles · weeks

{{ mm.name }}
Taper week — ease load into the meet
{{ w.weekKm }}kmWeek total
{{ w.sessionCount }}Sessions
{{ w.avgKm }}kmAvg / session
DaySessionZoneMetres
{{ ss.slotLabel }} {{ ss.title }} {{ ss.zone }} {{ ss.m }}

No sessions saved in this week yet. In the Plans tab, set a session's date within this week and tap “Save session”.

{{ composeImageEl }}
{{ p.avatar }} {{ p.author }}{{ p.role }} · {{ p.time }} {{ p.tag }}

{{ p.text }}

{{ p.imageEl }}
{{ p.comments }}
{{ goalsSwLabel }}
Squad season goals · {{ goalsSquadName }}Target per event · current = squad average PB

Editing squad targets below. Search a swimmer above to set and edit their individual season goals with AI-suggested targets.

{{ goalMsg }}

{{ g.pct }}
{{ g.event }} Achieved {{ g.sourceLabel }}
Target{{ g.target }}Current PB{{ g.current }}

{{ aiOut.title }}

{{ bl.label }}

{{ ln }}

In production this calls Claude (Sonnet) via your Anthropic API key — set once in Settings. ~1¢ per generation.

{{ adminTitle }}

{{ adminSub }}

Add swimmer to {{ swSquadFilterName }}

Personal bests

{{ pb.label }}
{{ r.initials }}{{ r.genIcon }} {{ r.name }}Age {{ r.age }} · {{ r.squadName }}

Personal bests

{{ pb.label }}

No swimmers match.

Paste Hy-Tek text

Or upload a PDF

{{ meetImportSummary }}

{{ calErr }}

Event program

{{ compErr }}

Event program{{ m.eventsLine }}
{{ t.name }} · {{ t.event }}{{ t.time }}
{{ s.avatar }} {{ s.name }}{{ s.sub }}
{{ s.editPhotoAvatar }}

Club name

Training zone method

Current ruleset: {{ brandView.ruleset }} · {{ brandView.squadCount }} squads

Locale

Text direction

Currency

{{ settingsMsg }}

These settings drive Vortex SC's white-label configuration — the same app can be re-branded and re-ruled per club without code changes.

Anthropic API key

Powers the AI Assistants (Season Architect, Dryland, Nutrition, Workout Review). Stored only on this device.

{{ settingsMsg }}

Database sync

Push everything on this device to the shared Supabase database now. Use this once from the device that has your data, then it stays in sync automatically.

{{ dbTestMsg }}

{{ syncMsg }}

About this club

Vortex SC · 9 squads · {{ swimmerTotal }} swimmers · {{ meetTotal }} meets on record

Reset local data

Clears saved plans, family logins, roster edits and the API key on this device. Cannot be undone.

Print preview

Review before printing or saving as PDF

Vortex SC
{{ printSheet.clubName }}
Session plan
{{ printSheet.squadName }}
{{ printSheet.printDate }}
Session · {{ printSheet.zoneLabel }}
{{ printSheet.title }}
{{ printSheet.coach }}
{{ printSheet.total }}
metres
{{ pvsec.title }}· {{ pvsec.subtotal }}m
{{ pvset.dist }}m
{{ pvset.zoneCode }}
{{ pvset.txt }}
Stroke: {{ pvset.strokesStr }}
Type: {{ pvset.typesStr }}
Tools: {{ pvset.equipStr }}
Rest: {{ pvset.restStr }}
{{ pvset.hrStr }}
Vortex SC
{{ printProgram.clubName }}
Meet program
{{ printProgram.squadName }}
{{ printProgram.printDate }}

{{ printProgram.meetName }}

Heat {{ hh.heat }}

Ln {{ rr.lane }} {{ rr.name }} {{ rr.event }}
Generated from the Vortex SC coaching app VORTEX SWIMMING CLUB
Vortex ID
VIP
Vortex SC Member Card
{{ vortexIdCard.avatarEl }}{{ vortexIdCard.genIcon }}
Name{{ vortexIdCard.name }}
Date of birth{{ vortexIdCard.dob }}
Squad{{ vortexIdCard.squadName }}
ID Number{{ vortexIdCard.idNumber }}
Season{{ vortexIdCard.season }}
Vortex SC
Add Ladder / Pyramid

Shape

Rungshow many swims {{ ladderRungsVal }}
Start distancethe first rung {{ ladderStartVal }}m
Step sizeadded each rung {{ ladderStepVal }}m
Repeats eachswims per rung {{ ladderRepsVal }}
Send-off / 50pace clock per 50m {{ ladderPaceStr }}

Build a rung

{{ manRepsVal }} × {{ manDistVal }}m {{ manPaceStr }}
Stroke

Your ladder · {{ manCount }} rungs

{{ r.num }} {{ r.label }}
{{ ladderTotal }} m≈ {{ ladderTimeMin }} mins

{{ ladderText }}

Notes

{{ relayPickerTitle }}

{{ relayPickerSub }}

No swimmers in this group have a PB for this stroke.

Swimmers for this set

Tap to include · leave empty for the whole squad

No swimmers match — this squad's roster will appear here.

Switch squad

Vortex SC
{{ printSheet.clubName }}
Session plan
{{ printSheet.squadName }}
{{ printSheet.printDate }}
Session · {{ printSheet.zoneLabel }}
{{ printSheet.title }}
{{ printSheet.coach }}
{{ printSheet.total }}
metres
{{ psec.title }}· {{ psec.subtotal }}m
{{ pset.dist }}m
{{ pset.zoneCode }}
{{ pset.txt }}
Stroke: {{ pset.strokesStr }}
Type: {{ pset.typesStr }}
Focus: {{ pset.labelsStr }}
Groups: {{ pset.groupsStr }}
Swimmers: {{ pset.swimmersStr }}
Send-off: {{ pset.sendoffStr }}
Tools: {{ pset.equipStr }}
Rest: {{ pset.restStr }}
{{ pset.hrStr }}
Vortex SC
{{ printProgram.clubName }}
Meet program
{{ printProgram.squadName }}
{{ printProgram.printDate }}

{{ printProgram.meetName }}

Heat {{ hh2.heat }}

Ln {{ rr2.lane }} {{ rr2.name }} {{ rr2.event }}
Generated from the Vortex SC coaching app VORTEX SWIMMING CLUB