.dev
Storefront templates

Marketplace

Publish templates, cut releases, sell paid listings, and manage licenses, reviews and earnings.

Publishing puts your template in the marketplace where merchants browse, install, and — for paid listings — buy with their Feeef wallet.

What a publish writes

One feeef template publish updates several resources:

ResourceContent
store_templatesThe listing: metadata + head schema/data + price
store_template_releasesImmutable semver snapshot + changelog per publish
template_componentsYour shared/ + library/ components
store_template_localesOne row per language from dist/locales/*.json
# Free listing
feeef template publish --public --apply

# Paid listing
feeef template publish --public --price 5000 --version 1.2.0 \
  --changelog "Fix PDP gallery + RTL" --apply

--apply additionally installs on your bound store (pins store.templateId + release, writes live templateData). Without it, existing installs keep their current version until the merchant updates.

Listing management

Authors can edit listing metadata anytime (PATCH /store_templates/:id):

FieldNotes
title, subtitle, bodyShown in Browse and on the detail page
imageUrl, screenshots, demoUrlCover, gallery, live demo link
category, tagsDiscovery
price, discountDZD; 0 = free. Price changes never rebill past buyers
policypublic / unlisted
salesClosedStop new purchases; existing licenses keep install/reinstall

Admin-only: featured, moderationStatus (approved / pending / rejected — rejected listings are hidden from the public index).

  • Prices are one-time, per store, paid from the merchant's wallet.
  • The platform takes a configurable cut (default 30%); the rest lands in your wallet. Track it via GET /store_templates_earnings or the merchant app's earnings screen.
  • Ownership (store_template_licenses) is per store and forever: reinstall and updates are free, and the cut is snapshotted at purchase time.
  • Buyers get a working copy on install — paid listings cannot be forked into a new catalog row.

Merchant states: Free → Install · Paid → Buy → Owned → Install · Owned + newer release → opt-in Update.

Marketplace API

MethodPathPurpose
GET/store_templatesBrowse (paginated; pass storeId for enrichment: owned, effectivePrice, updateAvailable, ratingAvg…)
POST/store_templates/:id/purchaseWallet purchase → license
POST/store_templates/:id/installInstall (optional releaseId)
GET/POST/store_templates/:id/releasesList / create releases
GET/store_templates/:id/releases/:releaseIdRelease detail
GET/store_templates/:id/releases/:releaseId/renderRender a historical release
GET/POST/store_templates/:id/reviewsReviews — { storeId, rating 1–5, body? }, requires a license
GET/store_templates_earningsAuthor earnings

SDK: feeef.storeTemplates.* (JS) / Feeef.instance.storeTemplates (Dart).

Any shop can preview any release without touching its live theme:

https://{slug}.feeef.store/?templateId={listingId}&templateRelease={releaseId}

Exit with /?templateRelease=0. Useful for demo links on your listing page.

Reviews and ratings

Merchants with a license (or the author) can post one review per store; ratingAvg and ratingCount are denormalized onto the listing for browse sorting.

On this page