September release: variant-level plans, customer-account handoff, and a more honest portal
Four production deploys since mid-August, rolled into one note: new ways to sell and manage subscriptions, and a long list of things that now tell the truth.
Shoppers can now reach their subscriptions straight from their Shopify customer account. A Manage subscription action on the order list and on the order status page takes them into their portal already signed in. You place it once, in Shopify admin: Settings → Checkout → Customize → Apps, add the WallaB.AI – Manage subscription block to the Orders and Order status pages, then Save. Until that block is placed, the action does not appear.
Subscribe and save can now be offered on individual variants, not only on a whole product. Assign a selling plan from Shopify's own Purchase options card, on a product page or on a variant page. Product and variant edits you make in Shopify — new ones, changes and deletions — reach WallaB immediately, with no sync to run. And if you reinstall the app, the selling-plan groups WallaB had already created on Shopify are adopted rather than duplicated.
A round of portal and dashboard polish. A subscription billed in a currency other than your store's now hides Swap, Add an item and Reorder, and says why, rather than offering actions that cannot go through. Discount badges show the percentage you promised instead of a figure worked backwards from rounded cents, and a monthly cadence reads Every month, never Every 1 month, everywhere it appears — dashboard, portal, text messages, importer and onboarding. The portal gains country and province pickers on the address form, a confirmation step before a reorder, and paging in order history. In the dashboard, a subscriber's detail page shows their retention discount and names unlinked live contracts honestly, and an idle session now recovers when you simply move to another page, not only when a panel loads data.
When Shopify turns a change down, the portal now passes the reason on to the shopper in plain words instead of a generic could-not-be-processed message — if Shopify is still applying their last change, they are told exactly that, and to try again in a few minutes. Every refusal is logged. Skipping a delivery now rolls a pending one-time add-on forward to the next delivery instead of marking it failed, and every new subscription is scored for churn the moment it is created, on every path that creates one. Contracts that were already cancelled before you installed WallaB no longer show up in Subscribers, the portal, Win Back or Cancel Insights, and customer names that came through blank are filled in from Shopify. Public forms keep what a visitor has typed while the page finishes loading, and their button stays live.
We also went back through the money paths and tightened their guarantees. A declined live card is now recorded in the dunning ladder in the same step as the attempt itself, so a retry schedule can never go missing, and the live charge path charges exactly the amount the app promised or refuses to charge at all. A migration import whose final step is lost can never create a second subscription or a second Shopify contract. A prepaid batch is priced as the sum of its cycles, a win-back credit can only be spent once, a payment dispute really holds its fee and counts it in the period it belongs to, and reverting a concierge discount can only undo its own write.
On privacy: no shopper email address, phone number or postal address is written to our durable logs any more. A send is recorded by template and category with a masked tail, and nothing else. On accessibility: the dashboard and the portal now share one status-badge system, with contrast measured against AA on every tint, and every control has a consistent, visible focus ring. Dashboard tables keep their density on a phone thanks to a mobile row treatment, and the dismiss button on portal notifications now appears in the shopper's own language.