Docs
Sign In

Academy Store

The Academy Store lets you sell merchandise, gear, and supplements to your members. Products are synced with Stripe for seamless payment processing, and members can purchase items directly from the mobile app.

Stripe required

The store requires a connected Stripe account. If you haven't set up Stripe yet, see Payments & Stripe Setup first.

Adding Products

Navigate to Store in the sidebar and click Add Product.

Product Fields

NameProduct name, up to 100 characters (e.g., 'Academy Gi - White')
DescriptionProduct description, up to 1,000 characters
PricePrice in dollars (minimum $1.00). This is a one-time purchase price, not recurring.
CategoryApparel, Equipment, Accessories, Supplements, or Other
Stock CountNumber of items in stock. Leave blank for unlimited stock.
ImageProduct photo. Supports drag-and-drop, paste from clipboard, or file picker.
ActiveWhether the product is visible to members (toggle on/off)

Image Upload

The product image upload supports three methods:

  • Drag and drop an image file onto the upload area
  • Paste an image directly from your clipboard
  • Click the upload area to open a file picker

Images are stored securely and served publicly so members can see product photos in the mobile app.

Behind the Scenes

When you create a product, the platform:

  1. Creates a Stripe Product on your connected account
  2. Creates a Stripe Price (one-time, not recurring) with your specified amount
  3. Saves the product to your database with Stripe references
  4. Uploads the image to storage (if provided)

Managing Products

Products Tab

The Products tab shows a grid of product cards with:

  • Product image (or a placeholder)
  • Name and price
  • Category badge
  • Stock status (in stock, low stock, or out of stock)
  • Active/Inactive indicator

Stats Cards

Three summary cards at the top of the Products tab:

  • Active Products — Number of products currently available
  • Total Revenue — Sum of all paid and fulfilled orders
  • Pending Fulfillment — Orders that have been paid but not yet picked up

Editing a Product

Click any product card to open the edit dialog. You can modify all fields. If you change the price or currency, a new Stripe Price is created (Stripe Prices are immutable).

Deactivating a Product

Toggle a product to inactive to hide it from members without deleting it. The product remains in your catalog for record-keeping. Inactive products appear dimmed with an opacity overlay.

Stock Management

  • Products with a stock count show the remaining quantity
  • When stock reaches 5 or fewer, a "Low Stock" warning appears on the mobile app
  • When stock reaches 0, the product shows as "Out of Stock" and the purchase button is disabled
  • Stock is decremented automatically when a purchase is confirmed
  • Set stock to blank/empty for unlimited inventory (e.g., digital items or made-to-order products)

Order Management

Orders Tab

The Orders tab shows all customer orders with two sections:

Ready for Pickup queue — Paid orders waiting to be fulfilled, shown in chronological order (oldest first). Each entry shows the customer name, item count, total, and a Mark Fulfilled button.

All Orders list — A complete list of orders filterable by status (Pending, Paid, Fulfilled, Cancelled, Refunded). Click any order to view the full detail.

Order Statuses

| Status | Meaning | |--------|---------| | Pending | Order created, payment not yet confirmed | | Paid | Payment successful, awaiting pickup/fulfillment | | Fulfilled | Item handed to member, order complete | | Cancelled | Order was cancelled before fulfillment | | Refunded | Payment was refunded |

Order Detail

Click any order to see:

  • Customer information
  • Itemized breakdown (product name, quantity, subtotal per item)
  • Order total
  • Available actions based on status

Fulfillment Workflow

1

Member purchases item

The member buys a product through the mobile app (or an admin charges them directly). The order is created with "Paid" status.

2

Order appears in Ready for Pickup

The order appears in the Ready for Pickup queue at the top of the Orders tab.

3

Hand the item to the member

When the member comes to pick up their purchase, locate their order in the queue.

4

Mark as Fulfilled

Click Mark Fulfilled to complete the order. It moves out of the pickup queue and into the completed orders list.

Charging Members Directly

Admins can charge members directly for in-person purchases without the member needing to use the mobile app.

1

Click 'Charge Member'

Click the Charge Member button on the Store page.

2

Select the member

Choose a member from the dropdown. The member must have an active subscription with a payment method on file.

3

Select products and quantities

Browse the product list and set quantities for each item the member is purchasing.

4

Process the charge

Submit the charge. The member's card on file is charged immediately (no checkout flow needed). The order is created with "Paid" status, ready for fulfillment.

Saved card required

Direct charges require the member to have a saved payment method from an active subscription. Members without a subscription must use the self-service checkout flow on the mobile app instead.

Mobile Shopping Experience

Store Browsing

Members access the store from their Profile tab. The store screen shows:

  • Category filter — Horizontal scrolling pills to filter by Apparel, Equipment, etc.
  • Product grid — Two-column responsive grid with product images, names, prices, and stock indicators
  • Awaiting Pickup banner — If the member has paid orders awaiting fulfillment, a banner appears at the top with a link to view their orders
  • Pull-to-refresh for updated inventory

Product Detail

Tapping a product card opens the detail screen:

  • Full-screen product image
  • Category badge and stock warning (if low)
  • Product name, price, and description
  • Quantity selector (constrained by available stock)
  • Buy Now button with total price

Purchase Flow

There are two purchase paths depending on whether the member has a saved payment method:

With saved card (from an active subscription):

  • Tapping Buy Now shows a confirmation dialog: "Your card on file will be charged $X.XX"
  • Confirming charges the card immediately
  • Success alert shown, order created as "Paid"

Without saved card:

  • Tapping Buy Now opens Stripe Checkout in the system browser
  • Member enters payment details
  • After completing checkout, they're redirected back to the app
  • The webhook updates the order status to "Paid"

Order History

Members can view their purchase history from their profile, showing all orders with status, date, items, and totals.

Permissions

FeatureOwnerAdminInstructorStudent
Browse storeYesYesYesYes
Purchase itemsYesYesYesYes
Add/edit productsYesYesNoNo
Manage ordersYesYesNoNo
Charge members directlyYesYesNoNo
View all ordersYesYesNoOwn only