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

# Storefront

> Sell your music direct to fans from a branded storefront. Stripe-powered checkout, 0% platform fee on every paid Patchline tier. Includes smart links, pre-saves, fan stats, and an embeddable widget.

export const SurfaceMatrix = ({feature}) => {
  const FEATURE_SURFACES = {
    aria: {
      web: {
        available: true,
        detail: "Full surface — dashboard home"
      },
      telegram: {
        available: true,
        detail: "@AriaMusicBizBot, public"
      },
      claude: {
        available: true,
        detail: "Via the Patchline plugin"
      },
      mcp: {
        available: true,
        detail: "Product tools via OAuth 2.0 / PKCE"
      }
    },
    "catalog-import": {
      web: {
        available: true,
        detail: "Paste URL in dashboard"
      },
      telegram: {
        available: true,
        detail: "Paste URL to @AriaMusicBizBot"
      },
      claude: {
        available: true,
        detail: "Through Aria plugin actions"
      },
      mcp: {
        available: true,
        detail: "analyze_url tool"
      }
    },
    "sonic-analysis": {
      web: {
        available: true,
        detail: "Auto-runs on upload"
      },
      telegram: {
        available: true,
        detail: "Paste track URL to @AriaMusicBizBot"
      },
      claude: {
        available: true,
        detail: "Through Aria plugin"
      },
      mcp: {
        available: true,
        detail: "get_audio_features / get_song_intelligence"
      }
    },
    "release-planner": {
      web: {
        available: true,
        detail: "Dashboard → Projects"
      },
      telegram: {
        available: false,
        detail: "Conversation only, no full rollout view"
      },
      claude: {
        available: true,
        detail: "Through Aria plugin"
      },
      mcp: {
        available: true,
        detail: "get_releases tool"
      }
    },
    storefront: {
      web: {
        available: true,
        detail: "Dashboard → Store + public /store/[slug]"
      },
      telegram: {
        available: false,
        detail: "Not a Telegram surface"
      },
      claude: {
        available: false,
        detail: "Not yet exposed"
      },
      mcp: {
        available: false,
        detail: "Not yet exposed"
      }
    }
  };
  const f = FEATURE_SURFACES[feature];
  if (!f) return null;
  const surfaces = [{
    key: "web",
    label: "Web dashboard",
    icon: "🖥"
  }, {
    key: "claude",
    label: "Claude",
    icon: "✨"
  }, {
    key: "mcp",
    label: "MCP",
    icon: "⚡"
  }];
  return <table style={{
    width: "100%",
    marginTop: "12px",
    marginBottom: "12px"
  }}>
      <thead>
        <tr>
          <th style={{
    textAlign: "left",
    padding: "8px 12px",
    borderBottom: "1px solid rgba(255,255,255,0.10)"
  }}>Surface</th>
          <th style={{
    textAlign: "left",
    padding: "8px 12px",
    borderBottom: "1px solid rgba(255,255,255,0.10)"
  }}>Status</th>
          <th style={{
    textAlign: "left",
    padding: "8px 12px",
    borderBottom: "1px solid rgba(255,255,255,0.10)"
  }}>Notes</th>
        </tr>
      </thead>
      <tbody>
        {surfaces.map(s => {
    const v = f[s.key];
    return <tr key={s.key}>
              <td style={{
      padding: "8px 12px",
      borderBottom: "1px solid rgba(255,255,255,0.05)"
    }}>
                <span style={{
      marginRight: "8px"
    }}>{s.icon}</span>
                {s.label}
              </td>
              <td style={{
      padding: "8px 12px",
      borderBottom: "1px solid rgba(255,255,255,0.05)"
    }}>
                {v.available ? <span style={{
      color: "#22C55E",
      fontWeight: 600
    }}>✓ Available</span> : <span style={{
      color: "#71717A"
    }}>— Not available</span>}
              </td>
              <td style={{
      padding: "8px 12px",
      borderBottom: "1px solid rgba(255,255,255,0.05)",
      fontSize: "13px",
      color: "inherit"
    }}>
                {v.detail}
              </td>
            </tr>;
  })}
      </tbody>
    </table>;
};

export const TierBadge = ({tier}) => {
  const styles = {
    free: {
      label: "Free",
      color: "#A1A1AA"
    },
    starter: {
      label: "Starter+",
      color: "#00E6E2"
    },
    pro: {
      label: "Pro+",
      color: "#0068FF"
    },
    scale: {
      label: "Scale+",
      color: "#7A5BFF"
    },
    enterprise: {
      label: "Enterprise",
      color: "#FF7A59"
    },
    all: {
      label: "All plans",
      color: "#22C55E"
    }
  };
  const t = styles[tier?.toLowerCase()] ?? styles.all;
  return <span style={{
    display: "inline-flex",
    alignItems: "center",
    gap: "4px",
    padding: "2px 10px",
    borderRadius: "999px",
    border: `1px solid ${t.color}40`,
    background: `${t.color}1A`,
    color: t.color,
    fontSize: "12px",
    fontWeight: 600,
    fontFamily: "var(--font-family-mono)",
    verticalAlign: "middle"
  }}>
      {t.label}
    </span>;
};

export const AICallout = ({page}) => {
  const slug = page ?? "";
  const mdUrl = `https://docs.patchline.ai${slug}.md`;
  return <div style={{
    marginTop: "32px",
    padding: "16px 20px",
    borderRadius: "12px",
    border: "1px solid rgba(0,230,226,0.25)",
    background: "linear-gradient(135deg, rgba(0,230,226,0.08), rgba(0,104,255,0.05))",
    color: "inherit",
    fontSize: "14px",
    lineHeight: 1.6
  }}>
      <strong style={{
    display: "block",
    marginBottom: "6px",
    color: "#00E6E2"
  }}>
        For AI agents reading this page
      </strong>
      The canonical machine-readable version of this page is at{" "}
      <a href={mdUrl}>
        <code>{mdUrl}</code>
      </a>
      . For product actions, connect to{" "}
      <code>www.patchline.ai/api/mcp/v1</code>
      {" "}and call MCP <code>tools/list</code> for the current tool schema.
      Rules for navigating these docs:{" "}
      <a href="https://docs.patchline.ai/AGENTS.md">
        <code>docs.patchline.ai/AGENTS.md</code>
      </a>
      .
    </div>;
};

Patchline storefronts let you sell music direct to fans from a
branded page — `patchline.ai/store/<your-slug>`. Stripe handles the
checkout and payouts. Patchline takes a **0% platform fee** on storefront sales on paid
plans — you keep your revenue after standard Stripe processing.

<TierBadge tier="all" />   0% platform fee on storefront sales on paid plans.

## What's included

<CardGroup cols={2}>
  <Card title="Public store page" icon="browser" href="/storefront/setup">
    Branded page at `patchline.ai/store/<slug>` with your banner,
    products, smart links. Mobile + desktop, dark by default.
  </Card>

  <Card title="Stripe-powered checkout" icon="credit-card" href="/storefront/checkout-payouts">
    Stripe Connect. Cards, Apple Pay, Google Pay. Payouts to
    your bank account.
  </Card>

  <Card title="Embeddable widget" icon="code" href="/storefront/setup#embed">
    `/store/<slug>/embed/<assetId>` — drop into your website, Linktree,
    artist site. Looks native.
  </Card>

  <Card title="Smart links + pre-saves" icon="link" href="/storefront/smart-links">
    Routing links for fans across DSPs. Pre-save flow for unreleased
    tracks. Built on the same storefront infrastructure.
  </Card>

  <Card title="Fan stats" icon="chart-line" href="/storefront/checkout-payouts">
    Sales, conversion, top fans, geographic breakdown. Built into the
    storefront dashboard.
  </Card>

  <Card title="Asset delivery" icon="download" href="/storefront/checkout-payouts">
    Buyers get download links via email + in-page after purchase. Signed
    URLs, expiring tokens, anti-leech.
  </Card>
</CardGroup>

## Keep your revenue

Patchline takes a **0% platform fee** on storefront sales on paid
plans — you keep what you earn after standard Stripe processing. The
exact fee breakdown by plan lives on the
[pricing page](https://patchline.ai/pricing).

## When to use it

* **You have superfans willing to pay direct.** Bandcamp-style audience.
* **You want margins streaming can't match.** A direct sale pays far
  more per fan than fractions-of-a-cent streaming payouts.
* **You're selling more than standard releases** — demos, instrumentals,
  lossless files, or bonus downloads from your catalog.
* **You want a Bandcamp alternative** that integrates with the rest of
  your Patchline workflow (release planning, smart links, fan stats).

## Where it lives

<SurfaceMatrix feature="storefront" />

Storefronts are a **web-first** product. Setup happens in the dashboard;
the public store page is a separate route at `patchline.ai/store/<slug>`.

| Surface                   | Path                                        |
| ------------------------- | ------------------------------------------- |
| Artist-side setup         | Sidebar → **Store** at `/dashboard/store`   |
| Public store page         | `patchline.ai/store/<your-slug>`            |
| Single-product page       | `patchline.ai/store/<slug>/<assetId>`       |
| Checkout                  | `patchline.ai/store/<slug>/checkout`        |
| Thank-you / download page | `patchline.ai/store/<slug>/thank-you`       |
| Embed widget              | `patchline.ai/store/<slug>/embed/<assetId>` |

## Quick start

<Steps>
  <Step title="Sign up + connect Stripe">
    On Starter+, sidebar → **Store** → **Connect Stripe**. Standard
    Stripe Connect flow — takes 5 minutes if you already have a Stripe
    account, longer if not.
  </Step>

  <Step title="Pick what you're selling">
    Storefronts sell **assets** from your catalog. Pick the tracks,
    EPs, albums, or bundles you want to sell.
  </Step>

  <Step title="Set pricing">
    Per-product. Pay-what-you-want supported (with optional minimum).
    Currency follows your Stripe account default.
  </Step>

  <Step title="Add a banner + bio">
    Banner image (1500×500 recommended). Short bio. Your storefront URL.
  </Step>

  <Step title="Share the link">
    `patchline.ai/store/<your-slug>`. Drop it in your Linktree, bio,
    socials, fan email.
  </Step>
</Steps>

See [Set up your store](/storefront/setup) for the full setup walkthrough.

## Prerequisites

* **A paid plan** (recommended) for the 0% platform fee.
* **Stripe Connect account** — created during setup if you don't have
  one. Takes 5 minutes.
* **At least one asset in your catalog** to sell.

## How fans buy

From the fan's side:

1. They click a link (smart link, embed, social, your bio).
2. Land on `patchline.ai/store/<slug>/<assetId>` — product page with
   audio preview, art, price.
3. Click **Buy** → Stripe Checkout. Cards, Apple Pay, Google Pay.
4. Land on the thank-you page with a direct download link + emailed
   download link (signed URL, 30-day expiration).
5. Fan stats record the purchase: which asset, which country, referrer.

Total time fan-side: \~30 seconds.

## What kinds of products you can sell

* **Single tracks** from your catalog.
* **EPs / albums** as bundles.
* **Demos / unreleased material** (gated behind purchase).
* **Instrumentals** as separate SKUs.
* **Lossless masters** (WAV / FLAC at premium price).
* **Custom digital products** — exclusive cover art, tab books, etc.

Storefront v1 is for digital music products, not physical goods or
subscriptions.

## Pricing

Plans, AI credits, and limits live on the [pricing page](https://patchline.ai/pricing) — we keep them there so they're always current.

## Related features

* [Set up your store](/storefront/setup) — full setup walkthrough
* [Smart links & pre-saves](/storefront/smart-links) — routing links + pre-save flow
* [Checkout & payouts](/storefront/checkout-payouts) — Stripe Connect and payout schedule
* [Catalog](/catalog/import) — assets are what you sell

## FAQ

<AccordionGroup>
  <Accordion title="Is the 0% platform fee really 0%?">
    Yes — on paid plans Patchline keeps nothing of the sale. Standard
    Stripe processing applies separately. See
    [pricing](https://patchline.ai/pricing) for the full fee breakdown.
  </Accordion>

  <Accordion title="How fast are payouts?">
    Stripe's standard payout schedule: 2 business days in the US, 5–7
    in most other countries. You can configure faster payout schedules
    in Stripe (some include a small fee).
  </Accordion>

  <Accordion title="Can fans listen before they buy?">
    Yes. Product pages include a 30-second preview by default (full
    preview optional, configurable per asset).
  </Accordion>

  <Accordion title="Can I use my own domain?">
    Custom domain for the storefront (`store.your-band.com`) is on the
    Enterprise tier today. Other tiers use
    `patchline.ai/store/<your-slug>`.
  </Accordion>

  <Accordion title="Is there a marketplace where fans discover all artists?">
    Yes — `patchline.ai/marketplace`. It's the cross-store discovery
    surface. Your storefront is auto-listed by default; you can opt out
    in Store settings.
  </Accordion>
</AccordionGroup>

<AICallout page="/storefront/overview" />
