Skip to main content

Exclusive Posts (Post Purchases)

Creators can gate posts behind a coin paywall. Only users who purchase access can view the full content.

Each property has its own checkbox marking whether that specific piece is fully implemented and functional end to end (frontend + backend) — update these yourself as work lands; this page won't overwrite them.

  • Creator sets a coin price on a post (CreatePostModal.tsx — a "Make exclusive" toggle next to the visibility picker)
  • Buyer purchases/unlocks access (purchasePostAccess mutation, called from the unlock button on the feed post card / post detail view — PostCard.tsx, PostModal.tsx)
  • Checking access before rendering (Post.hasPostAccess / Post.media server-side gating)
  • Creator sales & earnings dashboard — Settings → Sales & earnings (CreatorSalesPage) shows lifetime earnings (myPostPurchaseEarnings: sales, revenue, your earnings, platform fees) and a per-sale list (myPostPurchaseSales)
  • Buyer purchase history (myPurchasedPosts) and admin refunds (refundPostPurchase) — buyer history is the "My purchases" tab on Settings → Sales & earnings; admin refunds are the /moderation/refunds panel (admin-schema adminGetPostPurchases + adminRefundPostPurchase, gated MODERATE_CONTENT), which lists purchases and returns coins to the buyer
  • Frontend paywall/unlock UI — exclusive posts show inline in the normal feed/profile grid with a coin-price badge; opening one shows a lock overlay, an "Unlock for N coins" button, and (on multi-photo posts) a "+N locked" hint for the media still hidden
  • Per-photo free previews — on a paid post, the creator can tap specific photos to mark them as a free preview shown to everyone; the rest stay locked until purchase
  • Price-drop display — lowering the coin price on an already-published paid post keeps the old price visible struck-through next to the new one

See the technical reference for GraphQL schemas, routes, source file links, and per-field wiring status.