Nova is a website template for martial arts and self-defense schools, built on Bootstrap 5. The layout is responsive and mobile-ready and works in all popular web browsers. It comes with six pages: home, about, classes, blog, blog post and contact.
The home page has a full-screen hero with a video button, an introduction with the list of classes, the instructors, six services, a testimonial slider and the latest blog posts, and the menu has a Programs drop-down. The about page introduces the school and its instructors, the classes page shows each class with its instructor, days and hours, the blog post page has tags, comments, a comment form and a sidebar with search, categories and an author box, and the contact page has a working contact form and the school’s contact details. Nova gives you a ready-made site to present your school, its classes and its instructors.
What’s new in 3.0
Bootstrap 5.3.8 (the earlier release stacked two pre-release builds of Bootstrap 5.0), compiled from Sass together with the theme and the original 5.0 proportions, and plain JavaScript with no jQuery. Swiper 14 replaces Tiny Slider on the testimonials, a video dialog replaces GLightbox, a small built-in module replaces AOS, an accessible menu panel replaces the off-canvas menu script, and an unused counter script, the page preloader and the Bootstrap JavaScript bundle are gone. npm run build (Dart Sass and esbuild) compiles one minified stylesheet and one script.
Lighter pages: the home page went from 1.7 MB and 32 requests to 804 KB and 19 requests, the other pages from 1.2–1.5 MB to 461–708 KB, and the download from 3.22 MB to 2.01 MB. Every photo has an AVIF version with the original as the fallback, real dimensions and lazy loading below the hero, and the hero photo is preloaded.
No third-party requests: Montserrat and Open Sans are self-hosted, the IcoMoon and Flaticon icon fonts are replaced by Lucide SVG icons and a small Font Awesome Brands subset for the social logos (the Twitter bird is now the X logo), the hero video is a stock fitness clip that loads from YouTube’s privacy-enhanced player only after a click, and a Google Analytics 4 snippet stays commented out until you add your own ID. Before, every page loaded its web fonts from Google Fonts and an analytics script from Google.
Working forms: the contact form and the blog comment form send through php/send-email.php, with validation, a spam trap and an in-page message, and the mailer keeps visitor input out of the email headers. Before, neither form had a working action or named fields, so nothing could be sent.
Accessibility: a skip link and a main landmark on every page, alt text, names on icon-only links, labelled form fields, a desktop submenu that opens from the keyboard, a phone and tablet menu panel that closes with Esc, 44 px menu, social, pagination and slider targets, visible focus rings and WCAG AA text contrast, with a deeper red under the white button labels, a darker red for red text and links, darker greys and a deeper hero overlay behind the menu and headline (the lowest text contrast went from 1.88:1 to 5.04:1).
Fixed: every page scrolled sideways at every screen width (the intro photo, a decorative circle and the slider arrows reached past the screen); the testimonial arrows sat off-screen below 1440 px and the dots were too small to see or tap, and both are now visible 44 px buttons at every width; the blog sidebar search icon never showed; and the six services now have distinct names and clear line icons, one per service (two names were repeated).
Demo content: real menu items instead of placeholders, one name per instructor photo, initials for readers’ comments, corrected typos, fictional contact details and a fictional school address, and every link and button goes to a real page (the earlier release had 233 placeholder links); the social icons open the networks’ home pages.