WWebBuddyMarketplace
Selling it

Selling it as SaaS

Run YourDesk for many studios: plans and the pricing page, Stripe and PayPal checkout, what a plan does and does not change, and the licence you need.

6 min readUpdated Oct 17, 2026Applies to YourDesk 1.0.0

On this page

YourDesk can run as a multi-tenant service: studios sign up on your deployment, each gets its own desk, and a public /pricing page sells plans through Stripe or PayPal. Everything on this page is optional for a single-studio install.

Important

Check your licence first. On CodeCanyon, the Regular License covers one end product whose end users are not charged. If studios pay to use your YourDesk deployment (a subscription, a one-off fee, any paid plan), you need the Extended License. Read Envato's licence terms for the authoritative wording; this note is a summary, not legal advice.

Plans

Plans are managed under Ops → Plans and listed on /pricing, in sort order.

Field What it does
Name, description, features Display text on the pricing card. Features are a list of up to 24 lines.
Price label Display text only, for example "$29 / month". It is not used for charging.
Amount What checkout charges, in cents (2900 is 29.00). Zero makes the plan free.
Currency A currency code, USD by default
Interval Free, Month, Year or Once
Highlighted Shows the card in the accent style
Active on pricing Inactive plans are hidden and cannot be bought
Stripe price ID Optional; see Stripe setup
PayPal plan ID Saved but not used in 1.0.0

The migrations create two example plans: Solo (free) and Studio (labelled "$29 / month", amount 2900 USD, monthly). Their feature lists mention extra seats, priority Agent throughput and the Ops console; edit them to describe what you actually offer, because nothing enforces those lines (see below).

Deleting a plan is not blocked when studios are on it; their workspaces then show no plan name in Ops → Workspaces. Prefer switching a plan off with Active on pricing.

What the pricing page shows

Plan Button
Free Start for free for visitors; Activate Solo for signed-in users (the label is fixed in code, whatever the plan's name). Activates at once with no payment.
Paid, Stripe enabled with a secret key Pay with Stripe
Paid, PayPal enabled with a client ID and secret Pay with PayPal
Paid, neither provider ready Create an account or Open YourDesk; nothing can be bought

Visitors who are not signed in are sent to sign up first; after signing up they need to return to /pricing themselves to buy, because the chosen plan is not carried through sign-up. Only a studio's owner can start, change or downgrade its plan; teammates get "Only the studio owner can change the plan." The tagline and maintenance message from Ops → Product appear on this page.

What a plan does in 1.0.0

Warning

Not in this version yet: plans do not limit anything. A plan is recorded against the studio and shown in Ops → Workspaces, but no feature, seat count, project count or Agent use is gated by it, and a lapsed or cancelled plan does not restrict the studio. Studios also cannot see their current plan inside the app, and there is no billing page or customer portal. Describe your plans honestly, and enforce limits in code if you need them.

What is recorded per studio: the plan, a status (free, active or canceled), the provider and its customer or subscription reference, and for Stripe the current period end when Stripe supplies it.

Stripe setup

  1. Get your keys. In the Stripe dashboard, copy the secret key. Start with test mode (sk_test_…).

  2. Add a webhook endpoint in Stripe (Developers → Webhooks) pointing at:

    Text
    https://desk.example.com/api/payments/stripe/webhook

    with these events:

    • checkout.session.completed
    • customer.subscription.updated
    • customer.subscription.deleted

    Copy the endpoint's signing secret (whsec_…).

  3. Enter both under Ops → Payments → Stripe, choose test or live, switch it on and save. The publishable-key field is stored but not needed: checkout redirects to a page hosted by Stripe.

  4. Prices. Either create a product and recurring price in Stripe and paste its price ID (price_…) into the plan, or leave the price ID empty and YourDesk creates the price at checkout from the plan's amount, currency and interval.

  5. Set BETTER_AUTH_URL to your HTTPS origin. Checkout's success and cancel addresses are built from it; without it they point at http://127.0.0.1:8080.

Warning

The webhook signing secret is required. Without it, Stripe still takes the customer's money, but every webhook is rejected and the plan is never activated. Ops → Overview warns while Stripe is enabled with no webhook secret.

What happens at checkout

  • Pay with Stripe opens Stripe Checkout: a subscription for Month and Year plans, a single payment for Once plans.
  • After paying, the customer lands on /pricing/success, which says "You're set" straight away. The plan itself switches when Stripe's webhook arrives, usually within seconds.
  • A completed checkout with payment status paid, or a subscription event with status active or trialing, sets the studio's plan to active.
  • A subscription that is cancelled, unpaid or expired (or deleted) sets the status to canceled. Past-due subscriptions are left as they are.
  • Webhooks are signature-checked, and only plans that are active, paid and in the plan list can be activated.

Cancellations, refunds, card changes and receipts are handled in the Stripe dashboard (and Stripe's own emails); YourDesk has no billing screen for studios.

PayPal setup

  1. Create a REST app at developer.paypal.com and copy its Client ID and Secret (sandbox credentials for testing).
  2. Enter them under Ops → Payments → PayPal, choose test (sandbox) or live, switch it on and save.
  3. There is no webhook to configure. PayPal sends the buyer back to /api/payments/paypal/capture, which captures the payment.

How it works:

  • Pay with PayPal creates a PayPal order for the plan's amount and currency and sends the buyer to approve it.
  • On return, YourDesk loads the order from PayPal with your credentials, checks that it was created by this site for that studio and plan and that the amount and currency match the plan exactly, captures it, and activates the plan only once PayPal reports the capture as completed.
  • Revisiting the return address cannot activate the plan twice.

Important

PayPal payments are one-off in 1.0.0, even for Month and Year plans. There are no PayPal subscriptions or renewals, and nothing changes the plan when the period ends. If the buyer approves but never comes back to your site, the order is not captured and no money is taken.

Costs and margins

YourDesk does not track your costs. Your own bills are your hosting, your database, Stripe or PayPal fees, and xAI usage if you provide a platform XAI_API_KEY (every studio's AI use is then on your key; see The Agent). Check each provider's current pricing before you set yours.

Before you launch a SaaS

  • Buy the right licence (see the top of this page).
  • Sign up as the first admin before sharing the address, and consider closing sign-up until you are ready.
  • Rename the product in src/lib/brand.ts and the marketing pages; the Ops brand name does not rebrand the interface. See the FAQ.
  • Edit the plans so their feature lists match what you actually provide.
  • Test Stripe end to end in test mode, including the webhook, before switching to live keys.
  • Decide whether studios bring their own xAI keys or you pay for a platform key with a spending limit.
  • Read Known limitations so your own sales pages promise only what the product does.