Small, production-ready template for static marketing websites with a config-first editing model.
- Next.js (App Router) + TypeScript
- Tailwind CSS
- ESLint + Prettier
npm installnpm run dev- Open
http://localhost:3000
npm run devnpm run buildnpm run startnpm run lintnpm run typecheck
- Prefer editing
site.config.tsfor content and section ordering. - Add/modify section components only when a new section type is required.
- Keep changes minimal and avoid config/dependency changes unless requested.
- Before merging, run
npm run lint,npm run typecheck,npm run build.
- Connect repo to Vercel via Git.
- Build command:
npm run build - Start command:
npm run start
Recommended commit format:
feat(template): ...fix(template): ...chore(template): ...
Use .github/pull_request_template.md to keep PR descriptions high-signal.# Website Service Template
Production-ready, extensible Next.js App Router template for AI-generated marketing websites.
- Next.js (App Router) + TypeScript
- Tailwind CSS v4
- ESLint + Prettier
- Static-first architecture with optional DB stubs
-
Install dependencies:
npm install
-
Create your env file:
cp env.example .env.local
-
Start development server:
npm run dev
-
Open
http://localhost:3000.
Run before creating commits or deploys:
npm run lint
npm run typecheck
npm run build- Push this repository to GitHub.
- Import the repo into Vercel.
- Keep build command as
npm run build. - Keep start command as
npm run start. - Set env vars as needed (
NEXT_PUBLIC_SITE_URL, optionalDATABASE_URL).
The generator should only edit paths allowed in docs/GENERATOR_GUIDE.md.
Typical flow:
-
Create a branch.
-
Apply patch/diff output to allowed files.
-
Validate path scope:
npm run validate:tree -- app/page.tsx components/sections/Hero.tsx lib/site.ts
-
Run checks:
npm run lint && npm run typecheck && npm run build
-
Commit and open PR.
Primary content source is lib/site.ts.
- Brand
- Theme tokens
- Navigation
- Ordered section array (Hero, Features, CTA, Testimonials, FAQ, Footer)
- SEO defaults
Homepage rendering is config-driven in app/page.tsx.