Overview
Kamys Driving School needed a fast, modern website to showcase services, coverage, testimonials, and contact flows — with a simple admin area to manage reviews. I delivered a responsive, accessible app that loads fast on mobile and is easy to maintain.
Live site: kamysdrivingschool.co.uk
Tech Stack
- Next.js App Router (React 18) + React
- TypeScript
- Tailwind CSS for styling
- Firebase (Auth + Firestore + Storage)
- Mapbox for coverage map
- EmailJS for contact form
This combination keeps content dynamic where needed (reviews/contact) while keeping the core site statically generated for speed and reliability.
Goals and Requirements
- Clear service pricing and packages
- Coverage map with interactive areas
- SEO-friendly pages and metadata
- Admin dashboard to approve/manage testimonials
- Contact/booking form with email notifications
- Mobile-first design with strong lighthouse scores
Information Architecture
- Home (hero, USP, services, CTA)
- Services (packages, pricing, FAQs)
- Coverage (Mapbox map with markers and service radius)
- Testimonials (public list)
- Contact (EmailJS form + server-side validation)
- Admin (Firebase auth, review moderation)
Firebase Integration
I used Firebase for parts that truly benefit from dynamic data and an authenticated workflow:
- Auth: Email/Password for the owner; RLS via custom claims (admin only)
- Firestore:
reviewscollection with fields:name,rating,comment,approved,createdAt - Storage: Optional image uploads for badges/certificates
Admin actions are routed through server components/actions so that credentials are never exposed on the client. Writes are validated; only approved: true reviews are shown publicly.
Deployment & Performance
- Statically generated core pages with ISR for reviews (revalidate) to keep content fresh
- Assets optimized and preloaded hero font for CLS stability
- Lighthouse results: 95–100 on PWA metrics for mobile
DX and Maintainability
- Components composed with Tailwind and headless patterns
- Env handling via Next runtime config and
.env.local - Simple content updates: add/update Firestore docs or edit MDX content
Results
- Faster time-to-first-meaningful-paint on budget devices
- Owner can approve testimonials without dev support
- Clear conversion funnel from hero → services → CTA
Closing
If you’re running a local business and want a site that’s fast, secure, and easy to manage, this pattern (Next.js + Firebase + Tailwind) is a great fit. I’m happy to adapt it for your needs.