BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Melveo marketing site, legal pages, and checkout flow — built with Astro.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Static marketing + legal site + Stripe checkout completer for Melveo (app repo). Built with Astro 6 + Tailwind 4, deploys as a static site to Cloudflare Pages.
This repo deliberately stays separate from the iOS app — different
stack, different deploy cadence, different ownership. See
docs/planning/178_web_repo_handoff.md in the app repo for the
contract between the two.
| Concern | App repo (Swift) | Web repo (this) |
|---|---|---|
| Stack | Xcode, Swift | Node, TS, Astro |
| Deploy cadence | TestFlight (manual, hours) | Cloudflare Pages (push, ~30s) |
| CI | xcodebuild | astro build |
| Editors | Devs only | Marketing-friendly MDX |
| AASA / legal pages | — | Lives here |
| Stripe checkout UI | — | Lives here |
| Path | Purpose |
|---|---|
/ | Landing — value prop, features, pricing teaser, contact. |
/privacy | Privacy policy. Placeholder until legal review. |
/terms | Terms of service. Placeholder until legal review. |
/checkout/success | Post-Stripe redirect; universal-link target for iOS. |
/.well-known/apple-app-site-association | AASA for Universal Links + webcredentials. |
src/styles/global.css mirrors Melveo/Melveo/Design/Tokens/Colors.swift
in the app repo. When the SwiftUI palette changes, update both — see
the handoff doc 178 for the sync rule.
Brand cyan: #00f0ff (Electric Cyan, doc 58 §1).
bun install
bun run dev # http://localhost:4321
First boot does Vite dep optimization (motion, react, three, gsap,
tailwind…) which takes ~30s. Subsequent starts are ~3-5s because
node_modules/.vite/ caches the bundled deps.
bun install and commit
the resulting bun.lock. Don't mix in npm install / pnpm —
parallel lockfiles drift and break CI silently.bun add <pkg> or bun remove <pkg>,
then commit package.json + bun.lock together in one commit."overrides" in package.json without verifying
the resolved version actually loads under Node ESM. The previous
"overrides": { "zod": "4.3.5" } pinned a build whose subdirectory
package.json is invalid under strict ESM resolution
(ERR_INVALID_PACKAGE_CONFIG) — astro never finished booting.server.port in astro.config.mjs. The default
(4321) is wired into .claude/launch.json, all dev docs, and the
Cloudflare Pages preview URL. Changing it silently breaks the
Claude preview MCP (it tries :4321 and gets chrome-error://).defineConfig({…}). Without
it you lose type-safety and the sitemap() integration silently
drops its TypeScript shape — easy to forget to re-add when refactoring.Symptom: bun run dev prints $ astro dev then sits silent, no
"ready in …" line, port 4321 either isn't listening or replies with
nothing. Standard recovery, in order:
# 1. Kill any zombie dev / install processes
pkill -9 -f 'astro dev'; pkill -9 -f 'bun install'
# 2. Clean reinstall
rm -rf node_modules # leave bun.lock in place
bun install # rebuilds from lockfile, ~3-4s
# 3. Verify with a verbose start
node node_modules/.bin/astro dev --verbose
If --verbose reveals a Node error like ERR_MODULE_NOT_FOUND or
ERR_INVALID_PACKAGE_CONFIG, the lockfile + a dependency are out of
sync. Try rm -rf node_modules bun.lock && bun install to regenerate
the lockfile from scratch (last resort — locks in the latest matching
semver, so review the diff before committing).
bun run build # outputs ./dist
bun run preview # preview built site
main.One-time setup:
# In Cloudflare dashboard:
# Pages → Create project → Connect to Git → select melveo-web repo
# Build command: bun run build
# Output dir: dist
# Node version: 22.12+
# Custom domain: melveo.app + www.melveo.app
DNS already on Cloudflare (used for Resend mail subdomain too — see team_app's reference_resend_setup memory).
TEAMID placeholder in apple-app-site-associationapp.melveo.melveo matches Xcode Info.plist/privacy + /terms (currently placeholders)/og-default.png (currently 404)../melveo-app (planning under docs/planning/)