← Small Business Suite

The Wellness Co.

A full-stack, multi-tenant booking platform for solo wellness practitioners — Stripe checkout, self-serve cancellation with tiered refunds, a fully customizable brand experience, and a no-code admin dashboard. One live client, onboarded without a single line of code.

Node.js · Express · Supabase · Stripe · Resend · Vercel · Live client

The Problem

Solo wellness practitioners — acupuncturists, energy healers, Reiki providers — are paying $100–200/month for platforms like Mindbody or Vagaro that were built for large gyms and feel like it. The booking UX is generic, the branding belongs to the platform, and the features they're paying for go mostly unused. The goal was a fully custom-branded booking experience on a platform built specifically for solo practitioners — at a fraction of what Mindbody charges, with no commission per booking and no generic branding.

Try It

the-wellness-co.vercel.app

Previewing at tablet width. Open the full site ↗ for the desktop experience. Also fully optimized for mobile.

Admin Dashboard

Everything runs from a single protected dashboard. No code, no developer on call — every change reflects on the live site immediately. Live read-only demo below, no login needed.

A 7-step onboarding wizard walks non-technical owners through setup in the right order: business info, connecting Stripe (publishable key, secret key, and webhook, each saved individually), connecting Resend with a live test email, adding their first service, setting weekly availability, and optionally connecting a custom domain via the Cloudflare API.

Operations

  • At-a-glance overview — today's schedule, monthly revenue, upcoming appointments, unread messages
  • Appointments — one-click cancel + Stripe refund, private notes, CSV export
  • Client directory — searchable by email, full visit history, session count, total spend
  • Reviews — approval queue before anything goes live, feature toggle for homepage

Services & Scheduling

  • Services — image upload, drag-to-reorder, multiple variants per service with independent pricing and duration
  • Availability — per-day rules with independent hours; weekdays and weekends configured separately

Monetization

  • Gift Cards — purchased via Stripe, emailed to recipient, balance deducted server-side, auto-restored on cancellation
  • Discount Codes — percent-off or fixed-dollar, usage limits, expiry dates, server-side validated

Site Control

  • Appearance — 5 color palettes, 5 font combinations; applies to the live site instantly
  • Content — hero, bio, FAQ, site banner all editable without code
  • SEO — custom meta title, description, and Open Graph tags per page
  • Integrations — connect Stripe and Resend directly from the UI

Desktop

the-wellness-co.vercel.app/admin

Open full screen ↗

Gift Card Flow

Gift cards are purchased directly on the booking site via Stripe. Recipients receive a unique code by email and can check their remaining balance anytime before redeeming it at checkout.

Desktop Pages

Click any screenshot to enlarge.

the-wellness-co.vercel.app
Home page

Home — hero, services overview, and booking CTA.

the-wellness-co.vercel.app/services
Services page

Services — all modalities with pricing, duration, and variant options.

the-wellness-co.vercel.app/book
Booking page

Booking — live availability calendar with Stripe checkout at the end.

the-wellness-co.vercel.app/book · service variants
Service variant selection

Service variants — clients pick duration and rate inline before choosing a time slot.

the-wellness-co.vercel.app/stories
Stories page

Stories — client testimonials pulled from the admin and gated by an approval queue.

the-wellness-co.vercel.app/about
About page

About — practitioner bio and credential section, editable from the admin.

the-wellness-co.vercel.app/admin · discount codes
Admin discount codes

Admin — discount code creation with usage limits and expiry, no developer needed.

the-wellness-co.vercel.app/gift-cards
Gift card purchase page

Gift cards — clients buy and send directly through the site via Stripe.

Mobile Experience

9:41

Client

9:41

Admin

Technical Implementation

Booking & Payment Flow

When a client completes checkout, Stripe redirects to /api/confirmation — a server-side handler that writes the appointment to Supabase and fires the confirmation email via Resend. A parallel Stripe webhook runs as a safety net for abandoned browsers, with idempotency checks to prevent duplicate bookings. Either path alone produces a confirmed appointment; a failed payment never does. Four distinct email flows run through Resend: booking confirmation with a cancel/reschedule link, cancellation receipt with refund amount and processing timeline, reschedule confirmation, and contact form notifications routed to the practitioner.

Appearance System

The appearance system is built entirely on CSS custom properties. Selecting a palette in the admin writes the choice to the database; the client site reads it on load and injects the variables into :root. A small synchronous theme-init.js in the <head> reads a localStorage cache of the last-known palette and applies it before the first paint, eliminating any color flash while the async API call is in flight.

Demo Mode

A read-only demo mode makes the admin accessible from this portfolio without exposing write endpoints. Every mutating action is intercepted client-side and replaced with an informational toast — demo sessions never reach the API. The color palette and font combination cards remain interactive so visitors can experience the appearance system live.

Cancellation & Refunds

Each appointment is issued a UUID cancel token at insert time. The confirmation email carries that token in a link — no login required, and the URL can't be guessed or enumerated. When a client clicks the link, the server calculates time remaining and determines their refund tier: full refund beyond 48 hours, 50% inside 48 hours, nothing for no-shows. Rescheduling always issues a full refund regardless of timing. All refunds are executed server-side through the Stripe API automatically.

Live on White Bear Harmonics — clients inside 48 hours see a partial refund notice before confirming. The refund executes automatically through the Stripe API. Click to expand.

SEO

Service pages, the booking flow, and the homepage each get unique title, description, and Open Graph tags assembled from the database and injected server-side before the response leaves the server. Search engines and link previewers see complete, page-specific metadata without any client-side JavaScript — which matters for a local service business where discoverability drives bookings. The practitioner can edit all SEO copy directly from the admin dashboard.

Reviews

The review system handles the full lifecycle: a public submission form on the client site, an admin approval queue where the practitioner accepts or rejects each review before it goes live, and a feature toggle that promotes one review to the homepage. No review appears publicly without explicit admin approval.

Gift Cards & Discount Codes

Gift card purchases go through a dedicated Stripe Checkout session. On completion, a webhook inserts the card into the database and emails the recipient a unique code. At booking time, the client enters the code — the server validates it, deducts the amount from remaining_balance, and creates the appointment directly without a second Stripe charge. If the appointment is later cancelled through the admin dashboard, the deducted amount is automatically restored to the card's balance. The booking path stores the gift card code and amount paid on the appointment row so cancellations always know exactly what to restore.

Discount codes are validated and applied entirely server-side — the client sends the code and the server re-validates it independently before creating the Stripe session, so the frontend price display is never trusted. Usage count increments in the Stripe webhook after confirmed payment. Codes support percent-off or fixed-dollar discounts, optional per-tenant usage limits, and optional expiry dates. Both gift cards and discount codes are managed from the admin dashboard without developer involvement.

Practitioner Notifications

Every new booking — whether paid through Stripe or a free consultation booked directly — triggers a notification email to the practitioner alongside the client confirmation. The email includes the client's name, contact info, date, time, any notes they left, and a direct link to the dashboard. Both the Stripe webhook path (for paid services) and the free booking path fire this independently so no booking ever goes unnoticed regardless of which code path handled it.

Auth & Multi-Tenancy

The admin is protected by Supabase Auth with a rate-limited login endpoint and JWT validation on every protected route. Password reset is handled through a tokenized email flow. The architecture is multi-tenant from day one — a single middleware reads an X-Tenant-Slug request header and scopes every database query to that tenant. Onboarding a new practitioner means inserting a row and deploying a Vercel project, no schema changes, no code forks. A cron job runs nightly to send automated appointment reminder emails 24 hours before each scheduled session. A GDPR-compliant cookie consent banner appears on first visit with accept/decline options; the choice persists in localStorage so the prompt never re-appears.

What the Real Client Changed

Two assumptions I built in during the spec phase turned out to be wrong once I was working with an actual practitioner.

Availability isn't a weekly template. The initial model gave practitioners one schedule that applied to every day of the week. White Bear Harmonics, a Michigan energy healing and acupuncture practice, runs her practice alongside a full-time job — meaning weekday hours are evenings only, while weekends are completely open. A single schedule block couldn't express that. I rebuilt availability as per-day rules with independent start and end times, so Monday through Friday can be configured entirely separately from Saturday and Sunday.

Services aren't flat items. The initial model assumed one service = one price = one duration. White Bear Harmonics' offerings don't work that way — "Acupuncture" isn't a single thing, it's a 30-minute community session, a 60-minute individual session, and a 90-minute deep treatment, each priced differently. Showing just the service name with one price stripped out the information clients actually need to decide. I added service variants — child records per offering under each parent service — and surfaced them in a slide-out detail panel on the public site so clients can compare and select before booking.

Both changes came directly from sitting with the business owner and watching the first model fail against how she actually worked.

The Outcome

The Wellness Co. is the spec deployment that proved the platform. White Bear Harmonics is the first real client — a Michigan wellness practitioner who went from zero online presence to a fully live business using the admin dashboard alone: connected their own Stripe account, configured Resend for transactional email, set their branding, built out their services, and went live with complete SEO coverage including custom meta titles, descriptions, and Open Graph images — all without a single line of code. The multi-tenant architecture means onboarding them required no code changes, no schema updates, and no new deployment. 100/100/100 Lighthouse scores across Performance, Accessibility, and SEO. Part of the Small Business Platform Suite.