Skip to content
Case studyOngoing

Miiskin: moving a HIPAA-bound telederm business from app to web

Miiskin runs asynchronous dermatology: a patient photographs a skin problem, answers a questionnaire, pays, and a licensed doctor comes back with a treatment plan and, where it is warranted, a prescription. When we joined, the business lived in its iOS and Android apps, so first-time visitors decided to get a consultation, hit "download the app", and never came back. Rebuilding that funnel on the web meant rebuilding it inside a HIPAA-bound clinical product, where consent, payment and prescribing each carry rules an ordinary checkout does not.

The patient directory

The directory lists every patient with conditions, last and next session and status, above counters for capacity, active treatment and who needs attention.

The patient resources marketplace

Worksheets, guides and exercises sit in a filterable marketplace, ready to assign to patients.

The tasks inbox

Incomplete clinical tasks sit in one inbox, filtered by status, category and date, and archive after 30 days.

At a glance
Industry
Healthtech and telemedicine (asynchronous dermatology), US with a smaller Spanish-language market in Mexico
Engagement
One embedded frontend engineer owning the entire web platform, ongoing
Stack
React and TypeScript single-page app, MUI, Redux and TanStack Query, Stripe payments, an e-prescribing integration, internationalisation, and deep end-to-end test coverage, against the client's Java back end
The story

What we inherited was app-first. The web client had been started years earlier by someone whose background was not really frontend: an old React wiring pattern, no tests at all, and half the platform's configuration sitting in files inside the client rather than coming from the back end. The business problem underneath was sharper than the codebase problem, because for a service whose entire funnel is a first-time visitor with a skin complaint, losing that visitor at an app-install prompt is expensive.

So the web surface became ours, and the product moved onto it flow by flow: the consultation questionnaire, configured per doctor because each one specifies what their patients should be asked; photo capture and consent; pharmacy selection across integrated networks or a local pharmacy the patient simply types in; and the doctor's case dashboard, carrying every answer, the treatment plan, private notes, diagnosis coding, prescribing, PDF export and a chat only the doctor can open. The specialised paths came on top: a dedicated hair-loss entry point, ongoing care for cases that need to stay open rather than close on a timer, promo codes and programs, and a compare view that holds an older set of photos against a newer one so a doctor can see whether the treatment worked.

Two pieces are worth telling in full, because both are places where a product decision is really an ethical one. Payments hold rather than charge: the card is taken up front, but the money sits until the doctor has actually reviewed the case, and if he cannot help, the patient is refunded automatically without having to ask. Minors came later and are harder, since a parent consents and the flow then asks the parent, in as many words, to hand the device to the child, who confirms in turn; nothing can technically enforce that, and it is built that way anyway because that is what the standard asks for. Mexico was the same instinct applied to a market, not a translation layer bolted on but a separate Spanish flow carrying the cash-at-the-counter payment method Mexican customers actually use.

Alongside the features we changed how the work was done, which took longer than the features did: end-to-end testing went into a codebase that had none, and we pushed the stack steadily forward against a company that had not yet grown out of shipping first and fixing later.

Outcome

The app-to-web shift landed. Most traffic now comes through the web, most new features go to web only and are no longer added to the apps at all, and the install drop-off that was costing the client first-time patients is gone. The product is live, used and paying.

The client came back with the next problem twice over, which is the part we would point a prospect at. The configuration still living in client files is moving into a real admin panel, so their own staff can add clinics, doctors, state licences, conditions, questionnaires and promo codes without an engineer in the loop. And the current work includes a first step into AI, a one-click consultation that reads a case and suggests conclusions to the doctor, who still decides: assistive by design and never autonomous, which in a domain where a wrong answer is a misdiagnosis is the only defensible way to build it.

Something here look like your problem? Tell us about it.