Landing page for capturing early-access testers for an AI bot generator. Built with Next.js, Tailwind CSS, and Framer Motion.
- Futuristic hero with CTA and animated cards
- Sections: how it works, bot examples, audiences, benefits, CTA + contact form, footer
- Contact form captures name, email, telegram, bot type, description, and testing intent
- API route writes to the
clientstable (PostgreSQL) with email fallback via Nodemailer - SEO meta tags and OpenGraph data
- Docker Compose for frontend + Postgres
- Copy environment variables
cp .env.example .env- Update
.envwith your PostgreSQL and SMTP credentials. - Install dependencies and run the dev server (Node 20+):
npm install
npm run dev- Open http://localhost:3000.
Without database credentials the API route will attempt to send the submission via email fallback.
- Run type checks and linting:
npm run lint- Build the production bundle to ensure the landing page renders without errors:
npm run build- Start a production preview server after building:
npm run startThe execution environment used for this repository does not have Node.js installed, so run the commands above on a local machine or CI runner with Node 20+ available.
POST /api/clients
{
"name": "Jane Doe",
"email": "jane@example.com",
"telegram": "@jane",
"botType": "Customer Support",
"description": "Help answer product questions",
"wantTest": true,
"source": "landing-page"
}- Writes to
clientswithcreated_attimestamp whenDATABASE_URLis configured. - Falls back to Nodemailer email if database is unavailable or not configured.
Table is created automatically if it does not exist:
clients (
id serial primary key,
name varchar(255) not null,
email varchar(255) not null,
telegram varchar(255),
use_case varchar(255),
description text,
want_test boolean,
source varchar(255),
created_at timestamptz default now()
)
Run the full stack with Postgres (reads .env for credentials):
docker compose up --build- Frontend: http://localhost:3000
- Database: exposed on
5432(username/passwordpostgres) - Services auto-restart and wait for Postgres health before starting the app.