Paddle Subscription Checkout
Sell subscriptions through Paddle with entitlements granted only by verified events.
What it adds
A Paddle-backed subscription purchase and lifecycle flow where local access follows verified server events and prices stay under server control.
What your agent is told to do
5
What your agent is told to do
5-
1
Hold the catalogue mapping on the server: which local plan corresponds to which provider offering, at which price and currency. The client passes a plan identifier and nothing about money.
-
2
Carry an account or workspace reference into the checkout so the subscription that comes back can be attached to the right tenant without matching on email address.
-
3
Grant access only from verified server-side events, and store the event identifier so a retried delivery changes nothing a second time.
-
4
Project the subscription's status onto a single local access record that every permission check in the app reads, so entitlement is answered from one place rather than recomputed per screen.
-
5
This brief owns the whole lifecycle for this provider: purchase, renewal, change, and revocation. If a Stripe or Lemon Squeezy brief is also applied, they must write into the same local access record rather than each keeping their own.
Edge cases it handles
8
Edge cases it handles
8- The checkout's own completion callback in the browser proves only that the browser saw a success screen. Never grant an entitlement from it; show a pending state and let the verified server event do the granting.
- A completed checkout must map to exactly one account. If the reference is missing or points at an account that no longer exists, quarantine the event for an operator rather than matching on a name or an email that may belong to someone else.
- Provider events are retried until acknowledged and can arrive out of order. Verify them, deduplicate on their identifier, and refuse to apply one older than the state already recorded.
- Trials, pauses, cancellations effective at period end, refunds, and past-due states each imply different access. A cancellation scheduled for the end of the term must not revoke access today, and a past-due account must not keep access forever.
- Prices, currencies, and tax-inclusive totals must come from trusted server configuration. Tax-inclusive display means the amount shown differs by region, and letting the client choose the price makes that impossible to reconcile.
- Invoices and receipts must reflect the tax treatment actually applied, and the app should link to the provider's own document rather than reproducing figures that may not match.
- When the provider is unreachable, keep existing subscribers working on the last known access record. An inability to check is not evidence of non-payment.
- A user who upgrades or downgrades mid-term will see a proration the app did not calculate. Show the provider's figure rather than an estimate that will disagree with the invoice.
Definition of done
9
Definition of done
9- Plan, price, and currency come from server configuration and are never accepted from the client.
- Access is granted only by verified server events, never by a client-side checkout callback.
- Each subscription resolves to exactly one account, and unmatched events are quarantined for review.
- Duplicate and out-of-order events leave local state correct.
- Trials, pauses, cancellations, refunds, and past-due each produce a defined access outcome.
- All permission checks read one local access record.
- A provider outage preserves existing subscriber access.
- The feature matches the existing design system.
- No existing functionality is broken.
Related features
Lemon Squeezy License Sync
Lemon Squeezy License Sync
Sync Lemon Squeezy orders and license keys into the app's entitlement state.
What it does
A verified event pipeline mapping Lemon Squeezy orders, subscriptions, and license keys onto local entitlements, with activation limits and revocation handled.
How it works
- 1 Verify the authenticity of every incoming provider event before it changes anything. An unverified purchase notification is a request from the internet to give away your product.
- 2 Keep an explicit server-side table mapping each purchasable variant to the entitlement it grants. Do not infer the plan from a product name, because names get edited for marketing reasons and entitlements should not move when they do.
- 3 Bind each license key to a single account on first activation and refuse to activate it against a different one afterwards, with a documented path for an operator to release a key that genuinely needs to move.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/lemon-squeezy-license-sync
Stripe Customer and Subscription Sync
Stripe Customer and Subscription Sync
Keep local billing state matching Stripe as subscriptions, invoices, and plans change.
What it does
A verified event pipeline that projects Stripe customer, subscription, and invoice state onto the app's own access records, with reconciliation for anything the pipeline missed.
How it works
- 1 Define one local projection of billing state per account: which plan, which status, which period it runs to, and whether access is currently allowed. Every entitlement check in the app reads that projection and nothing else.
- 2 Verify every incoming event as genuinely from the provider before acting on it, and record its identifier so a replay is recognised and ignored. Providers retry on any non-success response, so handlers must be safe to run repeatedly.
- 3 Store a timestamp or version with the projection and refuse to apply an event that is older than what has already been written. Events arrive out of order, and a stale cancellation overwriting a fresh renewal locks a paying customer out.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/stripe-customer-and-subscription-sync
Shopify Order Import
Shopify Order Import
Import Shopify orders into the app with money, fulfilment, and later edits accurately kept.
What it does
A resumable import of the connected store's orders, mirroring line items, discounts, taxes, and fulfilment state locally.
How it works
- 1 Separate the initial backfill from the ongoing feed. The backfill walks history in a stable order behind a resumable cursor; the feed applies live updates as they arrive.
- 2 Key every imported order on the shop identifier together with the store's own order identifier, so re-running the import updates existing rows instead of duplicating them.
- 3 Store money as an exact decimal with its currency alongside it, and keep both the shop currency and the presented currency where they differ. Do not convert to a single display currency on the way in, because the original amounts cannot be recovered afterwards.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/shopify-order-import
How it works
-
1
Copy the link
Grab the Markdown instruction URL for this feature.
-
2
Give it to your AI
Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.
-
3
It inspects, then implements
Your agent reads your existing app first, then adds the feature to fit it.
Works with your stack
These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.
Need it tighter than that? Customize the feature and tell it exactly what you're running.