← Back to Template

Stillpoint Massage

Your guide to making the template your own.

Start here

Stillpoint Massage is a Bootstrap 5 landing page for an independent massage practice. It combines a clear treatment menu, first-visit questions, an illustrative therapist introduction, appointment information, return-visit links, and a reviewable email inquiry form.

Extract the ZIP and open index.html. Keep all assets beside it. No build tools or backend are required. A local web server can help test clipboard behavior.

stillpoint-massage/
  index.html
  README.html
  LICENSES.txt
  assets/css/style.css
  assets/js/main.js
  assets/vendor/bootstrap.min.css
  assets/vendor/bootstrap.bundle.min.js
  assets/images/treatment-room.webp
  assets/images/therapist.webp
  assets/images/favicon.svg

Business & trust content

Edit the plain-text logo, page title, description, introduction, contact details, and footer in index.html. The demonstration city is San Luis Obispo, California. Replace 999-999-9999, hello@stillpointmassage.example, and “Address to be announced.” Sample inquiry hours are Mon–Fri 9am–6pm, Sat 9am–4pm, and Sunday closed, Pacific time.

Keep details consistent in the pinned information bar, Visit section, footer, policies, and JavaScript. Link your genuine phone number using tel: after replacing the placeholder.

Alex Morgan is a fictional profile with an illustrative portrait. Replace the name, approach, image, and profile notice with actual therapist information. Add only verified qualifications, registrations, and relevant experience. Replace the studio image with real practice photography when available.

No testimonials or star ratings are included because genuine reviews were not supplied. If adding reviews, use permissioned, authentic quotations with accurate attribution or link to your real review profile. Update the trust FAQ accordingly; do not fabricate proof or outcomes.

Treatments & choosing a session

Four sample appointment options are included: Relaxation massage, 60 minutes/$95 and 90 minutes/$135; Focused massage, 45 minutes/$75 and 60 minutes/$100. These are editable demonstration durations and USD prices. Confirm what appointment time includes and avoid implying all time is hands-on treatment.

Each .menu-item uses a data-category of relax or focus. Matching filter buttons use data-filter; the two choice links use data-select-filter. Keep the “all” filter and update the hidden item count after menu changes. Arrow keys, Home, and End select categories.

Each treatment inquiry link has a data-service value that must exactly match a form option, including duration. The script preserves other entries, preselects the treatment, and invalidates a previously prepared draft. “Help me choose” supports visitors who are unsure without making suitability recommendations.

First visits, policies & returning clients

Edit the first-visit section and FAQs to match the actual practice’s arrangements for clothing, changing, draping, pressure, and privacy. The current copy suggests questions and conversations; it is not a statement of verified treatment protocols.

No cancellation notice period, fee, deposit, package, or membership has been invented. Before launch, supply the real terms in the appointment-information section and cancellation FAQ. Explain how to contact the practice for changes. Align policy wording with any external booking provider.

“Request another session” sets the request-type field to Returning client. The appointment-change link sets it to Change an existing appointment. Both preserve other entries and invalidate any existing draft. The request type appears in the email draft. These actions do not modify a real appointment.

The therapist inquiry link uses data-practitioner to append the therapist name to the message without replacing existing text. Update it when changing the profile name.

Connect online booking & reminders

At the top of assets/js/main.js, settings.bookingUrl is blank. The hero action currently links to the inquiry form. To connect your provider, enter its real HTTPS booking URL. The script changes elements with data-booking-link to “Book online,” opening that URL in a new tab. Add this attribute to other booking CTAs if desired. Invalid or non-HTTPS URLs leave the inquiry fallback intact.

Availability, appointment management, confirmation, cancellation handling, payments, and reminder delivery remain the provider’s responsibility. This static page does not implement those services. Configure and test reminders in your provider account before advertising them.

After connecting, revise the booking FAQ, reminders text, and policies to describe the actual service. Keep an email inquiry path for questions. Review the external provider’s privacy and cancellation behavior and test the link on desktop and mobile.

Email drafts & validation

Set the actual recipient, businessName, and timezone in assets/js/main.js. The sample .example recipient will not reach a real practice. The timezone is America/Los_Angeles; update visible Pacific-time references too if changing it.

Name, email, treatment, date, and time are required. Phone and message are optional. Past dates are rejected based on the business timezone. Times are preferences, not live availability, and are not checked against opening hours.

“Prepare my email” builds a visible draft. “Open email app” hands it to the visitor’s mail app, where they choose whether to send. “Copy draft” copies it when permitted, or selects it for manual copying. Editing any field or changing a selected treatment/request invalidates the old draft. Reset clears the form and draft.

No entries are submitted automatically, stored in browser storage, or used to confirm an appointment. Avoid sensitive medical information in this demonstration form. If adding a secure intake system, document its real behavior and update the privacy text.

Colors, images & typography

Edit CSS variables in assets/css/style.css. Stillpoint-specific layout rules appear after the shared control styles.

VariableValuePurpose
--cream#F6F2E9Warm backgrounds
--sand#DDD6C9Studio and return-visit sections
--green#626C50Buttons and information bar
--deep#30382CDark text and footer
--sage#ADB49AAccents

Headings use Georgia; body text uses Arial/Helvetica with system fallbacks. General copy is 18px desktop/17px mobile, hero copy 20px/18px, treatment descriptions and FAQs 16px, form labels 15px, inputs at least 16px, notes around 13px, and footer links 14px. Keep these readable proportions when editing.

The two local WebP images are illustrative. Replace them and their alt text. The room image is landscape; the therapist image is portrait. Adjust crops with object-position, preserving object-fit:cover to avoid stretching.

Navigation, FAQs & accessibility

The phone/address/hours bar and main navigation share one sticky header. ResizeObserver measures only .pinned-rows, excluding the expanded mobile menu, into --header-height. This controls section offsets and the menu’s available height. Keep the wrappers intact.

The mobile menu closes on link selection or Escape and scrolls on short screens. Section destinations receive focus without a container outline. Buttons, links, filters, and inputs retain visible keyboard focus. Preserve the skip link, labels, image descriptions, and reduced-motion support.

Eight FAQs use Bootstrap Collapse, initially closed and single-open. Keep unique answer IDs and matching target/ARIA attributes. Privacy and Terms of Use open Bootstrap Modals with Escape, focus trapping, focus return, and scrollable content. Keep dialog close controls and titles.

Troubleshooting & launch checklist

Dependencies & notices

Bootstrap 5.3.3 and bundled Popper 2.11.8 are included locally under the MIT license. See LICENSES.txt. Fonts are system references, not distributed files. Photos are illustrative assets and do not verify staff or premises. The favicon is SVG artwork. Check rights for all replacement assets.