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.
Melveo propojí wellness, readiness a zátěž hráčů do jednoho přehledu. Trenér ráno ví, kdo je připravený, koho šetřit a co změnit v plánu. Vyzkoušejte pilot.
Translation pending
Sports & fitnessAstro · TypeScriptGitHub @melveoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Melveo marketing site, legal pages, and checkout flow — built with Astro.
Taken from the repository README
Loading the full README.
Read the full 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/)