A responsive, professional website for Joetee Optimal Limited built with Next.js 14, TypeScript, and Tailwind CSS. It features conversion‑focused pages, a blog, and a lead capture quote form powered by Formspree. Designed to be low‑maintenance: no database and deployable on Vercel free tier.
- Responsive layout with accessible UI
- Pages: Home, Services, Our Work, About, Blogs, Contact
- Blog articles with clean headings, paragraphs, and CTA to the quote form
- Lead capture without a backend using Formspree
- Optional SMTP serverless route (disabled by default)
- Simple branding with editable SVG logo
- Next.js 14 App Router, TypeScript
- Tailwind CSS
- Formspree for form handling (no database)
- Vercel for hosting
Prerequisites: Node 18+ and npm.
npm install
npm run dev
# open http://localhost:3000/Create .env.local at the project root:
NEXT_PUBLIC_FORMSPREE_ENDPOINT=https://formspree.io/f/xxxxxx
Replace the URL with your Formspree endpoint. Do not commit .env.local to Git.
- App layout and global styles: app/layout.tsx, app/globals.css
- Navbar and footer: components/Navbar.tsx, components/Footer.tsx
- Quote form (Formspree submit): components/QuoteForm.tsx
- Blog posts data: app/blogs/posts.ts
- Blog listing and article page: app/blogs/page.tsx, app/blogs/[slug]/page.tsx
- SMTP route (disabled): app/api/quote/route.ts
- Logo: public/logo.svg
- Push the repository to GitHub.
- In Vercel, create a New Project and import the repo.
- Add the environment variable:
NEXT_PUBLIC_FORMSPREE_ENDPOINT=https://formspree.io/f/xxxxxx- Add to Production (and Preview if you use previews).
- Deploy and test the live URL by submitting the quote form.
- Update phone, email, hours, and CTA targets in components/Footer.tsx, components/Navbar.tsx, and app/contact/page.tsx.
- Edit services copy and hero content in app/page.tsx and app/services/page.tsx.
- Replace the logo in public/logo.svg.
- Add or revise blog content in app/blogs/posts.ts.
If you prefer email‑only serverless (instead of Formspree):
- Set these on Vercel:
BREVO_SMTP_USER,BREVO_SMTP_PASS,LEADS_FROM_EMAIL,LEADS_TO_EMAIL
- Verify SPF/DKIM/DMARC in your DNS for the sender domain.
- Re‑enable the SMTP logic inside app/api/quote/route.ts. The current route is intentionally stubbed to avoid build issues when SMTP is not configured.
.gitignoreexcludesnode_modules, build outputs, and env files.- Node 18+ recommended for compatibility with Next.js 14.
Copyright © 2026 Joetee Optimal Limited. All rights reserved.