|
|
||
|---|---|---|
| .github/workflows | ||
| .w4c | ||
| app | ||
| components | ||
| docker | ||
| lib | ||
| messages | ||
| prisma | ||
| public | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .eslintrc.json | ||
| .gitignore | ||
| middleware.ts | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Landing / Marketing — Next.js (templates2)
A ready-to-run marketing site forked from templates2.Base.Next: multi-page marketing,
lead capture, a blog with RSS, and full SEO artifacts — plus the whole base core (auth, roles,
admin, mock payments/email, Docker, CI).
Quickstart
npm ci
cp .env.example .env # SQLite + mock providers by default — no keys needed
npm run db:setup # prisma db push + seed
npm run dev # http://localhost:3000
Admin account (seeded): admin@example.com / password.
Pages
| Route | What it is |
|---|---|
/ |
Hero + feature grid + CTAs |
/features |
Feature detail |
/pricing |
Plans (mock checkout works with no keys) |
/blog + /blog/[slug] |
Post list & article (static collection in lib/posts.ts) |
/faq |
FAQ with FAQPage JSON-LD |
/about, /contact |
Story + lead form |
/legal/privacy, /legal/terms |
Placeholder legal |
/admin/leads |
Captured leads (admin only) |
What this case adds over the base
- Lead capture —
POST /api/leads(public, validated with zod) persists to theLeadtable and notifies the owner via the email provider (log by default, Resend from env). Used by the contact page and the footer newsletter. - Blog — a static post collection with tags, reading time and per-post metadata +
ArticleJSON-LD; an RSS feed at/rss.xml. - SEO — Organization/WebSite JSON-LD on home,
FAQPageon/faq, a sitemap that includes every page and post. - Admin leads — a leads table in the admin shell.
Env
See .env.example. Nothing is required: SQLite + mock providers run with zero configuration.
Quality
node templates2/qa.mjs Landing.Next
See ../CONTRACT.md for the Definition of Done.