Kusina is a restaurant, bakery and coffee bar website template, built on Bootstrap 5. The home page opens with a split-screen photo slider, followed by an about section with a video button, animated counters, a menu with six groups, the kitchen team, guest testimonials and a table reservation form. The layout is responsive and mobile-ready. There are seven pages: home, about, menu, reservation, stories, a single story and contact.
The menu page lists breakfast, lunch, dinner, desserts, fresh fruit and drinks, each dish with a photo, price and ingredients. The reservation page has a booking form beside a map that loads on click, the stories pages have a post list and a full post with comments, a sidebar and a comment form, and the contact page has a working contact form and the opening hours.
What’s new in 3.0
Bootstrap 5.3.8 (the earlier release used Bootstrap 4.1 and jQuery), compiled from Sass together with the theme and the Bootstrap 4 proportions the design was drawn with, and plain JavaScript with no jQuery. Swiper 14 replaces Owl Carousel on the hero slider and testimonials, Jarallax replaces Stellar, a video dialog replaces Magnific Popup, a small built-in module replaces Waypoints and animate.css, and the date and time pickers are the browser’s own fields. npm run build (Dart Sass and esbuild) compiles one minified stylesheet and one script.
Lighter pages: the home page went from 8.3 MB and 85 requests to 2.6 MB and 60 requests, the menu page from 8.6 MB and 90 requests to 1.8 MB and 63 requests, and the contact page from 3.0 MB and 54 requests to 0.7 MB and 18 requests. Every photo has an AVIF version with the JPEG as the fallback, real dimensions and lazy loading below the first screen, the first hero photo is preloaded, and the full-page preloader is gone.
No third-party requests: Poppins and Lovers Quarrel are self-hosted, the four icon fonts are replaced by Lucide SVG icons and a 1 KB social-logo subset, and the map on the contact and reservation pages is an OpenStreetMap map (no API key) that loads only when a visitor clicks “Show map”. The play button loads its video 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.
Working forms: the booking, contact, comment and newsletter forms send through the PHP handlers in includes/, with validation, a spam trap and an in-page message. Before, they had no action and no field 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, labelled form fields, names on icon and image links, visible focus rings, reduced-motion support and WCAG AA text contrast, with a darker red for buttons and links, darker meta greys and darker overlays behind text on photos.
Demo content: every dish has its own name, ingredients and price (all were “Grilled Beef with potatoes” or “Grilled Crab with Onion”), the kitchen team and guests have their own names, quotes and portraits, the stories and the blog post are real restaurant copy in place of placeholder text, the contact page shows a fictional address, and the demo photos are new Unsplash photos.
Fixed: the contact page left a section open, the booking form labelled its date field “Phone”, the home page had two h1 headings, and photo cards, buttons and social icons linked to “#”.