Physical Therapy is a website template for physiotherapy, massage and chiropractic clinics, built on Bootstrap 5, with a calm rose-and-white design. The layout is responsive and works in all popular web browsers. It comes with six pages: home, services, about, blog, blog post and contact.
The home page has a full-screen hero with a parallax photo and a typing headline, a quick-contact strip, service cards, a “Why Choose Us” band with animated counters, special offers, a testimonials slider and a call to action. The inner pages add eight service cards, the clinic’s story and team, a blog with a sidebar, an article with a comment thread and a contact page with opening hours and a working contact form, and the desktop menu has multi-level drop-downs.
What’s new in 3.0
Bootstrap 5.3.8 (the earlier release used Bootstrap 4.1.3 and jQuery), compiled from Sass with the original Bootstrap 4 proportions, and plain JavaScript with no jQuery. Swiper 14 replaces Owl Carousel on the testimonials, Jarallax replaces Stellar on the hero, a keyboard-operable dialog replaces the off-canvas mobile menu, and small built-in modules replace AOS, the counter plugins and typed.js. npm run build (Dart Sass and esbuild) compiles one minified stylesheet and one script.
Lighter pages: all seven pages together went from 13.7 MB and 224 requests to 4.0 MB and 94 requests. Every photo has an AVIF version with the original as the fallback, real dimensions and lazy loading, the hero photo is preloaded, and plugins the pages loaded without using (jQuery UI, Magnific Popup, MediaElement, a range slider, a countdown and a date picker) are gone.
No third-party requests: Rubik is self-hosted, the IcoMoon and Flaticon icon fonts are replaced by Lucide SVG icons and a 1.1 KB social-logo subset (the Twitter bird is now the X logo), and a Google Analytics 4 snippet stays commented out until you add your own ID. Before, every page loaded its font from Google Fonts.
Working forms: the contact, comment and newsletter forms send through php/send-email.php, with validation, a spam trap and an in-page message, and the blog search sends a query. Before, the forms had no action and their fields had no names, so nothing could be sent.
Accessibility: a skip link and a main landmark on every page, one h1 per page, a real menu button, submenus that open from the keyboard, names on icon-only links, descriptive alt text, visible focus rings, reduced-motion support and WCAG AA text contrast, with a deeper rose for buttons, bands and pink text, a darker shade behind the menu on the hero photo and darker grey text.
Fixed: the menu’s submenu markup was nested incorrectly, the special offers listed Chiropractic Therapy twice and the services page repeated the same four services, offer buttons pointed at a page that did not exist, and many links went nowhere.
Demo content: clinic copy for every section, eight distinct services, a team page with roles, six blog posts and a full article, current dates and fictional contact details.