BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
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.
翻訳待ち
Loading the full README.
Read the full README ↗Your swim. Any course.
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:
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.
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.
Light appearance · Method comparison & Turnmark Equivalence 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 |
|---|---|
iOS equivalents · Android equivalents
Embed the widget · Connect MCP · Native review and more screenshots
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.
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
This is the beginning of the README. Read the rest at the original. Read the full README ↗