Faith-based talks platform. Next.js app with a Convex backend.
- App: Next.js 16, React 19, Tailwind CSS v4
- UI: Coss UI (Base UI)
- Backend: Convex
- Auth: Better Auth (+ Cloudflare Turnstile)
- Forms: React Hook Form + Zod
- Email: Resend + React Email
- Analytics: Vercel Analytics + Segment
- Errors: Sentry
- Lint/format: Oxlint + Oxfmt (Ultracite)
- Deploy: Vercel
Needs: Node.js 24+ (see .nvmrc), pnpm 11+
- Clone and install:
pnpm install- Copy
.env.exampleto.env.localand fill in values. Convex, auth, email, Turnstile, Segment, and Sentry keys are documented there. - Start local development:
pnpm devRuns Next.js (HTTPS on https://localhost:3000) and Convex in parallel. On macOS it also opens the browser.
| Script | What it does |
|---|---|
pnpm style |
Lint + format fix |
pnpm typecheck |
TypeScript check |
pnpm test |
Vitest (*.test.ts, *.test.tsx) |
pnpm test:e2e |
Playwright (e2e/*.spec.ts) |
pnpm build |
Production Next.js build |
pnpm release |
Manual Convex deploy (fallback) |
Vercel production builds run convex deploy --cmd 'pnpm build' from scripts/vercel-build.sh, so Convex functions ship with the frontend. A failed Convex push fails the build.
Set CONVEX_DEPLOY_KEY in Vercel to the Convex Production Deploy Key (Production env only) and the Convex Preview Deploy Key (Preview env only). Same variable name, different values per environment — do not reuse one key for both. pnpm release remains a local fallback.