D2C / Food & Beverage
A subscription and one-off coffee store on one Medusa backend
A coffee roaster's subscriptions moved off a third-party app onto a custom Medusa module: recurring plans, prepaid gifts, and one-off orders on one backend, managed by customers themselves.
Results
- fewer subscription support tickets
- 70%fewer subscription support tickets
- backend for subs and one-off orders
- 1backend for subs and one-off orders
- higher subscriber retention at 6 months
- 24%higher subscriber retention at 6 months
- per-subscription app fee (was 1% + 20¢)
- 0%per-subscription app fee (was 1% + 20¢)
Roasthouse Coffee roasts and ships specialty coffee direct to consumers. About half its revenue is recurring, from customers on a weekly, fortnightly, or monthly plan, and the rest is one-off bags and gifts. The recurring side ran on a third-party subscriptions app that charged a fee on every renewal, kept its data in its own system, and gave customers a clumsy portal that generated a steady stream of "please skip my next box" emails.
The problem
- Two sources of truth. Subscriptions lived in the app; everything else lived in the store. Reporting meant exporting from both and reconciling by hand.
- A fee on every renewal. A percentage plus a flat charge on each recurring order, growing directly with the part of the business they most wanted to grow.
- Customers could not self-serve. Swapping a blend, changing frequency, or skipping a delivery often meant emailing support, who made the change in the app's admin.
- No room to build. Prepaid 3- and 6-month gift plans, a "try before you subscribe" flow, and roast-date-aware scheduling were all things the app could not express.
What we built
A subscription system as a first-class part of the store, on Medusa.
- A subscriptions module: plans, frequencies, pause and skip, blend swaps, and proration, modelled in Medusa so a subscription order is just an order with a schedule attached. One data model, one admin, one set of reports.
- A billing workflow: a scheduled Medusa workflow creates each renewal order, charges the saved Stripe payment method, and handles failures with a retry-and-dunning sequence instead of silently churning the customer.
- A self-serve portal: built into the Next.js storefront, for changing frequency, skipping or rescheduling the next delivery, swapping the blend, updating the card, or cancelling, all without contacting anyone.
- Prepaid gift plans: 3- and 6-month plans paid up front, with a gift recipient who manages delivery timing but never sees a price.
- Roast-date scheduling: renewals are timed to the roasting calendar so coffee ships within days of roasting, not from a shelf.
How it went
We started with the billing workflow and ran it in parallel with the existing app for a full cycle (same customers, same charges), comparing every renewal before cutting over. Migration moved active subscriptions, saved payment methods (via Stripe), and next-delivery dates across in one scheduled job, tested against a copy of production first.
The storefront portal shipped next, and the support inbox told the story within a month: the "skip my box" emails mostly stopped because customers could just do it.
The result
Subscription support tickets dropped about 70%. Everything now runs on one Medusa backend, so a subscriber's history, one-off orders, and gift plans are all in one place and reporting is a single query. The per-renewal app fee is gone. Six-month retention on new subscribers is up 24%, which the team attributes to the smoother portal and roast-date-timed deliveries rather than any one feature.
“The old subscription app was a black box bolted onto our store. Now it is part of the store: customers change their own plans, and we can actually see what is going on.”
What we did
Tell us what you're building.