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.
A training app with offline logging, honest statistics and an AI coach that understands a sore shoulder.
Sports & fitnessGitHub @kristianwindOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Uruz ᚢ — strength-training PWA with offline logging, honest statistics and an AI coach. Built for iPhone and web; runs as a Rune in Yggdrasil Panel.
Translation pending
Loading the full README.
Read the full README ↗The strength rune. A training app for iPhone and web: log your sets fast, get coached by Kvasir, see honest statistics, and be kept at it by the ravens Huginn & Muninn.
Uruz is built mobile-first for use in a gym: big buttons, few taps per set, and it works with no internet at all — sets are saved on the device and sync themselves when the signal comes back.
It runs as a Rune in Yggdrasil Panel — one
click from the panel and it is up with its own database and backups. It also
runs perfectly well on its own with docker run, or locally with npm run dev.
uruz-training.com · Yggdrasil Panel · På dansk
⚠️ Early development & built with Claude Code. Provided as-is, with no warranty and no liability whatsoever — you use it entirely at your own risk. Free software under AGPL-3.0.
| Train — today's workout, or pick freely | Log a set — prefilled, one tap | Stats — tonnage, progress, insights |
| Valhalla — leaderboard, runes and milestones | Kvasir — the weekly analysis and "ask anything" | Library — exercises with steps and cues |
Taken by npm run gen:screenshots against demo data — nobody's real
training. npm run gen:screenshots:da renders the app in Danish.
The three ways to run Uruz are alternatives, not steps. Pick one:
| For whom | Where | |
|---|---|---|
| Locally with Node | Trying it out, or working on it | Up and running in 2 minutes below |
| Docker | Running it permanently on a machine you have | Running it with Docker |
| A Rune in Yggdrasil Panel | You already run the panel and want its backups and updates | Running it as a Rune |
All three run exactly the same app against the same data. You can start locally and move it later — the database is one file you can carry.
The local route. If it should run permanently, take Docker or Yggdrasil.
You need Node.js 22 or newer. Open a terminal in the project folder:
npm install
npm run setup
npm run dev
Then open http://localhost:3000. The first screen asks you to create the administrator account — that is you.
That is all. No database to install, no accounts to create, no keys to obtain. All of that comes later, and only if you want the AI coach, notifications or cloud hosting.
npm run db:seed:demo && npm run db:seed:history
That creates demo users and about twelve weeks of plausible training, so the statistics, Valhalla and the badges have something to show.
| Area | What you get |
|---|---|
| Logging | Pick a ready-made workout or train freely. Sets are prefilled with last time's weight × reps — usually you just confirm. The rest timer starts itself. Records are celebrated on the spot. |
| Works offline | Everything is logged locally first. No signal in the basement is not a problem: it syncs itself afterwards, and nothing is lost. |
| Library & builder | 29 exercises with a drawing, steps and cues, plus 7 ready-made workouts. Build your own, or duplicate a template and adjust it. |
| Statistics | Progress per exercise, tonnage, an attendance calendar, muscle balance, records — and fun insights ("you have lifted 9.8 × a city bus 🚌"). |
| Kvasir (AI coach) | A weekly analysis, "ask Kvasir", a programme laid out from four questions — and, most usefully, tell him about a niggle or a wish and he adapts the training around it. Works with any AI provider, including a model on your own network. Without one, the plans and suggestions are built from rules instead. |
| Valhalla | Friendly rivalry, runes and badges, ranks from Thrall to Einherjar, and milestones. |
| The ravens | Reminders on your training days, praise after a good session, and a gentle push if you have been away. The tone can be set gentle or tough. |
| Admin | Invite people, manage roles, edit the shared library, read the audit log, and see the status of AI, push and email. |
| Languages | English and Danish — including the exercise content, not just the buttons. |
Uruz is a PWA: it sits on the home screen and behaves like a real app.
On a computer: open it in Chrome or Edge and click the install icon in the address bar.
There is a walkthrough inside the app under Me → Install app.
Everything below is optional. Uruz works without it — Kvasir still gives concrete, data-driven suggestions; they are rule-based rather than written by a language model.
Copy .env.example to .env.local and fill in what you want:
cp .env.example .env.local
Uruz is not tied to one vendor. Set AI_PROVIDER to anthropic, openai,
google, ollama or custom.
# Your own model on your own network — no API key needed
AI_PROVIDER=custom
AI_BASE_URL=http://your-server.lan:8080/v1
AI_MODEL=gemma-4-26b-qat
# Or a hosted one
AI_PROVIDER=anthropic
AI_MODEL=claude-sonnet-5
AI_API_KEY=sk-ant-…
Check the connection under Me → Admin → AI status.
npm run gen:vapid
Put the two keys it prints into .env.local. Without them, reminders go by
email instead.
Uruz sends sign-in links, invitations and reminders. Two ways, one fallback.
This is the beginning of the README. Read the rest at the original. Read the full README ↗