Skip to content
~/projects/sailwing

Sailwing

Wind on the map, sails in your hands. Trim a 7 m keelboat, plan a race leg, and follow the navigator on your phone.

ver 0.1.0 lang TypeScript Browser
quickstart — zsh
https://sailwing.burso.eu/
npm install
npm run dev
http://localhost:5173
npm test
npm run build

Sailwing is a sailing-trim and race-navigation tool that runs in the browser. The map is on the left and the trim panel on the right. You place a 7 m keelboat, sheet the main and jib, and ask how to reach a mark. Wind, land and depth are fetched in the page.

Open it at sailwing.burso.eu. The same build is at sailwing.burso.workers.dev. The write-up, including where the velocity-prediction model stops, is on the blog.

Map and windClick the water to place the boat. Live 10 m wind comes from Open-Meteo, or set it with the compass dial and speed slider.
TrimSteer and sheet the main and jib. Speed, apparent wind, VMG and heel, with per-sail hints, auto-trim and a polar diagram.
PlannerPick a bearing or drop race marks. Each leg gets direct, tacking or gybing, with headings, sheet angles and an ETA. Simulate sails the course.
GPS and raceOn a phone the boat follows your position, course and speed. Race calls the next mark, with Prepare and Tack now, laylines and rounding within 30 m.
Land and depthRoutes stay off land and out of water shallower than your draft + 0.5 m. OpenStreetMap worldwide, EMODnet depth for European seas. Not a nautical chart.
Static siteVite and TypeScript, served as Cloudflare Workers static assets. Tests cover the physics, the navigator and routing.

On the water

A tack costs 10 seconds and a gybe 6, so a short leg stays straight unless the two-board route arrives sooner. The course is saved on the device. Draft defaults to 1.5 m and the shore margin to 40 m, both under Plan → Safety. On the map, red is too shallow and amber is inside that margin. Depth covers European seas. Lakes and other seas keep the shore margin only.

Small rocks, moorings and anything newer than the data are missing. Keep a lookout.

Develop

npm install
npm run dev      # http://localhost:5173
npm test         # physics, navigator and routing
npm run build    # static site in dist/

npm run dev:phone serves HTTPS on your LAN so a phone can use GPS. npm run deploy builds and runs wrangler deploy. Pushes to main are built and deployed by Cloudflare’s Git integration. GitHub Actions runs the tests and the build.