From 50cd413537aa7784eb37cb3f7a52d777b1af7433 Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Fri, 1 May 2026 12:24:30 +0200 Subject: [PATCH 1/2] Add native purchases revenue guide --- apps/docs/src/config/llmsCustomSets.ts | 2 +- apps/docs/src/config/sidebar.mjs | 1 + .../native-purchases/getting-started.mdx | 4 + .../native-purchases/revenue-playbook.mdx | 200 +++++++++++++++++ .../native-purchases/revenue-playbook.png | Bin 0 -> 72652 bytes .../native-purchases/revenue-playbook.svg | 32 +++ .../how-to-make-revenue-with-capacitor-iap.md | 211 ++++++++++++++++++ 7 files changed, 449 insertions(+), 1 deletion(-) create mode 100644 apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx create mode 100644 apps/web/public/native-purchases/revenue-playbook.png create mode 100644 apps/web/public/native-purchases/revenue-playbook.svg create mode 100644 apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md diff --git a/apps/docs/src/config/llmsCustomSets.ts b/apps/docs/src/config/llmsCustomSets.ts index 26fa871dc..eca506c9d 100644 --- a/apps/docs/src/config/llmsCustomSets.ts +++ b/apps/docs/src/config/llmsCustomSets.ts @@ -64,7 +64,7 @@ Plugin Native Audio|native audio playback plugin|docs/plugins/native-audio/** Plugin Native Biometric|biometric authentication plugin for fingerprint and face ID|docs/plugins/native-biometric/** Plugin Native Geocoder|native geocoding plugin for address lookup|docs/plugins/nativegeocoder/** Plugin Native Market|app store deep linking plugin|docs/plugins/native-market/** -Plugin Native Purchases|in-app purchases and subscriptions plugin|docs/plugins/native-purchases/** +Plugin Native Purchases|in-app purchases, subscriptions, paywalls, revenue playbook, and monetization plugin|docs/plugins/native-purchases/** Plugin Navigation Bar|Android navigation bar customization plugin|docs/plugins/navigation-bar/** Plugin NFC|NFC reading and writing plugin|docs/plugins/nfc/** Plugin Pay|Apple Pay and Google Pay integration plugin|docs/plugins/pay/** diff --git a/apps/docs/src/config/sidebar.mjs b/apps/docs/src/config/sidebar.mjs index 0493b6465..51071a04c 100644 --- a/apps/docs/src/config/sidebar.mjs +++ b/apps/docs/src/config/sidebar.mjs @@ -127,6 +127,7 @@ const pluginEntries = [ [ linkItem('Overview', '/docs/plugins/native-purchases/'), linkItem('Getting started', '/docs/plugins/native-purchases/getting-started'), + linkItem('Revenue Playbook', '/docs/plugins/native-purchases/revenue-playbook'), section('Android Setup', [ linkItem('Sandbox Testing', '/docs/plugins/native-purchases/android-sandbox-testing'), linkItem('Create Subscription', '/docs/plugins/native-purchases/android-create-subscription'), diff --git a/apps/docs/src/content/docs/docs/plugins/native-purchases/getting-started.mdx b/apps/docs/src/content/docs/docs/plugins/native-purchases/getting-started.mdx index 055d0c13d..72f1bb36d 100644 --- a/apps/docs/src/content/docs/docs/plugins/native-purchases/getting-started.mdx +++ b/apps/docs/src/content/docs/docs/plugins/native-purchases/getting-started.mdx @@ -236,6 +236,10 @@ purchases.forEach((purchase) => { 5. **Test thoroughly** – follow the [iOS sandbox guide](/docs/plugins/native-purchases/ios-sandbox-testing/) and [Android sandbox guide](/docs/plugins/native-purchases/android-sandbox-testing/). 6. **Offer restore & management** – add UI buttons wired to `restorePurchases()` and `manageSubscriptions()`. +## Revenue next steps + +After the purchase flow works, use the [Revenue Playbook](/docs/plugins/native-purchases/revenue-playbook/) to plan your first paid funnel: product scope, ASO, pricing, paywall placement, analytics, and churn feedback. + ## Troubleshooting **Products not loading** diff --git a/apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx b/apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx new file mode 100644 index 000000000..c26728905 --- /dev/null +++ b/apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx @@ -0,0 +1,200 @@ +--- +title: Revenue Playbook +description: Learn how to turn a Capacitor app into revenue with a focused MVP, store discovery, paywall placement, pricing, analytics, and @capgo/native-purchases. +sidebar: + order: 3 +--- + +import { Steps } from '@astrojs/starlight/components'; + +![Revenue playbook for in-app purchases](/native-purchases/revenue-playbook.png) + +The purchase SDK is only one part of making money from an app. Revenue comes from a clear problem, a small product that users can try, reliable store billing, and a paywall that teaches you what people are willing to buy. + +Use this playbook when you are adding subscriptions or premium unlocks with `@capgo/native-purchases`. + +## Start with a simple revenue target + +Make the first target concrete. For example: + +| Monthly price | Active subscribers needed for about $1K MRR | +| --- | --- | +| $4.99 | 201 | +| $7.99 | 126 | +| $9.99 | 101 | +| $29.99 yearly | About 400 annual subscribers, depending on timing | + +These numbers are before store fees, taxes, refunds, and currency differences. They are still useful because they keep the launch plan practical: you need a few hundred motivated users, not a huge audience. + +## Build the smallest paid product + + +1. **Pick one painful use case** + + Build around one outcome users already search for. Examples: a workout plan for new parents, a budget tracker for couples, a receipt scanner for freelancers, or a language drill app for one exam. + +2. **Check demand in the stores** + + Search App Store and Google Play for the core keyword. Read low and mid-score reviews of competing apps to find missing features, confusing onboarding, pricing complaints, and UI friction. + +3. **Ship a narrow MVP** + + The first version should include onboarding, one useful core action, basic error handling, and enough analytics to see whether users reach the value moment. + +4. **Add purchases early** + + Do not wait until the app feels complete. A basic paywall helps you learn whether users understand the value and whether your pricing is plausible. + + +## Instrument the funnel before optimizing + +Track these events before you start changing prices or screens: + +| Event | Why it matters | +| --- | --- | +| `install` or first open | Baseline traffic | +| `onboarding_completed` | Whether users understand the setup | +| `core_action_completed` | Whether the product delivers value | +| `paywall_viewed` | Whether users reach monetization | +| `trial_started` | Whether the offer is compelling | +| `purchase_completed` | Paid conversion | +| `restore_started` and `restore_completed` | Purchase recovery and review compliance | +| `subscription_status_checked` | Entitlement reliability | +| `cancel_feedback_submitted` | Churn reason | + +If many users do not see the paywall, fix onboarding before changing the paywall. If users see the paywall but do not start a trial, improve the offer, proof, or price presentation. + +## Choose one monetization model + +Start with one model so the data is readable. + +| Model | Good fit | First version | +| --- | --- | --- | +| Freemium | Daily utilities, trackers, tools with repeat use | Free core action, paid limits or premium features | +| Paywall plus free trial | Apps that deliver quick value after onboarding | Paywall after onboarding with 3 to 14 day trial | +| One-time unlock | Small tools with limited recurring value | Lifetime product plus optional future subscription later | + +Avoid shipping three tiers, many bundles, and complex upgrade paths on day one. Use one monthly plan and one annual plan when you need subscriptions. Add localized pricing after you see meaningful traffic from a country. + +## Configure products for revenue learning + +Keep product identifiers stable and readable: + +```text +com.example.app.premium.monthly +com.example.app.premium.yearly +com.example.app.premium.lifetime +``` + +Use store product names that reinforce the value users are searching for, such as "Meal Planner Pro Monthly" instead of only "Monthly". Store metadata and in-app purchase names can help discovery and clarity. + +Load product data from the stores so pricing, currency, and introductory offers are always accurate: + +```typescript +import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases'; + +const { products } = await NativePurchases.getProducts({ + productIdentifiers: [ + 'com.example.app.premium.monthly', + 'com.example.app.premium.yearly', + ], + productType: PURCHASE_TYPE.SUBS, +}); + +const monthly = products.find((product) => product.identifier.endsWith('.monthly')); +const yearly = products.find((product) => product.identifier.endsWith('.yearly')); +``` + +Never hardcode store pricing in the UI. Render `product.priceString`, localized product title, billing period, and trial terms from store data whenever possible. + +## Build a first paywall + +A first paywall should be clear, not clever: + +- Headline: the paid outcome, such as "Unlock unlimited workout plans". +- Benefits: 3 to 5 concrete improvements, not a long feature list. +- Plans: monthly and annual, with real annual savings if offered. +- Trial: exact trial length and what happens after it ends. +- CTA: "Start free trial" or "Upgrade now". +- Links: terms, privacy policy, restore purchases, and manage subscriptions. + +Place the first paywall after onboarding, once the user understands what the app does. Later, test additional triggers such as usage limits, premium feature taps, or completed core actions. + +## Purchase and restore flow + +```typescript +import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases'; + +export async function buyYearly(appAccountToken: string) { + const transaction = await NativePurchases.purchaseProduct({ + productIdentifier: 'com.example.app.premium.yearly', + planIdentifier: 'yearly-plan', + productType: PURCHASE_TYPE.SUBS, + appAccountToken, + }); + + await fetch('/api/purchases/validate', { + method: 'POST', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ + transactionId: transaction.transactionId, + receipt: transaction.receipt, + purchaseToken: transaction.purchaseToken, + productIdentifier: transaction.productIdentifier, + }), + }); + + return transaction; +} + +export async function restorePurchases() { + await NativePurchases.restorePurchases(); + + return NativePurchases.getPurchases({ + productType: PURCHASE_TYPE.SUBS, + }); +} +``` + +Always validate purchases on your backend before granting durable entitlements. Keep a local entitlement cache for fast UI, but treat the store and your backend as the source of truth. + +## Bring in the first users + +Revenue needs traffic. Start with channels that can work before you have a brand: + +- ASO: title, subtitle, keywords, screenshots, app description, icon, ratings, and in-app purchase names. +- Short-form video: post quick demos, problem/solution clips, and before/after examples for the target country. +- Reddit and communities: join the conversation first, then share what you built as a useful story instead of an ad. +- Beta groups: TestFlight, Google Play internal testing, Discord, and niche forums. + +Each channel should send users into the same measured funnel so you can compare retention, paywall views, trials, and purchases. + +## Read churn correctly + +Some churn means users tried the app and decided it was not for them. That is normal. What matters is the pattern: + +- Cancels during trial: unclear value, poor onboarding, or wrong traffic. +- Cancels after one cycle: not enough repeat value or weak habit loop. +- Refunds: pricing mismatch, accidental purchase risk, or unclear terms. +- No restores: broken entitlement handling or missing restore UI. + +Add a one-question cancellation survey when possible. Use the answers to improve onboarding, feature scope, store screenshots, and paywall copy. + +## Launch checklist + +- Product solves one clear paid problem. +- Store products are active and tested on iOS and Android. +- Paywall displays store-loaded prices and terms. +- Purchase, restore, manage subscription, and backend validation are implemented. +- Funnel events are tracked from first open to purchase. +- App store metadata explains the value in the first screenshots. +- At least one acquisition channel is active before launch. +- Churn feedback is collected from the first subscribers. + +## Related guides + +- [Getting started](/docs/plugins/native-purchases/getting-started/) +- [Create iOS subscriptions](/docs/plugins/native-purchases/ios-create-subscription/) +- [Create Android subscriptions](/docs/plugins/native-purchases/android-create-subscription/) +- [iOS sandbox testing](/docs/plugins/native-purchases/ios-sandbox-testing/) +- [Android sandbox testing](/docs/plugins/native-purchases/android-sandbox-testing/) diff --git a/apps/web/public/native-purchases/revenue-playbook.png b/apps/web/public/native-purchases/revenue-playbook.png new file mode 100644 index 0000000000000000000000000000000000000000..47554659c19e459d2d638da74f14e43fe7421d5d GIT binary patch literal 72652 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 literal 0 HcmV?d00001 diff --git a/apps/web/public/native-purchases/revenue-playbook.svg b/apps/web/public/native-purchases/revenue-playbook.svg new file mode 100644 index 000000000..6f48add5d --- /dev/null +++ b/apps/web/public/native-purchases/revenue-playbook.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + Start free trial + + + + + + + + + + App revenue playbook + Validate demand, ship one paywall, + and learn from purchase data. + + $1K MRR path + diff --git a/apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md b/apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md new file mode 100644 index 000000000..e260adc48 --- /dev/null +++ b/apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md @@ -0,0 +1,211 @@ +--- +slug: how-to-make-revenue-with-capacitor-iap +title: How to Make Revenue With a Capacitor App +description: A practical guide to turning a Capacitor app into revenue with in-app purchases, subscriptions, ASO, paywall placement, pricing, analytics, and @capgo/native-purchases. +author: Martin Donadieu +author_image_url: https://avatars.githubusercontent.com/u/4084527?v=4 +author_url: https://github.com/riderx +created_at: 2026-05-01T00:00:00.000Z +updated_at: 2026-05-01T00:00:00.000Z +head_image: /native-purchases/revenue-playbook.png +head_image_alt: Revenue playbook for Capacitor in-app purchases +keywords: Capacitor revenue, in-app purchases, subscriptions, mobile app monetization, paywall, ASO, app revenue, native purchases +tag: Mobile, IAP, Monetization +published: true +locale: en +next_blog: '' +--- + +Revenue does not start with a perfect app. It starts with a useful app, a small group of users, and a purchase flow that helps you learn what people will pay for. + +For Capacitor apps, the technical part is straightforward with [`@capgo/native-purchases`](/docs/plugins/native-purchases/). The harder part is deciding what to sell, where to show the paywall, how to price it, and how to get the first users into the funnel. + +This guide gives you a practical path from zero revenue to the first meaningful subscription revenue without overbuilding. + +## Start With One Paid Problem + +The easiest products to monetize are not always new categories. They are often focused versions of things users already search for: workout plans, budget tracking, language drills, photo tools, scanners, journaling, learning aids, and niche productivity workflows. + +Before building more features, check whether there is existing demand: + +- Search App Store and Google Play for the problem users would type. +- Open 5 to 10 competing apps and study their screenshots, onboarding, pricing, and reviews. +- Read 2-star and 3-star reviews to find what users almost like but still complain about. +- Look for a sharper niche: one country, one audience, one workflow, or one simpler user experience. + +Competition is not automatically bad. If users are already downloading and paying for similar apps, the market is proving there is demand. Your job is to make the experience clearer, faster, more focused, or better priced for a specific audience. + +## Build the Smallest App That Can Teach You + +Your first version should not try to be the final product. It should answer three questions: + +1. Do users understand what the app does? +2. Do users reach the core action? +3. Do users care enough to pay, start a trial, or come back? + +That means your MVP needs onboarding, one useful core flow, analytics, and a basic paywall. It does not need every setting, every integration, or a complicated account system. + +Track these events from the beginning: + +- First open +- Onboarding completed +- Core action completed +- Paywall viewed +- Trial started +- Purchase completed +- Restore completed +- Subscription status checked +- Cancellation feedback submitted + +If users do not reach the main feature, fix onboarding. If they reach the feature but never see the paywall, fix the flow. If they see the paywall but do not convert, work on the offer, price, proof, and message. + +## Use Store Discovery as a Revenue Channel + +ASO matters because it affects both discovery and conversion. A user who finds you in search still needs to understand the value in a few seconds. + +Focus on the basics first: + +- Put the strongest keyword in the title without making it unreadable. +- Use the subtitle or short description for the main benefit. +- Fill the iOS keyword field without repeating title terms. +- Make the first three screenshots explain the outcome, not every feature. +- Use a simple icon that is readable at small sizes. +- Add meaningful in-app purchase names, because plan names can support clarity and search. +- Localize one market at a time when you see traffic from a country. + +Treat the store page like the first paywall. Users need to know what the app does, who it is for, and why it is worth trying. + +## Get the First Users Before Scaling Anything + +You do not need a large paid acquisition budget to learn. You need enough traffic to see patterns. + +Short-form video can work well for visual or outcome-driven apps. Show the problem, the result, and the app in use. Test many small clips instead of waiting for one perfect launch video. If you target a specific country, keep the account setup, language, and posting context aligned with that region. + +Reddit and niche communities work differently. Do not show up with a generic ad. Read first, understand the tone, and share a useful story: what you built, what problem it solves, what surprised you, and what kind of feedback you want. + +Beta distribution is also useful. Use TestFlight, Google Play internal testing, Discord, existing users, or small communities. The goal is not vanity installs. The goal is to watch real users move through the onboarding, value moment, and paywall. + +## Pick One Monetization Model + +Early revenue tests fail when the offer is too complicated. Start simple. + +Freemium works well when users can get ongoing value for free but hit meaningful premium limits. Examples: more scans, unlimited plans, cloud sync, export, advanced insights, or premium content. + +A paywall with a free trial works well when the app delivers value quickly and the user understands the outcome after onboarding. A 3 to 14 day trial is common, but the right length depends on how fast users can experience value. + +A one-time unlock can work for small utilities where recurring value is weak. You can add a subscription later if the product evolves into a service. + +For subscriptions, start with monthly and annual. Make annual savings clear, but do not hide the monthly option. A first price such as $4.99/month, $7.99/month, or $29.99/year is often easier to test than a complex pricing table. Adjust later based on traffic quality, country, conversion, retention, and refund behavior. + +## Implement Purchases With Native Store Data + +Use `@capgo/native-purchases` to load product data, start purchases, restore purchases, and check entitlement state across iOS and Android. + +```bash +bun add @capgo/native-purchases +bunx cap sync +``` + +Load prices from the stores instead of hardcoding them: + +```typescript +import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases'; + +const { products } = await NativePurchases.getProducts({ + productIdentifiers: [ + 'com.example.app.premium.monthly', + 'com.example.app.premium.yearly', + ], + productType: PURCHASE_TYPE.SUBS, +}); + +for (const product of products) { + console.log(product.title, product.priceString); +} +``` + +Start the subscription flow: + +```typescript +const transaction = await NativePurchases.purchaseProduct({ + productIdentifier: 'com.example.app.premium.monthly', + planIdentifier: 'monthly-plan', + productType: PURCHASE_TYPE.SUBS, + appAccountToken: userPurchaseToken, +}); + +await fetch('/api/purchases/validate', { + method: 'POST', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ + transactionId: transaction.transactionId, + receipt: transaction.receipt, + purchaseToken: transaction.purchaseToken, + }), +}); +``` + +Always provide restore and manage subscription actions: + +```typescript +await NativePurchases.restorePurchases(); +await NativePurchases.manageSubscriptions(); +``` + +The local app can unlock quickly for good UX, but durable access should be verified by your backend using the receipt or purchase token. This protects revenue and avoids broken entitlements when users switch devices, cancel, refund, or renew. + +## Put the First Paywall After Onboarding + +The first paywall should appear after users understand the app, not before they know what they are buying. For many apps, that means immediately after onboarding or after the first meaningful action. + +A useful first paywall includes: + +- A headline that describes the paid outcome +- 3 to 5 concrete benefits +- Store-loaded monthly and annual prices +- Trial length and renewal terms +- Restore purchases +- Terms and privacy links +- A clear CTA such as "Start free trial" or "Upgrade now" + +Do not hide the price. Do not invent fake urgency. Do not make cancellation terms hard to find. Clear terms convert better over time because they reduce refunds, review risk, and support issues. + +## Learn From Churn Instead of Panicking + +Some users will cancel. Early churn is information, not just failure. + +Look at the pattern: + +- Trial cancels usually mean the user did not see value fast enough. +- First-month cancels often mean the app solved a one-time problem or lacked a habit loop. +- Refunds can mean the paywall was unclear or the user expected something different. +- Support requests about lost access usually mean restore or entitlement handling needs work. + +Ask one short cancellation question when you can. Use the answers to improve onboarding, screenshots, pricing, feature scope, and paywall copy. + +## Keep the Loop Small + +The first revenue loop should be boring and measurable: + +1. Improve the store page. +2. Bring in a small batch of users. +3. Watch onboarding and core action completion. +4. Show one clear paywall. +5. Measure trials, purchases, restores, refunds, and cancels. +6. Change one thing. +7. Repeat. + +That loop is how you move from guessing to revenue. Once it works, you can add more channels, more plans, better localization, and deeper lifecycle messaging. + +## Implementation Checklist + +- Build one core feature around one paid problem. +- Add analytics before optimizing the paywall. +- Create active iOS and Android products in the stores. +- Load product names and prices with `getProducts()`. +- Implement purchase, restore, manage subscription, and backend validation. +- Show the first paywall after onboarding or the first value moment. +- Use ASO, short-form video, Reddit, or beta groups for early traffic. +- Collect churn feedback from the first subscribers. + +For the technical setup, use the [Native Purchases getting started guide](/docs/plugins/native-purchases/getting-started/). For the product and revenue workflow, keep the [Native Purchases revenue playbook](/docs/plugins/native-purchases/revenue-playbook/) next to your launch checklist. From a968c298aff2f212eeccd1b4535b3cd5e37caec3 Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Fri, 1 May 2026 12:54:12 +0200 Subject: [PATCH 2/2] Address revenue guide review comments --- .../docs/docs/plugins/native-purchases/revenue-playbook.mdx | 2 +- .../content/blog/en/how-to-make-revenue-with-capacitor-iap.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx b/apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx index c26728905..6cfbc2cb6 100644 --- a/apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx +++ b/apps/docs/src/content/docs/docs/plugins/native-purchases/revenue-playbook.mdx @@ -71,7 +71,7 @@ Start with one model so the data is readable. | Model | Good fit | First version | | --- | --- | --- | | Freemium | Daily utilities, trackers, tools with repeat use | Free core action, paid limits or premium features | -| Paywall plus free trial | Apps that deliver quick value after onboarding | Paywall after onboarding with 3 to 14 day trial | +| Paywall plus free trial | Apps that deliver quick value after onboarding | Paywall after onboarding with 3- to 14-day trial | | One-time unlock | Small tools with limited recurring value | Lifetime product plus optional future subscription later | Avoid shipping three tiers, many bundles, and complex upgrade paths on day one. Use one monthly plan and one annual plan when you need subscriptions. Add localized pricing after you see meaningful traffic from a country. diff --git a/apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md b/apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md index e260adc48..dceff46f2 100644 --- a/apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md +++ b/apps/web/src/content/blog/en/how-to-make-revenue-with-capacitor-iap.md @@ -91,7 +91,7 @@ Early revenue tests fail when the offer is too complicated. Start simple. Freemium works well when users can get ongoing value for free but hit meaningful premium limits. Examples: more scans, unlimited plans, cloud sync, export, advanced insights, or premium content. -A paywall with a free trial works well when the app delivers value quickly and the user understands the outcome after onboarding. A 3 to 14 day trial is common, but the right length depends on how fast users can experience value. +A paywall with a free trial works well when the app delivers value quickly and the user understands the outcome after onboarding. A 3- to 14-day trial is common, but the right length depends on how fast users can experience value. A one-time unlock can work for small utilities where recurring value is weak. You can add a subscription later if the product evolves into a service.