A custom, high-conversion marketing site for Arctic Pool & Spa Services (Southwest Florida). Built with Next.js (App Router) + Tailwind CSS.
cd arctic-pools
npm install
npm run dev
Then open http://localhost:3000.
To build for production:
npm run build
npm start
arctic-pools/
├── app/
│ ├── layout.jsx # Root shell — fonts, navbar, footer, intro
│ ├── globals.css # Brand tokens + utility classes
│ ├── page.jsx # Home page (composes all sections)
│ ├── services/page.jsx # Services detail page
│ ├── about/page.jsx # About / story page
│ └── contact/page.jsx # Contact form + map + sidebar
├── components/
│ ├── BubbleIntro.jsx # Canvas bubble + glass-reveal load animation
│ ├── Navbar.jsx # Sticky blur navbar + mobile drawer
│ ├── Footer.jsx # Footer with brand, links, contact
│ ├── FloatingCall.jsx # Mobile sticky "Call Now" button
│ ├── QuoteModal.jsx # Quote-request modal (mailto handler)
│ ├── RevealOnScroll.jsx # Tiny IntersectionObserver wrapper
│ ├── Hero.jsx # Headline, CTAs, trust strip, parallax bg
│ ├── TrustBar.jsx # 4-up trust signals card
│ ├── Services.jsx # Hover-lift service cards
│ ├── VisualProof.jsx # Real photos w/ brand overlay
│ ├── WhyUs.jsx # Image + 4 reasons grid
│ ├── Testimonials.jsx # 3-up review cards
│ └── CTA.jsx # Full-width conversion block
├── tailwind.config.js # Brand colors, animations, shadows
├── postcss.config.js
├── next.config.mjs # Allows Unsplash/Pexels image hosts
├── jsconfig.json # `@/*` import alias
└── package.json
Extracted from the truck wrap photo and codified in tailwind.config.js:
| Token | Hex | Usage |
|---|---|---|
ink |
#04111E |
Page background |
midnight |
#072742 |
Section backdrops |
deep |
#0B3C5D |
Deep electric blue (gradient) |
aqua |
#00BFFF |
Glow / accent / hover |
ice |
#7FDBFF |
Soft cyan |
frost |
#E6F6FF |
Body text on dark |
Reusable utility classes live in app/globals.css:
btn-primary, btn-ghost, card, card-hover, chip, heading-xl,
heading-lg, text-glow (animated shimmer gradient), water-grid.
prefers-reduced-motion). See components/BubbleIntro.jsx.mailto: (swap
for your API/Worker later).next/image, lazy maps, no animation libraries.(239) 378-0640 to update.service@arcticpools.org.next.config.mjs).QuoteModal.jsx and app/contact/page.jsx, replace the
mailto: redirect with a fetch() to your endpoint.The site deploys cleanly to Vercel, Cloudflare Pages, or any host supporting Next.js 14. From the project directory:
# Vercel
npx vercel
# Cloudflare Pages (build command)
npm run build && npx @cloudflare/next-on-pages