A Romanian-language marketing website for an auto detailing business, live at nvautodetailing.com. A static site on Netlify with service pages, a filterable portfolio, a contact form and a serverless function that shows the business's Google reviews.
Website built for a third-party business. Brand names, logos and portfolio photos belong to NV Autodetailing.
- A serverless function fetches the business's Google reviews and caches them on Netlify's CDN for 24 hours, so the reviews are refreshed about once a day instead of on every visit.
- A custom reviews carousel. It loops endlessly and pauses on hover, on touch or when scrolled out of view. It respects reduced-motion settings and opens full reviews in a native dialog.
- A homepage plus six service landing pages, each with canonical URLs, Open Graph tags and structured data for search engines (business, service, FAQ and breadcrumbs).
- A portfolio of real work photos in six categories, with filters, a lightbox and a before-and-after slider you can drag or move with the arrow keys.
- A Netlify Forms contact form with spam protection and inline success and error messages.
The problem
A local auto detailing business needed a professional website. It had to:
- present the services: window film, paint polishing, ceramic protection, interior detailing, engine cleaning and headlight restoration
- show real results
- make it easy for customers to get in touch
The site runs within Netlify’s free tier.
What was built
A Romanian-language static website with:
- a homepage
- six service landing pages
- privacy, terms and 404 pages
The homepage covers the services, a before-and-after slider, the business’s story, the product brands it works with, a filterable portfolio, live Google reviews and a contact form.
The site started from a free template. The live pages now use their own stylesheet and script in place of the template’s framework.
Architecture
- Static front end. Hand-written HTML pages share one custom stylesheet and one script.
- Contact form. Handled by Netlify Forms and submitted in the background, so the page doesn’t reload.
- Reviews function. A Netlify Function written in TypeScript calls a Google reviews API through SerpApi. It returns the reviews in a consistent shape and tells Netlify’s CDN how long to cache them.
- Reviews widget. It renders the reviews in the site’s own style. If the function is unavailable, it loads a third-party widget instead.
Engineering details
- API key. The key is never committed. It is read from Netlify’s environment variables.
- Caching. Each response has its own cache lifetime: 24 hours on success, 5 minutes after an upstream error, and 1 minute when the function is not configured.
- Accessibility. The before-and-after slider works with the keyboard and Escape closes the mobile menu. Animations respect reduced-motion settings, and the review count uses correct Romanian plurals.
- Performance. Images load lazily, and the hero image is preloaded in two sizes.