Shopify Custom App Development Case Study: RVL Skincare
The contract lives in Stripe outside the store, the doctor assembles a care routine, and the practice can charge the saved card for it on its own initiative.
This case study covers a custom platform built alongside a Shopify store for a concierge dermatology practice. The store holds a medical-grade skincare line. Everything else the practice runs on sits in a separate application: long-term care contracts, membership plans, signed consents, appointment scheduling, doctor-assembled routines and charges against saved cards. Roughly seven months from working MVP to the full platform.
patients under contract, with auto-renewal, a club membership tier and doctor-curated routines sold as bundles
RVL Skincare turns a dermatology practice into a continuing relationship rather than a series of appointments.
The patient signs a long-term care contract, attaches a card and gains the ability to book appointments. That booking right is the main value of the account; product purchases follow from it. The doctor assembles a care routine for the patient, which can be bought whole in one action or broken into individual items. Separately, the practice can charge the card already on file at its own initiative, without waiting for the patient to act.
Before this project that logic was assembled from Shopify apps that conflicted with each other and still did not cover what was needed. Above them sat two limits no app works around. Shopify’s Acceptable Use Policy lists uploading Protected Health Information subject to HIPAA among unsupported activity, and contracts, consents and medical instructions are exactly that. And saving cards for later charges is available on Shopify only to B2B customers on Shopify Payments, with manually entered card details impossible to vault at all. This practice runs on standard Shopify and serves retail patients rather than companies, so that path does not exist for it.
RVL Skincare, SKIN NY Dermatology PLLC
Dermatology, concierge patient care and medical-grade skincare
New York, USA and Ontario, Canada
Shopify
Dr. Rita V. Linkner runs a concierge dermatology practice with an in-house product line. Patients pay for continuing access rather than for single visits, which makes the contract, not the cart, the object the business turns around.
They hold an active contract, book appointments against it, and see documents, charges and assigned routines.
A lighter, cheaper tier for those who want access without the full scope of care.
The doctor and her administrators manage contracts, scheduling, routines and payments arriving by card, in person, or initiated by the practice.
The seller is the doctor, not the buyer
The practice needed to charge a stored card on its own initiative while the patient is off-session. Retail commerce assumes the opposite direction.
Saved cards outside the store's reach
Shopify vaults cards only for B2B customers on Shopify Payments, and details entered manually in the admin cannot be vaulted. This practice runs standard Shopify and serves retail patients.
A contract a subscription model cannot express
Shopify subscription contracts are created only through a completed checkout. Here the order runs the other way: policies, consents, card on file, and a payment the admin may take manually, including in person.
Contracts that must outlive any app
48 hours after a subscription app is uninstalled, every contract it owns is cancelled. An agreement between a doctor and a patient cannot sit on that footing.
Data that cannot enter the store
Patient records, consents and medical instructions fall under a category the platform’s own policy excludes.
Two countries in one payment layer
The practice operates in the United States and Canada. A Stripe account is bound to a country, and one account does not serve both.
Consent and mandate before anything else
The patient reads the policies, signs the consents and attaches a card before the contract is signed. An off-session charge requires an agreement covering the practice’s right to initiate payments, their expected frequency and how the amount is determined. The consent flow is what makes every later charge legitimate.
A portal gated by contract, with booking at its centre
Upcoming and past appointments, booking with a chosen practitioner, assigned routines, documents and cards in one place. Until the contract is signed and paid, the patient cannot select a contract or book. Patients hold two linked accounts: one in the store, one on the platform.
Routines bought in one action
An administrator assembles a product set for the patient in advance. The patient buys the whole routine or individual items from it, and the products land in the store’s regular cart.
Contracts with tiers and auto-renewal
Several levels where the amount is not tied to a fixed plan, adjustable by the administrator at any moment. Automatic charging on contract completion was added, so renewal no longer takes manual work.
A club tier as a lighter entry point
A cheaper form of membership for patients who want access without the full scope of care.
Three ways money arrives
The patient pays directly, the administrator processes an in-person payment from the panel and closes the contract as paid, or the practice charges the saved card off-session. Every path produces an invoice available in the portal.
Scheduling across practitioners and locations
The admin sets where and when appointments are available, along with the price range. Panel data exports to PDF.
An integration layer the team maintains itself
The Shopify connection is built on a package whose upstream is no longer developed, so support and extension are handled in-house.
Three money paths that never cross
Membership money does not pass through the store at all. The contract lives in Stripe, and Shopify never touches it. Products sell the ordinary way, through the cart and the store checkout. Above both sits a third path: the practice charges the saved card itself when the doctor decides the patient needs the next routine.
Everything that makes the third path possible was built up front: the signed consent is the mandate authorizing off-session charges, the card is stored as a payment method rather than a one-time transaction, and the charge originates from the practice’s own panel.
Geography adds its own line. The practice operates in New York and in Ontario, and a Stripe account is bound to its country of registration. Stripe names separate accounts per country as the standard pattern for businesses operating across regions, and provides an organization layer for consolidated reporting across them. Splitting the payment paths here is a requirement of the payment system, not a workaround.
The practice sells at the moment of the decision
The doctor assembles a routine, and it is either bought in one action or paid for by a practice-initiated charge.
Contract renewal stopped being manual work
Charging happens automatically on contract completion.
A second entry tier appeared
Club membership opens access to patients for whom a full contract is more than they need.
One system instead of a stack of apps
The patient, their contract, appointments, routines and charges are visible in one place.
Payments separated by country
Distinct pipelines for the US and Canada, with reporting per account.
Scale
More than 600 patients under contract, per platform data.