Marketing and inquiry website for Zero Trace, a reusable sustainable event kits service.
This project is built with Next.js and presents the venture story end-to-end: problem, solution, impact, team, and a contact funnel that sends inquiries by email.
- Landing page with structured sections for hero, problem, solution, impact, team, and contact
- Motion-enhanced UI using Framer Motion
- Centralized content configuration in
src/content/site.ts - Contact form with:
- Honeypot spam trap
- Basic IP rate limiting (
5requests per minute per IP) - Server-side input validation
- SMTP email delivery through Nodemailer
- Handlebars email template rendering (
src/templates/contact-enquiry.hbs)
- Next.js 14 (App Router)
- React 18 + TypeScript
- Tailwind CSS
- Framer Motion
- Nodemailer + Handlebars
- Vercel Analytics
npm installCreate a local env file:
cp .env.example .env.localMinimum required variables:
SMTP_USER=you@gmail.com
SMTP_PASS=your_app_passwordOptional variables:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_SECURE=true
CONTACT_TO_EMAIL=inbox@example.com
CONTACT_FROM_EMAIL=no-reply@example.com
CONTACT_EMAIL_ASYNC=falseNotes:
SMTP_PASSshould be an app password (for Gmail) and can include spaces; the API strips spaces safely.- If
CONTACT_TO_EMAILorCONTACT_FROM_EMAILare omitted,SMTP_USERis used. - In Vercel runtime, email sending is awaited for reliability.
npm run devOpen http://localhost:3000.
npm run dev- Start local development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLint checks
src/
app/
api/contact/route.ts # Contact API (validation, rate limit, email send)
page.tsx # Main landing page composition
components/
sections/ # Landing page sections
forms/ContactForm.tsx # Client-side contact form
content/
site.ts # Site copy and content model
templates/
contact-enquiry.hbs # Email template used by API route
This app is deployment-ready for Vercel:
- Import repository into Vercel
- Set environment variables in project settings
- Deploy
Make sure SMTP credentials are configured in the deployment environment, otherwise /api/contact will return 503.
Zero Trace offers reusable event kits as a service to reduce single-use waste for social, corporate, and campus events.
For live preview and pitch assets, see links defined in src/content/site.ts.