BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2,或任何藍牙控制器搭配 MyWhoosh、Rouvy、Zwift 等。可於 iOS、Android、Windows 與 macOS 免費試用。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證personal gym trainer
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Offline-first gym workout tracker, progressive overload engine, and stretching studio for Web (PWA), iPhone (iOS 18+), and Apple Watch (watchOS 11+).
IndexedDB) or Apple devices (LukiFittiStore).+2.5 kg, +1 rep) with Apple Watch Heart Rate Recovery fatigue detection.HKWorkoutSession), 1 Hz optical heart rate curves, active/total calorie tracking, per-set peak & recovery BPM, and iOS 18 Dynamic Island Live Activities./admin for user access and AI settings; AI workout planner and meal-photo calorie estimates for users an admin grants them to. See docs/admin-ai-nutrition.md.EN / DE): Full English and German interface and exercise search aliases.luki-fitti/
├── apps/
│ ├── web/ # Next.js 16 + React 19 + Tailwind CSS v4 PWA
│ ├── api/ # NestJS 12 REST API (Express 5, Swagger, Cookie + Bearer Auth)
│ ├── email-worker/ # BullMQ transactional email worker (MJML templates)
│ └── apple/ # Native Swift 6 workspace (iOS 18, watchOS 11, WidgetKit)
└── packages/
├── common/ # Shared Zod schemas, DTOs, enums, starter catalog & 1RM math
├── database/ # Prisma 7 PostgreSQL schema, migrations & seed script
├── ui/ # Shared Radix UI / shadcn-style accessible components
└── logger/ # Structured Winston logger
>= 22 and Yarn 1.22+apps/apple)Copy the sample environment files in packages/database, apps/api, and apps/web to .env.local:
cp packages/database/.env.sample packages/database/.env.local
cp apps/api/.env.sample apps/api/.env.local
cp apps/web/.env.sample apps/web/.env.local
| Variable | Workspace | Description |
|---|---|---|
DATABASE_URL | database, api | PostgreSQL connection URL |
REDIS_URL | api, email-worker | Redis URL for BullMQ and access-token revocation |
JWT_SECRET | api, web | Access token signing secret (>= 32 chars in production) |
JWT_REFRESH_SECRET | api | Refresh token signing secret (>= 32 chars in production) |
FRONTEND_URL | api | Allowed CORS origin (default http://localhost:3000) |
API_PORT | api, web | Backend port (default 3001) |
UMAMI_URL | api | Self-hosted Umami base URL (default https://umami.tony-luke.de) |
UMAMI_WEBSITE_ID | api | Umami website ID; pageview forwarding is off when unset or outside production |
UMAMI_ALLOWED_HOSTNAMES | api | Comma-separated hostnames to forward pageviews for (default luki-fitti.tony-luke.de) |
OPENROUTER_API_KEY | api | OpenRouter key for the AI features; they stay off when unset |
S3_ENDPOINT, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKET |
yarn install
yarn db:generate
yarn db:deploy
yarn db:seed
# Start development servers
yarn dev
| Command | Description |
|---|---|
yarn dev | Start development servers across workspaces |
yarn build | Build all packages and applications |
yarn test | Run unit and integration tests (api, web, and Swift LukiFittiKit) |
yarn lint | Run TypeScript and ESLint checks |
yarn db:migrate -- <name> | Create and apply a new Prisma migration |
yarn --cwd apps/api openapi:export | Export Swagger OpenAPI spec to apps/apple |
yarn --cwd packages/database admin:grant <email> | Give a registered account admin rights and all AI features |
apps/apple)The native iOS 18, watchOS 11, and Dynamic Island Widget targets share business logic via the LukiFittiKit Swift Package (apps/apple/Packages/LukiFittiKit).
# Run Swift package unit tests
swift test --package-path apps/apple/Packages/LukiFittiKit
# Generate LukiFitti.xcodeproj via XcodeGen and open in Xcode
cd apps/apple && xcodegen generate && open LukiFitti.xcodeproj
# Pair Apple Watch & iPhone Simulators for WatchConnectivity sync
xcrun simctl pair <WATCH_SIM_UDID> <IPHONE_SIM_UDID>
Config/Debug.xcconfig defaults to http://localhost:3001 and Config/Release.xcconfig defaults to https://luki-fitti.tony-luke.de. You can override the API URL in Xcode under Edit Scheme (⌘<) → Run → Environment Variables → LUKIFITTI_API_BASE_URL.api| Private S3-compatible storage (SeaweedFS) for meal photos; optional |