Skip to main content

Storefront templates

Tagada ships ready-made Rx storefront templates (Plugin SDK apps). They look and sell very differently, but they are facades over the same funnel skeleton and the same Rx building blocks: change the facade, keep the orchestration, the tracking, and the clinical flow. Templates differ only in the order and weight of the first three boxes (Landing / Quiz / Catalog) and in art direction. Checkout → Thank-you/intake → Portal are identical everywhere — that’s the LegitScript-validated, FTC-sensitive core, and it never moves.

The catalog

oakwell, kura, and sanara are anonymized reskins of the multi-vertical template — same structure, different branding — used for demos and as forks for new affiliate brands. oakwell.tgdcare.com is parked (“Coming soon”) until remounted; use tgdcare.com as the live catalog demo. Cobalt and Arbor were built from a competitive audit of the DTC telehealth market (structures and vocabulary, never brands or assets).

Three orchestration patterns, same boxes


How a template maps onto the bricks

This is the load-bearing table: each funnel step of every template calls the same brick the same way. A headless rebuild of any template is exactly these calls, self-orchestrated. Publishing a template installs this same Funnel v2 on the merchant instance. Every telehealth template (catalog + reskins) must serve these paths — that is the compatibility contract with ensureRxStorefrontFunnel: The plugin matcher is .* (catch-all), so the six boxes are the same site, not six mounts. The remappable pages carry feature contracts (checkout session from checkoutToken, order from context) so the funnel engine can rewire them per variant without touching template code.
Decoupling in practice: the medical intake never moves. Whatever the sales path — quiz-first, catalog-first, plan-first, or a headless funnel on your own infrastructure — the product → medical questionnaire pair is resolved after payment on the thank-you step. That’s why the top of the funnel is completely free to vary.

Compliance rules baked into every template

  1. The marketing quiz contains no medical questions — no PHI before the card hold. The medical intake is network-authored and post-hold.
  2. Prescription disclaimer wherever money changes hands: authorizing or subscribing does not guarantee a prescription; the hold is voided if the clinician doesn’t prescribe.
  3. Honest pricing: displayed monthly price = billed price; billing cadence explicit at checkout.
  4. Safety information reachable from every product surface.
  5. Self-service cancellation in the patient portal.
  6. No platform branding patient-side — the affiliate brand (or the marketplace brand) is the only name a patient ever sees.

Launching from the CRM

Merchants don’t deploy templates by hand: the CRM storefront wizard (Tagada Rx → Storefront) lists this catalog. The merchant picks a template, uploads a logo, sets brand name/colors and a subdomain, and publishing auto-deploys the chosen template and installs a Funnel v2 on brand.tgdcare.com — catalog remap, payment flow, domain mount, and the six-step canvas (landing → marketing quiz → checkout → offer → thank-you → portal) so each page is visible in the CRM funnel builder. Republishing with a different template swaps the facade in place: same subdomain, same funnel, same cases. The plugin stays mounted as a catch-all; the Funnel v2 graph is the operator view, not a second site. The wizard also offers a build-your-own path for merchants who prefer the Headless SDK — with the constraint that the build is still hosted on the Tagada subdomain (LegitScript).

Forking a template

Templates live in the monorepo under templates/v2/telehealth-*. To create a new brand: fork the closest archetype, patch config/default.config.json (branding, verticals, products, paymentFlowId), adjust the theme CSS variables, and deploy with the standard plugin pipeline (deploy → instantiate → mount on the brand’s domain). In affiliate mode, each brand is one plugin instance on its own subdomain — same code, different config. See With the Plugin SDK for the integration contract inside a template.