In Daniel Pertu’s Nakodo implementation, customers change or cancel plans from Settings → Plan. They never visit Stripe’s hosted customer portal. Four application operations—upgrade, scheduleDowngrade, cancelSubscription, and keepPlan—keep plan timing, product consequences, and non-Stripe accounts inside Nakodo’s own interface.
What Stripe’s customer portal actually is
Stripe’s Billing customer portal is a Stripe-hosted page for subscription and billing management. Your application does not render it as an ordinary in-app screen. Instead, it creates a session for an existing Stripe customer and sends the customer to the URL returned in that session object. If the application does not specify a portal configuration, Stripe uses the default configuration. Stripe describes these sessions as short-lived and recommends creating one on demand when a customer intends to manage billing.
As an Amazon Associate I earn from qualifying purchases.
That model is useful when Stripe’s available settings match your product. Pertu’s argument is narrower: Nakodo’s plan rules require explanations and account actions that a generic billing page cannot provide. As he puts it, “The portal does not know your product.”
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Why Nakodo keeps plan changes in the app
Downgrades change product behavior
A Business-to-Free downgrade in Nakodo can pause campaigns above the Free limit, reduce keyword counts, and remove CSV export. Creators that were already unlocked remain unlocked. Those are Nakodo-specific consequences, so Pertu places them beside the confirmation control rather than hiding them behind a Stripe-hosted workflow.
#1 Best Overall
- With Square Terminal, you can ring up sales, accept payments, and print receipts, all with one device. Use it at the counter or ring up customers anywhere in your store.
- Accept all major credit and debit cards and pay one low rate with no hidden fees and no long-term contracts.
- Process chip cards in just two seconds.
- Get your money as soon as the next business day.
- Use it cordlessly with the built-in battery, designed to last all day.
The downgrade timing is a product policy
Pertu says an immediate downgrade can produce a prorated credit. Nakodo instead keeps the paid plan through the current month, starts the lower plan at period end, and does not refund the unused remainder. Stripe does not impose that policy; Nakodo chooses it and explains it in its own UI.
Not every account is Stripe-billed
Nakodo can manually grant a plan without creating a Stripe customer, subscription, or invoice. The implementation therefore separates billedByStripe from billingAccount. A cancelled subscriber may still need to view invoices even though there is no active subscription available to change.
Rank #2
- With Square Handheld, you can accept payments, take tableside orders, or scan barcodes anywhere. With a slim design and comfortable grip, the POS is easy to carry in your palm or pocket. Square Handheld is designed to withstand water splashes and dust. Add an optional protective case for accidental drops. A long-lasting battery and offline payments let you keep selling.
- Slim, pocketable, and lightweight so you can accept payments wherever your customers are.
- Take tableside orders, bust lines, or use the built-in barcode scanner, all with one sleek device.
- A battery that can power through your shift and offline payments let you keep selling, even if your internet is down.
- Accept all major credit and debit cards and pay one simple rate with no hidden fees and no long-term contracts required.
The four verbs and their state rules
| Operation | When it takes effect | What the implementation does |
|---|---|---|
upgrade |
Immediately, after successful payment | Previews the invoice with a chosen proration date, carries that date into the subscription update when still valid, filters preview lines to prorations, clamps a negative net amount to zero, and uses payment_behavior: "error_if_incomplete". |
scheduleDowngrade |
At the end of the current paid period | Creates or updates a subscription schedule, leaves the current price in the existing phase, and appends the selected lower plan. Discounts are carried into rewritten phases. |
cancelSubscription |
At period end | Sets cancellation for the end of the current period and coordinates that cancellation with any existing downgrade schedule. |
keepPlan |
Immediately reverses a pending change | Releases the schedule and clears period-end cancellation state, restoring the current plan’s continuation. |
upgrade: preview first, then fail loudly
The upgrade flow previews the invoice using a set proration date. If that timestamp remains valid, the same date is passed to the subscription update so the preview and charge are aligned. Nakodo keeps only proration lines for its calculation and prevents a negative net result from becoming a credit by clamping it to zero.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →The update uses payment_behavior: "error_if_incomplete". A declined or otherwise incomplete payment therefore does not silently move the account to the new plan. The UI can report that the upgrade did not complete instead of showing a plan the customer has not successfully paid for.
Rank #3
- NO ENCRYPTION FOR DEBIT. NEED PIN PAD TO ATTACH WITH THE DEVICE TO WORK FOR DEBI
- Verifone VX520 terminal with EMV reader, contactless reader, and dual com modem.
- PCI COMPLIANT
scheduleDowngrade: preserve the paid period
Rather than changing the price immediately, Nakodo creates or updates a subscription schedule. The current price remains through the active billing period, followed by the lower price in a later phase. When the code rewrites phases, it carries discounts forward. After the new phase begins, the schedule is released so the subscription is no longer unnecessarily managed by that schedule.
cancelSubscription: end access on the period boundary
Cancellation is scheduled for the end of the current period instead of terminating access immediately. If a downgrade schedule already exists, cancellation has to coordinate with it; otherwise the two pending changes could describe incompatible futures for the same subscription.
Rank #4
- ALL-IN-ONE DESIGN: Combines a Stripe M2 card reader holder and a single QR code for Venmo, Cash App, PayPal, and Zelle in one professional point-of-sale display
- PREMIUM CONSTRUCTION: Made from 3/8-inch thick high-impact plastic with precision-embossed text and logos, measuring 10" × 6" × 4"
- SMART FEATURES: Built-in business card dispenser and USB cord pathway for reader power, plus secure dashboard for payment tracking
- QUICK SETUP: One-minute activation process - simply scan QR code, add payment methods, business information, and customize settings
- CUSTOMIZED & HANDCRAFTED: Personalize your sign with your business name on top and custom text on the bottom - each piece is handcrafted for a professional, branded look
keepPlan: make a pending decision reversible
Customers can undo a scheduled downgrade or cancellation. Nakodo releases the schedule and clears the subscription’s period-end cancellation state, so the account continues on its current plan.
Free tools Windows power users keep installed
One-click scans. No signup required.
One shared state check protects all four actions
Pertu says each verb first loads a common current-subscription state. The operation validates that the subscription has not ended, performs the Stripe action, and then synchronizes Nakodo’s database row. A webhook later reconciles the record with Stripe, but the immediate sync is intentional: “A customer who just clicked Upgrade is looking at the page right now, so every verb syncs the row as soon as Stripe accepts the change.”
Best Value
- Stylishly Compact
- Easy to Use
- Big Performance
Nakodo’s stated access rule is that a past-due subscription continues granting its plan during Stripe’s retry period. That is an application policy, not a universal Stripe entitlement rule, and the UI must represent it consistently with the billing state.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Hosted portal or custom controls?
The choice is not “Stripe versus no Stripe.” Nakodo still uses Stripe for billing actions; it chooses where customers encounter those actions and how product state is explained.
| Question | Hosted Stripe portal | Custom in-app controls |
|---|---|---|
| Can customers understand product-specific consequences? | Only what the configured portal supports; it does not know Nakodo’s campaign, keyword, export, or creator rules. | The confirmation screen can show exactly which limits, data, and features change. |
| Who defines timing and proration? | Portal configuration and Stripe’s billing behavior provide the workflow. | The product can apply immediate upgrades, period-end downgrades, and its own explanation of credits or refunds. |
| What happens to non-Stripe accounts? | It is designed around an existing Stripe customer and its billing records. | The app can handle grants, trials, cancelled accounts, and invoice access separately from subscription changes. |
| How is current state shown after an action? | The customer leaves the app for a short-lived hosted session. | The app can update its row immediately, then reconcile through webhooks. |
| What is the engineering trade-off? | Less custom billing UI and fewer state transitions to own. | More code and testing around schedules, payment failures, synchronization, and edge cases. |
What this design does—and does not—prove
Pertu’s article is a first-person account of Nakodo’s design, not an independent audit or benchmark. No reviewed source establishes that every SaaS should replace Stripe’s portal, and no topic-specific named statistic is available to quantify the approach. Stripe’s documentation confirms the hosted-session model; it does not validate Nakodo’s downgrade policy or implementation.
Recommended Free Tools
API behavior is time-sensitive. Stripe’s reference page used for this comparison does not identify a pinned API version or geography, so an implementation should confirm the exact behavior against the API version it deploys.
A practical decision test for your SaaS
- List the consequences of each plan change. If limits, stored data, campaigns, exports, seats, or access change, decide whether customers need those details before confirming.
- Choose timing explicitly. Decide whether upgrades apply now and whether downgrades and cancellations wait for period end. Document who owns any proration, credit, or refund explanation.
- Map account states. Include trials, manually granted plans, cancelled subscribers, past-due accounts, and customers who still need invoice history.
- Define failure behavior. Decide what the UI says when payment is incomplete, a subscription has ended, or a pending schedule conflicts with cancellation.
- Synchronize twice when needed. Update the application’s visible row after Stripe accepts an action, then use webhooks to reconcile later events and retries.
- Keep reversals first-class. If customers can schedule a downgrade or cancellation, provide an explicit way to undo it before the effective date.
If these rules are ordinary for your product, Stripe’s hosted portal may be the simpler choice. If they are central to what customers are buying—and especially if some accounts are not Stripe-billed—Nakodo’s four-verb pattern shows why an in-app workflow can be the clearer boundary.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

