> ## Documentation Index
> Fetch the complete documentation index at: https://docs.saturday.fit/llms.txt
> Use this file to discover all available pages before exploring further.

# Become a coach

> Two ways to start coaching on Saturday, and the plan you land on

export const AppAction = ({path = "/open-app", children}) => {
  const LINK_STYLE = {
    fontWeight: 600,
    color: "#1aabb8",
    cursor: "pointer",
    textDecoration: "underline",
    textDecorationColor: "rgba(26, 171, 184, 0.4)",
    textUnderlineOffset: "2px",
    background: "none",
    border: "none",
    padding: 0,
    font: "inherit"
  };
  const deepUrl = "https://saturday.fit" + path;
  const [isMobile, setIsMobile] = useState(false);
  const [showQR, setShowQR] = useState(false);
  useEffect(() => {
    setIsMobile((/iPhone|iPad|iPod|Android/i).test(navigator.userAgent));
  }, []);
  const onEnter = e => {
    e.currentTarget.style.textDecorationColor = "#1aabb8";
  };
  const onLeave = e => {
    e.currentTarget.style.textDecorationColor = "rgba(26, 171, 184, 0.4)";
  };
  if (isMobile) {
    return <a href={deepUrl} style={LINK_STYLE} onMouseEnter={onEnter} onMouseLeave={onLeave}>
        {children}
      </a>;
  }
  const qrSrc = "https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=" + encodeURIComponent(deepUrl);
  return <>
      <button type="button" onClick={() => setShowQR(true)} style={LINK_STYLE} onMouseEnter={onEnter} onMouseLeave={onLeave}>
        {children}
      </button>

      {}
      {showQR && <div onClick={() => setShowQR(false)} style={{
    position: "fixed",
    inset: 0,
    zIndex: 9999,
    background: "rgba(0, 0, 0, 0.6)",
    display: "flex",
    alignItems: "center",
    justifyContent: "center",
    padding: "1rem"
  }}>
          {}
          <div onClick={e => e.stopPropagation()} className="not-prose" style={{
    background: "#ffffff",
    borderRadius: "16px",
    padding: "1.5rem",
    maxWidth: "320px",
    width: "100%",
    textAlign: "center",
    boxShadow: "0 20px 60px rgba(0, 0, 0, 0.35)"
  }}>
            <p style={{
    margin: "0 0 1rem",
    fontWeight: 600,
    color: "#11181c",
    fontSize: "0.95rem"
  }}>
              Scan with your phone to open the Saturday app
            </p>

            <img src={qrSrc} width={220} height={220} alt={"QR code to open " + deepUrl + " in the Saturday app"} style={{
    display: "block",
    margin: "0 auto",
    borderRadius: "8px"
  }} />

            {}
            <a href={deepUrl} style={{
    display: "inline-block",
    marginTop: "1rem",
    color: "#1aabb8",
    fontWeight: 600,
    fontSize: "0.8rem",
    wordBreak: "break-all"
  }}>
              {deepUrl}
            </a>

            {}
            <button type="button" onClick={() => setShowQR(false)} style={{
    display: "block",
    width: "100%",
    marginTop: "1.25rem",
    padding: "0.6rem",
    borderRadius: "10px",
    border: "none",
    background: "#1aabb8",
    color: "#ffffff",
    fontWeight: 600,
    cursor: "pointer"
  }}>
              Close
            </button>
          </div>
        </div>}
    </>;
};

# Become a coach

There are two doors into coaching. Both end in the same state: a coach account with **[portal access](https://coach.saturday.fit/dashboard)**, your own athlete subscription intact, an empty **[roster](https://coach.saturday.fit/dashboard)**, and an activation checklist on the dashboard.

## The two entry paths

<CardGroup cols={2}>
  <Card title="From the Saturday app" icon="mobile">
    Already a Saturday athlete? Open the **Accounts** page and tap <AppAction path="/open-app">Become a Coach</AppAction>. Your existing account gains coaching; your own training is untouched. **Stop Coaching** lives on the same page.
  </Card>

  <Card title="From the coach portal" icon="browser">
    No Saturday account yet? Sign up at **[coach.saturday.fit](https://coach.saturday.fit)**. Saturday provisions an athlete account for you, so your coach identity and athlete identity are one account from day one.
  </Card>
</CardGroup>

<Note>
  The in-app **Become a Coach** row is behind a staged rollout, so it may not be on your Accounts page yet. Signing up at **[coach.saturday.fit](https://coach.saturday.fit)** works either way and reaches the same account.
</Note>

## Every coach is also an athlete

Every coach has a Saturday athlete account and completes athlete onboarding. You coach fueling better having used it, and the <AppAction path="/open-app">persona toggle</AppAction> on the Accounts page switches between **Coaching** and **My Training** without logging out.

* **Portal-first sign-up:** Saturday creates your athlete account and subscription. You can finish athlete onboarding in the app whenever you like.
* **Already have an app account:** it is kept. Same login, now with coaching.
* **Signed up twice (app identity does not match portal identity):** Saturday detects the mismatch and offers to link the two into one account, keeping the account with more training history. Linking is the recommended path.
* **Want them separate?** **Keep them separate** is offered alongside linking. A few account shapes cannot be linked automatically; in those cases Saturday's team completes the link by hand and you keep coaching in the meantime.

## Your activation checklist

An empty dashboard opens with a **Get started** card and four steps, each with its own button:

1. **Invite your first athlete** from your **[roster](https://coach.saturday.fit/dashboard)**. See [Invite your first athlete](/coaching/first-athlete).
2. **Set up billing**, which opens **[Coach Subscription](https://coach.saturday.fit/admin/subscription)** to pick a plan. See [Who pays](/coaching/billing/who-pays).
3. **Finish your athlete setup** in the app, about 5 minutes. The button shows a QR code that hands your own athlete onboarding to your phone.
4. **Read the coach docs**, which lands here.

The card tracks progress, collapses to a **Setup complete** strip when all four are done, and can be dismissed. Once dismissed, a **Setup guide** link reopens it.

## Choosing a plan

You can start without paying. Plans live on **[Coach Subscription](https://coach.saturday.fit/admin/subscription)**, which the checklist's **Choose a plan** button, your Account Settings, and the command palette all open. (The **\$ Earning** item in the nav is Stripe Connect payouts, not your plan.)

| Plan           | Price         | Athletes                | Assistants |
| -------------- | ------------- | ----------------------- | ---------- |
| **Coach**      | Free          | 1, who self-pays        | None       |
| **Pro Coach**  | \$12.99/mo    | 2 included              | 1          |
| **Head Coach** | \$49.99/mo    | 5 included              | Up to 5    |
| **Business**   | \$149/mo flat | Fair-use roster ceiling | Unlimited  |
| **Enterprise** | Custom        | Custom                  | Unlimited  |

**Included** means covered by your plan fee, so the athlete pays nothing. The free **Coach** tier is the exception: it lets you coach one athlete, but that athlete pays for their own Saturday subscription. Covering an athlete yourself starts at Pro Coach. See [Who pays](/coaching/billing/who-pays).

Beyond the assistants your plan includes, you can buy extra assistant seats at \$10/seat/month and release them at any time. Business and Enterprise are already unlimited, so the seat add-on does not apply to them.

<Tip>
  **Saturday Lifetime owner?** Your coaching plan is 50% off for as long as you hold it. Pro Coach is $6.50/mo and Head Coach is $25.00/mo. The discount applies automatically and the plan cards show a **Lifetime 50% off** badge.
</Tip>

Coach plans are billed monthly. Upgrade, downgrade, or cancel from **[Coach Subscription](https://coach.saturday.fit/admin/subscription)**. An upgrade takes effect immediately; a downgrade or cancellation takes effect at the end of your paid period, and both can be undone before then. Cancelling moves your covered athletes to self-pay on that date. See [Take over & relinquish](/coaching/billing/take-over-relinquish) for what your athletes see when that happens.
