3 min read
The week I spent undoing my own decision
Healing Oasis started on Webflow. Then it became clear the admin portal was the product and the marketing site was the smaller half.
- Decisions
- GCP
- Webflow
The Healing Oasis Wellness Center is a state-approved postgraduate school. It teaches veterinary spinal manipulation, rehabilitation and acupuncture to practising veterinarians and technicians who are taking certification alongside a working caseload.
I started the build on Webflow. For the job as I understood it then — a marketing site, course pages, and a storefront selling registrations — that was the right call, and I would make it again with the same information.
What the job turned out to be
A registration touched three systems and none of them agreed. Course sales ran through Shopify. Student records lived in the CRM. The join between them was a spreadsheet somebody maintained by hand.
The failure mode was not a bad interface. It was that nobody could answer “is this person enrolled” without opening two tabs and trusting a third file.
So the thing that needed building was not a website. It was the system the staff live in: one record per registration, joined from Shopify order data and the CRM, so enrolment is a state rather than an inference.
The reversal
I moved it off Webflow and onto custom hosting on GCP.
That cost a week. A week with nothing new to show, spent arriving back at pages that already existed. It is a bad week to be in and a worse one to explain.
A week is the cheapest this decision was ever going to be.
The alternative was not saving a week. The alternative was a ceiling. Everything the portal later needed — an auth model I control, background jobs, a database shaped like the problem — sits on the far side of that move. Not reversing it would have capped what the portal could ever do.
What it bought
- Webhooks that keep Shopify and the CRM in sync as orders land, instead of a nightly export somebody has to remember to run.
- Custom embedded Shopify apps on App Bridge and Polaris, so the tooling lives inside the admin the staff already know rather than behind a second login.
- Course structure modelled in metafields and metaobjects, which is what lets the front end stay declarative as the programme changes.
- Somewhere to put an agent that reads live business data — which is its own story, and its own mistake.
Across the engagement, online registration conversion went up 41% year over year and online revenue doubled. I am not going to tell you the hosting move is why; three years of work is why. But none of that work happens on the stack I started with.
The interview version
“Tell me about a technical decision and what you rejected” is the most common senior interview question there is, and for a long time I did not have a crisp answer to it. This is the answer.
What I rejected was the version where I keep going. It was available. The site worked, nothing was on fire, and bolting an admin tool onto the side of it later would have been the easier choice every single week except the last one.
The real decision was never Webflow against GCP. It was: is the site the product, or is the portal? Answering that took about a minute. Getting to the point where I asked it took considerably longer, and that is the part I would do differently.