A modern, high-converting single-page website for Body Fit Gym, Lucknow. Built with Next.js 14 (App Router) and Tailwind CSS, fully responsive, mobile-first, ready to deploy on Vercel in one click.
- Hero — bold headline, ratings, primary CTA + call button
- Trust Bar — 4.5★ · 1000+ reviews · 7+ years
- About — story + image
- Services — 6-tile grid with custom icons
- Testimonials — Google-style review cards
- Location — embedded Google Map + address card
- Contact/CTA — phone, WhatsApp, contact form (opens WhatsApp)
- Footer — contact, social, navigation
- Floating WhatsApp — sticky button on every screen
- Dark, energetic palette (charcoal
#070708+ flame accent#FF4D00) - Custom display font (Space Grotesk) + body font (Inter)
- Subtle scroll-reveal animations, respects
prefers-reduced-motion - Accessible, semantic HTML, keyboard-friendly mobile nav
- Next.js 14 (App Router, TypeScript)
- Tailwind CSS with custom theme
- Inline SVG icon set (no icon library)
- Google Maps embedded via iframe
tel:andwa.medeep links for the phone / WhatsApp buttons- Contact form opens WhatsApp with the user's message pre-filled
npm install
npm run devOpen http://localhost:3000.
npm run build
npm run start- Push this folder to a Git repo (GitHub/GitLab/Bitbucket).
- Go to vercel.com/new and import the repo.
- Vercel auto-detects Next.js — no env vars needed.
- Click Deploy. Done.
Or use the Vercel CLI:
npm i -g vercel
vercelapp/
layout.tsx # root layout, fonts, metadata, SEO
page.tsx # single-page composition
globals.css # tailwind + custom utilities
components/
Navbar.tsx
Hero.tsx
TrustBar.tsx
About.tsx
Services.tsx
Testimonials.tsx
Location.tsx
Contact.tsx
Footer.tsx
FloatingWhatsApp.tsx
Reveal.tsx # scroll reveal helper (IntersectionObserver)
Icons.tsx # inline SVG icon set
lib/
business.ts # all business info (phone, address, links)
All business details (phone, address, rating, etc.) live in
lib/business.ts. Update once and the entire site
reflects the change.
- Phone:
tel:+918756100444 - WhatsApp:
https://wa.me/918756100444(with prefilled text for the CTA)
All imagery is loaded from Unsplash via images.unsplash.com URLs, which
are allowed in next.config.mjs. Swap them for real gym photos by replacing
the URLs in the components.