Case study
Mandala Medicine & Wellness: a clinic site that knows what hurts
An integrative clinic on East Burnside, sixteen practitioners and eight services, moved off Wix onto its own engine in nine days. A guide that turns "migraines" into the right service and the right people, a chat that answers only from the clinic's own pages, and a dashboard where the clinic edits everything itself. Booking stays in Jane.

Mandala Medicine & Wellness is an integrative clinic on East Burnside in Portland: acupuncture, massage, physical therapy, car accident care, naturopathic medicine, mental health counseling, microneedling and cupping, sixteen practitioners under one roof, 5.0 on Google from 160 reviews, and Willamette Week's Best Acupuncture and Bodywork for 2024. The old site lived on Wix at a longer domain, with about eighteen practitioner bios and five blog posts. Booking already ran through Jane and still does: the site never takes an appointment itself, it hands you to Jane at the right moment.
Kickoff was September 28. mandalamed.com went live on the evening of October 6, on the ninth day, and the old domain cut over on October 9 with a single Cloudflare rule that sends all 76 old paths to the same path on the new one. In between: a custom theme, 48 share cards, a schema graph, an llms.txt, and the two features the clinic had asked for without quite having words for them yet.
How does the Find Care guide work?
You type what hurts, in your own words. A "Find help" pill sits in the header (an icon alone under 600 pixels), and the hero carries an "I need help with ..." bar that cycles through back pain, migraines, a PIP question and a dozen more. Either one opens a panel headed "Find care at Mandala". Type "migraines" or "whiplash" or "collision" and the guide matches it against 27 conditions, each carrying its own search words and synonyms, then routes you to the service page that fits and the practitioners who treat it. Acupuncturists and massage therapists come back as alphabetical group cards, never ranked by keyword, because a clinic's website should not look like it is steering you toward one colleague over another.
Crisis words short-circuit the whole thing. "Chest pain after crash" does not return a practitioner; it returns "Call 911 first", with 988 beside it. The 27 conditions are a content type in the clinic's own dashboard, and the "What do you treat?" section on the home page draws from the same rows, so editing one place updates both.
What does the Mandala Guide answer from?
The clinic's own pages, and nothing else. The chat launcher opens a panel with three starter chips ("How do I book a first visit?", "Do you take my insurance?", "Which practitioners do acupuncture?"). The front end posts to the site's own /api/chat endpoint and gets one JSON reply back, no stream. Behind it sit 82 public knowledge chunks rebuilt from pages, practitioners, services, posts and FAQ by a sync script; a page that is not live drops out of the chat the next time it runs. An answer can carry practitioner tiles, headshot, credential and service on each, with "Book online" as the filled card that hands you to Jane.
Two filters run on every reply before it reaches the screen: em dashes are stripped, and pregnancy-safety wording is checked, because a wellness clinic cannot have a chat window improvising about cupping during pregnancy. The panel says so itself: "It cannot give medical advice." Staff get a second version, 73 chunks about the dashboard, that explains how it works and links the screen each answer is about.
What does the clinic edit itself?
Everything the public sees. Text, photos and lists edit in place on the live page, with drag to reorder. The rest lives in the dashboard:
- A Draft, Schedule, Publish bar on eleven content types, so a page can be written on Tuesday and go live on Saturday morning.
- Home-page practitioner order: random on each visit, a custom drag order, or A to Z.
- Branded patient emails and an autoreply editor with a live preview and a test send.
- An asset library with folders, drag upload, move and multi-select.
- Newsletter signup with a popup, a weekly list email, and double opt-in.
- An Instagram strip with its own admin controls, a GA4 analytics tab, and a consent bar.
- A careers page carrying JobPosting markup, three open positions on launch day.
The conditions behind the Find Care guide are one more content type in the same list. Add a condition, give it its search words, and the guide knows it on the next visit.
Stack
UlricCMS on PHP 8.3, hosted on Hostinger behind Cloudflare. The theme is a custom build on top of the lotus base theme, and the two share one set of settings, so a colour or a phone number changes in one place. Type: DM Sans for display, Alegreya Sans for body, Alegreya for ledes, Tenor Sans for small caps, Inter in the header. Colours: periwinkle, cream, gold and olive, with one house rule: white text on periwinkle, always. A weekly SEO loop runs. Booking is Jane, linked from every page.
Numbers
Nine days from kickoff to live, eleven to the launch-day cutover. Sixteen practitioners with profiles, eight services with their own pages, 27 conditions in the guide, 82 knowledge chunks behind the chat, 48 share cards, 76 redirects, thirteen blog posts, 137 reviews imported with eight in the carousel. None of these is an outcome. They are the inventory on launch day, and the clinic owns every item on it.
Mandala runs the same engine I build for clinics and therapists who would rather own their site than rent one.
Common questions
Does the site take bookings?
No, and that is deliberate. Mandala books through Jane, and every "Book" pill, the chat's "Book online" card and the Find Care guide's results hand you to Jane at the right moment. Appointments and patient records stay in the system built to hold them; the website never collects either.
Can the clinic change the site without a developer?
Yes. Text, photos and lists edit in place on the live page, and the dashboard holds the rest: practitioners, services, blog posts, the 27 conditions behind the Find Care guide, patient emails, the newsletter, and a Draft, Schedule, Publish bar on eleven content types. A second version of the Guide, written for staff, explains the dashboard and links the screen each answer is about.
Is the chat safe? What does it answer from?
It answers from 82 knowledge chunks rebuilt from the clinic's own live pages, practitioners, services, posts and FAQ, and from nothing else. A page that goes offline drops out of the chat on the next sync. Every reply is filtered for pregnancy-safety wording before it reaches the screen, the panel states that it cannot give medical advice, and a question carrying crisis words gets 911 and 988 back before anything else. Requests are throttled per IP.
What happened to the old site's links?
They all still work. The old domain cut over on October 9 with one Cloudflare rule that sends each of the 76 old paths to the same path on mandalamed.com, so a bookmark, a Google result or a referral from another clinic lands on the right page.

