.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_componentsshared/, library/, and each unique page-level custom body
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 installs on your bound store (pins store.templateId and the release, writes live templateData). With no flag the CLI asks, and Enter does not install. --yes alone does not install either. Existing installs keep their current version until something installs the new release. The developer loop is Develop and publish.

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