Skip to content
StanbackPublic

About

Your swim. Any course. Swim time conversion, published standards, and local swim history for web, iOS, and Android. Powered by a shared Rust engine, with SDK and MCP tools.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

8 stars

Watchers

1 watching

Forks

Latest commit

 

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Turnmark

Your swim. Any course.

Try Turnmark →

Your offline swim companion: convert across pool courses, compare your times with published standards and World Aquatics points, and understand your next target. Built for swimmers, coaches, and parents, with private device-local comparisons. The web app is available today; native iOS and Android apps are in development, including a local record of actual meet and practice swims. See the product positioning for the workflow and platform distinctions.

Available in the web app:

  • Live SCY / SCM / LCM comparisons with event-specific distance mapping
  • NCAA conversions by default, with a quiet documented Colorado Timing alternative and method comparison
  • 2,892 published USA Swimming 2024–2028 motivational times, revised October 10, 2025
  • Original-course standards ladder with the next level and time gap
  • World Aquatics points from 70 published 2026 metric base times
  • Automatic, device-local conversion history with stroke filters, restore, remove, and clear
  • 904 published 2026 USMS Nationals targets for adults, with explicit SCY/LCM and age-group coverage
  • 2027 Futures, 2027 Junior Nationals and 2026–2027 NISCA All-America time thresholds, with explicit course coverage and source editions
  • Optional USA Swimming / NCAA altitude policies, feet/meters input, and explicit sea-level comparisons
  • Shareable URL fragments, CSV export, and up to eight device-local saved comparisons
  • Automatic system light/dark mode with a saved appearance override
  • Installable desktop/mobile app with offline calculations and bundled tables
  • Pre-rendered introduction and expandable FAQs, canonical/social metadata, and app structured data
  • Responsive layouts, keyboard controls, reduced-motion support, and self-hosted fonts

No backend, account, analytics, third-party runtime requests, or uploaded swim data. Conversion history and saved comparisons stay in this browser’s local storage. Sharing a link shares the event, time, category, age group, and elevation contained in its URL fragment.

In use

The web app is live. The native screens below are development previews, not store releases.

The web converter starts with a blank time. This example shows 58.32 in SCY, and its NCAA course equivalents. Published standards and points follow in their own section.

Turnmark web converter with editable inputs and SCY SCM LCM equivalents

Light appearance · Colorado Timing example · Layout review and mobile flow

Fresh native installs start with a blank time and direct entry. These development captures show that example in the editable inputs; equivalents follow below. Logging an actual swim remains an explicit action.

iOS · Converter Android · Converter
iPhone converter with editable swim inputs first and a sample time Android converter with the same editable swim inputs first

iOS equivalents · Android equivalents

Embed the widget · Connect MCP · Native review and more screenshots

History

Turnmark started long before it had that name. Bri Stanback swam competitively from roughly 1993 to 2005 and built an early swim time converter in the late 1990s, giving swimmers a simple way to compare times across pool courses.

The tool evolved from JavaScript to PHP and eventually came to GitHub as php-swim-time-conversion. Along the way, versions of the converter found a home on other swimming websites.

In 2026, Bri returned to the project, modernized it, and gave it the Turnmark name. The familiar converter grew into an offline web app with documented factors, published standards and points, and local swim history. Its calculations now live in one Rust engine, shared through JavaScript, Swift, and Kotlin libraries. That engine now powers the web app, an embeddable calculator, and a public MCP service, with native iOS and Android apps in development. WebMCP is planned. The original idea remains: a useful tool swimmers can trust.

Develop

Requires Node.js 22.12+ and Rust (pinned by rust-toolchain.toml). Install the pinned WebAssembly binding generator before the first npm install.

cargo install wasm-bindgen-cli --version 0.2.129 --locked
npm ci
npm run dev

The app is served at http://localhost:5173/. Production uses Cloudflare Workers Static Assets at https://turnmark.app/, rooted at /.

npm run check
npm test
npx playwright install chromium
npm run test:browser
npm run test:sdk:package
npm ci --prefix deployment --ignore-scripts
npm run test:production
npm run build
npm run preview

The production app is static files in dist/. CI checks types, unit tests, desktop/mobile interactions, accessibility and offline behavior through the local Cloudflare runtime. Trusted main builds deploy automatically from an isolated job using a token scoped to the website Worker. PRs have no Cloudflare credentials. See hosting and deployment for setup and token rotation.

The web app consumes the Turnmark SDK. Its calculations, clock helpers, and numerical lookups execute in the same Rust core that generates Swift and Kotlin libraries. Canonical snapshots live in root data/; JavaScript contains API adapters and source metadata. npm ci and the normal development/check/build commands compile the SDK automatically.

The browser loads a bundled WebAssembly asset before hydration; pre-rendering uses the same engine in Node. Offline caching includes that versioned asset. See the shared engine guide for packaging, checks and tradeoffs. The native apps use SwiftUI and Jetpack Compose. A compact publisher embed is prepared at /embed/v1/, with copyable HTML and a live preview on the widget setup page. Remaining platform work is tracked in the platform plan. The MCP adapter supports offline stdio and stateless Streamable HTTP at https://mcp.turnmark.app/mcp, using the same SDK. See the public MCP quick start for connection settings and llms.txt for the agent documentation index. MCP Apps compatible hosts can show an inline conversion card with editable time and comparison course; text-only clients retain the same results. The published local package 0.2.0 includes the same Apps resource. See the implementation and host verification notes.

Turnmark interactive MCP conversion card with source context and time/course controls

The agent interface plan covers future WebMCP work. The public npm packages @turnmark/sdk and @turnmark/mcp are available at 0.1.0 and 0.2.0, respectively. See SDK releases for installation and release status.

The native apps in apps/ios and apps/android include the shared converter and Standards & points (B–AAAA, USMS targets and World Aquatics points), plus offline meet history: record actual swims, correct records, compare personal bests in My times, and transfer records with a common JSON export/import format. Saved conversions remain separate from performances. They are development builds, not yet store releases, and do not yet have all web features. See native app setup and scope for local builds, simulator/emulator tests, and the public-repository CI boundary.

Data and calculations

Read the methodology for sources, rounding behavior, coverage, and limitations, and the data maintenance guide for updating the tables. Inputs and original-course benchmarks are separated from course estimates. A converted time is not an official swim or a guarantee of meet-entry eligibility.

Application code is licensed under GPL-3.0-or-later. Published numerical data remains attributed to its respective source organizations. Turnmark is an independent project and is not affiliated with or endorsed by NCAA, USA Swimming, U.S. Masters Swimming, or World Aquatics.

Community

Bug reports, data corrections, accessibility improvements, and pull requests are welcome. Read the contributing guide for setup, checks, and source-data requirements, and follow the code of conduct. Use the issue templates to report a problem or suggest an improvement. Report vulnerabilities privately as described in the security policy. The full application license is in LICENSE.

Conversion methods and resources

NCAA remains the default. Choose documented Colorado Timing formulas in the collapsed Calculation options section, alongside a separate optional altitude policy. Choose Course conversion for NCAA / Colorado; choosing it does not change altitude policy. The choice changes course estimates, while standards and points use the original swim. Shared comparisons retain the selected method. See methodology for source editions, supported events and direction-specific formulas.

The footer’s Resources section links to the SwimSwam converter, Swim Standards, USA Swimming, Swimcloud, USMS and World Aquatics. Turnmark stays focused on conversion and benchmarks; the roadmap records the current scope and separate model-research follow-up.

Install and offline use

Your conversion method, age groups, standards selection, category, swum-in course, elevation, altitude policy, and ft/m choice are remembered in this browser. Restored elevations stay visible in the expanded elevation panel. A shared conversion link overrides remembered swim settings, including altitude. Race time starts blank, and stroke/distance start fresh; conversion history keeps past comparisons. Reset clears the time, restores the app defaults, and updates remembered preferences. Preferences stay on this device and work without an account.

Chrome and Edge can install Turnmark from the address bar/browser menu; the app’s Install button invokes the native prompt when available and otherwise shows instructions. Safari on iPhone/iPad supports Share → Add to Home Screen. Icons include 192px/512px PNGs, a maskable icon, and an Apple touch icon. The manifest and service worker are scoped to / on turnmark.app.

Once an online visit completes caching, calculations, standards, history, and saved comparisons work without a connection. Source links still need the internet. Browser-managed storage may be cleared or evicted; this is not cloud backup. New static builds are cached separately; a waiting service worker activates after existing app tabs close. The network is preferred for document navigation, so online visits receive the current release. Offline navigation retains the complete active build until a new worker activates, keeping its HTML and asset revisions together.

Discoverability

The build pre-renders the actual Svelte page and FAQ answers, then hydrates it in the browser. A backend is not needed. Metadata lives in index.html and src/data/site.ts; scripts/finish-build.mjs emits app JSON-LD and dist/sitemap.xml. Keep the production URL, Vite base, manifest scope, and service worker base consistent if moving hosts. No search indexing or answer-engine placement is guaranteed, and no Search Console submission is performed automatically.

About

Your swim. Any course. Swim time conversion, published standards, and local swim history for web, iOS, and Android. Powered by a shared Rust engine, with SDK and MCP tools.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages