Products & Features
Define what you sell. Create products with one or more variants, attach reusable features for entitlement-based access control.
Proyecta Commerce uses three concepts: products, variants, and features.
- Product — the thing you sell (e.g. “Pro Plan”, “T-shirt”, “Strategy Call”)
- Variant — a pricing tier or configuration of a product (e.g. “Pro Monthly $29”, “Pro Annual $290”, “T-shirt – Large”)
- Feature — a reusable entitlement key your app checks at runtime (e.g.
pro_features,unlimited_projects,api_access)
A product can have multiple variants. A product also has one or more resources attached — usually features — that grant access when a customer subscribes.
Two ways to model what you sell
Section titled “Two ways to model what you sell”Commerce composes with the rest of the platform, so there are two shapes for “a thing you sell” — and Proyecta chooses the right one for you:
- Commerce-native products — subscriptions, plans, one-time upgrades, and features/entitlements. Defined directly in Admin > Commerce > Products. This is the model the rest of this page describes.
- A content-backed storefront catalog — goods with photos, prices, and descriptions that a business owner edits day to day. These live in the CMS as a sellable collection: each entry is the product. When an entry is published, Proyecta automatically weaves it into Commerce as a real, purchasable product — creating the product and its priced variant for you, and copying the price straight from the content field. The storefront renders the content price and checkout charges the linked variant, and because they share one source they can never diverge. You manage these items as content (in your app’s Admin, in the builder or on your published site), not under Commerce > Products. See Content Management.
A plain catalog that does not take card payments — a browse-only menu, or a store whose “buy” button opens a WhatsApp order link — is just ordinary content — an ordinary catalog collection, with no Commerce weave. Card checkout is what makes a collection sellable.
Creating a product
Section titled “Creating a product”In Admin > Commerce > Products, click Create product (or ask the AI: "Create a Pro plan at $29/month and a Business plan at $99/month."). Each product needs:
- A display name (e.g. “Pro”)
- At least one variant
Variants
Section titled “Variants”Each variant carries its own pricing:
| Field | Notes |
|---|---|
name |
Display label for the variant (“Monthly”, “Annual”, “Large”) |
currency |
Three-letter ISO code — USD, EUR, GBP, JPY, BRL, MXN, INR… (130+ supported) |
unit_amount |
Price in the smallest currency unit (cents). 2900 = $29.00 |
recurring |
Optional — { interval: 'week' | 'month' | 'year' }. Omit for one-time prices. Daily billing is not currently supported. |
is_default |
Accepted but not yet enforced — default variant selection is not currently implemented. |
media |
Attach images or videos by CDN file ID (see Files) |
Pricing is immutable. Once a variant is created, its price can’t be changed — create a new variant instead. This protects existing subscribers from accidental price changes.
Features (entitlements)
Section titled “Features (entitlements)”Features are the access-control primitive. Create a feature once in Admin > Commerce > Products, then attach it to one or more products. Each feature has a name, an optional description, and a key — lowercase letters, numbers, and underscores (e.g. pro_features) — which is what your app checks against.
When you create a product, you attach features to it via “resources”. Customers who subscribe to a product gain access to every feature attached to it.
Then, in your app, gate on that key:
const { hasAccess, isLoading } = useEntitlement('pro_features');
if (isLoading) return <Spinner />;if (!hasAccess) return <UpgradePrompt />;return <ProOnlyThing />;The check runs server-side against the signed-in session, so it can’t be spoofed from the browser. See Integrate Commerce Into My App for the full pattern.
Note: Always gate on the feature key — the slug derived from the feature name (e.g.,
pro_features) — not the feature’s internal id.
This is how you gate Pro-only pages, API endpoints, or features in your app code.
Common product shapes
Section titled “Common product shapes”SaaS subscriptions
Create products: Free ($0/month), Pro ($29/month, $290/year), Business ($99/month, $990/year).Attach a 'pro_features' feature to Pro and Business so I can gate access in my code.Physical goods
Create a T-shirt product with three variants: Small, Medium, Large at $25 each.Digital goods
Create a course product with a single one-time variant at $149.Donations
Create a donation product with three variants: $25, $50, $100 — all one-time.Inventory
Section titled “Inventory”Proyecta Commerce does not currently track inventory for physical products. If you sell stocked items, manage stock counts in your app’s database and check them in your checkout flow.
Coming soon
Section titled “Coming soon”- Checkout field customization — collect additional info from buyers
- Pay-what-you-want pricing
- Built-in inventory tracking for physical products