Repository navigation
Add a "Connect your coach" flow to the dashboard - #17
Merged
Merged
Conversation
`tailscale serve status` on the host reports all three ports as tailnet only, and the hostname has no public DNS record. Nothing is reachable from the internet, which matters for anything that calls in from a provider's cloud (hosted MCP connectors).
Connecting an MCP client meant creating a token in Settings, then going to the README for a snippet and substituting the server address and the token by hand. Settings now has an AI coach card: pick Claude Desktop, Claude Code, Cursor, VS Code or another client, and it creates a token and shows the steps and the snippet with both already filled in. The address is the origin the dashboard is open at, so it is right for however the athlete reaches the server; the Claude Desktop snippet adds --allow-http when that origin is plain http. The VS Code config keeps the token out of the file, so the token is shown and copied separately. The card is hidden for admins, who have no training data, and when the endpoint is off: /api/health now reports `mcp` for that. The sidebar's liveness probe and Settings share one query. Copying falls back to the legacy copy command, because the clipboard API does not exist on a plain-http origin, and the button says so when nothing was copied.
aderaaij
added a commit
that referenced
this pull request
Nov 13, 2026
Fix the coach setup instructions found in review of #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Settings gets an AI coach card for athletes. Connect opens a dialog: pick Claude Desktop, Claude Code, Cursor, VS Code or Other, and it creates a token named "Coach · " and shows numbered steps plus the snippet with the server address and token already filled in, ready to copy.
Why
Connecting a client meant creating a token, then going to the README and substituting the address and token into a snippet by hand. This removes the copy-paste mistakes for every client while the token-based flow is what we have.
Details
--allow-httpwhen that origin is plain http and not the local machine.MCP_ENABLED=false./api/healthnow reportsmcpso the dashboard can tell; the sidebar's liveness probe and Settings share one query (useLiveness).frontend/src/lib/coachSetup.ts. It mirrors the README's "Connect a client" section.A second commit corrects CLAUDE.md: this deployment uses Tailscale Serve (tailnet only), not Funnel.
Verification
On the demo stack built from this branch:
initializewith the generated token returns 200 from/mcp.npx mcp-remote <url> --header 'Authorization:${AUTH_HEADER}', the shape the Claude Desktop snippet uses, connects and returns the server handshake.test_backup.pybecausepg_dumpis not installed on the machine it ran on.Not checked: the
--allow-httpbranch and the clipboard fallback (the demo runs on localhost, where neither triggers). There are no frontend unit tests in the repo, so the snippet builder has none.