Calvino is a website template for digital marketing, SEO and advertising agencies, built on Bootstrap 5, with a light design in white and raspberry. The layout is responsive and works in all popular web browsers. It comes with eight pages: home, about, services, case study, blog, blog details, contact and elements.
The home page has a hero with a video button, four service cards, an about section, pricing plans with yearly and monthly tabs, counters, a client logo carousel, a case-study carousel, a testimonial and a contact call-to-action. The inner pages add the team story, the services with their prices, case studies, a blog with sidebar search, comments and a newsletter form, and a contact page with a click-to-load map and a working contact form.
What’s new in 3.0
Bootstrap 5.3.8 (the earlier release used a Bootstrap 5.0 pre-release and jQuery), compiled from Sass together with the theme, and plain JavaScript with no jQuery. Swiper 14 replaces Slick on the case-study and client-logo carousels, PhotoSwipe replaces Magnific Popup in the elements gallery, a keyboard-operable dialog replaces the SlickNav mobile menu, and Lucide SVG icons replace the Font Awesome, Themify and Linearicons fonts. npm run build (Dart Sass and esbuild) compiles one minified stylesheet and one script.
Lighter pages: all nine pages together went from 13.9 MB and 442 requests to 6.3 MB and 202 requests; the home page from 2.0 MB to 0.9 MB. Every photo has an AVIF version with the JPEG or PNG as the fallback, real dimensions and lazy loading below the hero, and each page preloads its hero image.
No third-party requests: Jost and Nunito are self-hosted, the social logos are a small Font Awesome Brands subset, the contact map loads from OpenStreetMap only after a click, the video plays 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 contact form, the blog comment form and the newsletter send through PHP handlers in php/, with validation, a spam trap and in-page messages, and the blog search lists the matching posts. Before, the contact form posted to a file that did not exist and the other forms sent nothing.
Accessibility: a skip link and a main landmark on every page, one h1 per page, a real menu button, a mobile menu that keeps keyboard focus inside and closes with Esc, a Blog submenu that opens from the keyboard, names on icon-only links, labelled form fields, visible focus rings, reduced-motion support and WCAG AA text contrast, with a deeper raspberry for text and buttons, darker greys and dark panels behind text on photos.
Demo content and fixes: distinct services, prices, case studies and blog posts instead of repeated placeholders, fictional client wordmarks and contact details, new hero, contact and blog photos, and marketing copy on the elements page. The header phone number was invisible on the white sticky bar, the footer pattern was stretched up to ten times on phones, and the elements page’s right-aligned sample was not right-aligned.