“Can I get a 30-day trial?”
- Hardcode it
- Email check + deploy
- With Offer SDK
- Trial incentive
This is how pricing turns into spaghetti one reasonable request at a time, and where Offer SDK fits.
An AI writing assistant for busy founders. You can see it so clearly that you start building that night.
notes.md · 1:14 AM
YourApp.ai
AI first drafts for busy founders
Editor, AI rewrites, exports, templates, team seats. Pricing can wait until launch.
Starter, Pro and Team. You map features to plans in a config file, add a paywall check and ship. Clean, for about a week.
Starter
$9/mo
200 credits
Pro
$29/mo
2,000 credits
Exports
Team
$79/mo
10,000 credits
10 seats
const PLANS = { starter: { credits: 200, exports: false }, pro: { credits: 2000, exports: true }, team: { credits: 10000, exports: true, seats: 10 },};const access = { ...PLANS[user.plan] };“Can I get 30 days instead of 14? Half my team is out this week.”
Easy enough. It's one customer, so it's one special case.
Maya · Starter trial
“Can I get 30 days instead of 14? Half my team is out this week.”
const PLANS = { starter: { credits: 200, exports: false }, pro: { credits: 2000, exports: true }, team: { credits: 10000, exports: true, seats: 10 },};const access = { ...PLANS[user.plan] };if (user.email === "maya@studio.co") trialDays = 30;“I don't need Pro. I just need more credits this month.”
That's not a plan you have, so you hardcode a credit bump for one account and redeploy.
Ben · Starter
“I don't need Pro. I just need more credits this month.”
const PLANS = { starter: { credits: 200, exports: false }, pro: { credits: 2000, exports: true }, team: { credits: 10000, exports: true, seats: 10 },};const access = { ...PLANS[user.plan] };if (user.email === "maya@studio.co") trialDays = 30;if (user.id === "acct_88") access.credits += 500;“Could we get exports on Starter? We'd happily pay extra.”
They'll pay for it. Now a Starter account has exports, and your paywall, your billing and your UI all need to know.
Acme Studio · Starter
“Could we get exports on Starter? We'd happily pay extra.”
const PLANS = { starter: { credits: 200, exports: false }, pro: { credits: 2000, exports: true }, team: { credits: 10000, exports: true, seats: 10 },};const access = { ...PLANS[user.plan] };if (user.email === "maya@studio.co") trialDays = 30;if (user.id === "acct_88") access.credits += 500;if (user.plan === "starter" && EXPORTS_ADDON.has(user.id)) { access.exports = true;}“Can my audience get 50 more credits than usual? My video goes live Friday.”
50 more credits than usual for her audience, live before her video on Friday. A great deal, if you can ship it in time.
@sarahbuilds · 80k followers
“Can my audience get 50 more credits than usual? My video goes live Friday.”
const PLANS = { starter: { credits: 200, exports: false }, pro: { credits: 2000, exports: true }, team: { credits: 10000, exports: true, seats: 10 },};const access = { ...PLANS[user.plan] };if (user.email === "maya@studio.co") trialDays = 30;if (user.id === "acct_88") access.credits += 500;if (user.plan === "starter" && EXPORTS_ADDON.has(user.id)) { access.exports = true;}if (signup.ref === "sarah" && Date.now() < SARAH_ENDS) { access.credits += 50;}Four customers, four special cases scattered across billing, paywall and signup. Nobody remembers why Acme has exports, and nobody knows who actually uses them. Saying yes got expensive.
4
one-off checks
4
deploys
0
visibility
const PLANS = { starter: { credits: 200, exports: false }, pro: { credits: 2000, exports: true }, team: { credits: 10000, exports: true, seats: 10 },};const access = { ...PLANS[user.plan] };if (user.email === "maya@studio.co") trialDays = 30;if (user.id === "acct_88") access.credits += 500;if (user.plan === "starter" && EXPORTS_ADDON.has(user.id)) { access.exports = true;}if (signup.ref === "sarah" && Date.now() < SARAH_ENDS) { access.credits += 50;}Plans, entitlements, add-ons, incentives and offers live in Offer SDK. Your app asks one question, what can this account do, and every deal becomes data instead of code.
const credits = useEntitlement("ai_credits");
const exports = useEntitlement("exports");
// every deal below lives in Offer SDKLonger trial
for Maya
More credits
for Ben
Exports on Starter
for Acme Studio
Audience bonus
for @sarahbuilds
Usage per feature shows what people actually use, so the next package is a decision, not a guess. Checkout runs through PayPal, and none of it touches your code.
const credits = useEntitlement("ai_credits");
const exports = useEntitlement("exports");
// every deal below lives in Offer SDKLonger trial
for Maya
More credits
for Ben
Exports on Starter
for Acme Studio
Audience bonus
for @sarahbuilds
Templates are barely used. Sell them as an add-on?
notes.md · 1:14 AM
YourApp.ai
AI first drafts for busy founders